OLD | NEW |
1 package nova_test | 1 package nova_test |
2 | 2 |
3 import ( | 3 import ( |
4 "bytes" | 4 "bytes" |
5 "fmt" | 5 "fmt" |
6 . "launchpad.net/gocheck" | 6 . "launchpad.net/gocheck" |
7 "launchpad.net/goose/client" | 7 "launchpad.net/goose/client" |
8 "launchpad.net/goose/errors" | 8 "launchpad.net/goose/errors" |
9 "launchpad.net/goose/identity" | 9 "launchpad.net/goose/identity" |
10 "launchpad.net/goose/nova" | 10 "launchpad.net/goose/nova" |
(...skipping 10 matching lines...) Expand all Loading... |
21 func registerOpenStackTests(cred *identity.Credentials, testImageDetails imageDe
tails) { | 21 func registerOpenStackTests(cred *identity.Credentials, testImageDetails imageDe
tails) { |
22 Suite(&LiveTests{ | 22 Suite(&LiveTests{ |
23 cred: cred, | 23 cred: cred, |
24 testImageId: testImageDetails.imageId, | 24 testImageId: testImageDetails.imageId, |
25 testFlavor: testImageDetails.flavor, | 25 testFlavor: testImageDetails.flavor, |
26 vendor: testImageDetails.vendor, | 26 vendor: testImageDetails.vendor, |
27 }) | 27 }) |
28 } | 28 } |
29 | 29 |
30 type LiveTests struct { | 30 type LiveTests struct { |
31 » cred *identity.Credentials | 31 » cred *identity.Credentials |
32 » client client.AuthenticatingClient | 32 » client client.AuthenticatingClient |
33 » nova *nova.Client | 33 » nova *nova.Client |
34 » testServer *nova.Entity | 34 » testServer *nova.Entity |
35 » userId string | 35 » userId string |
36 » tenantId string | 36 » tenantId string |
37 » testImageId string | 37 » testImageId string |
38 » testFlavor string | 38 » testFlavor string |
39 » testFlavorId string | 39 » testFlavorId string |
40 » vendor string | 40 » testAvailabilityZone string |
41 » useNumericIds bool | 41 » vendor string |
| 42 » useNumericIds bool |
42 } | 43 } |
43 | 44 |
44 func (s *LiveTests) SetUpSuite(c *C) { | 45 func (s *LiveTests) SetUpSuite(c *C) { |
45 s.client = client.NewClient(s.cred, identity.AuthUserPass, nil) | 46 s.client = client.NewClient(s.cred, identity.AuthUserPass, nil) |
46 s.nova = nova.New(s.client) | 47 s.nova = nova.New(s.client) |
47 var err error | 48 var err error |
48 s.testFlavorId, err = s.findFlavorId(s.testFlavor) | 49 s.testFlavorId, err = s.findFlavorId(s.testFlavor) |
49 c.Assert(err, IsNil) | 50 c.Assert(err, IsNil) |
50 » s.testServer, err = s.createInstance(c, testImageName) | 51 » s.testServer, err = s.createInstance(testImageName) |
51 c.Assert(err, IsNil) | 52 c.Assert(err, IsNil) |
52 s.waitTestServerToStart(c) | 53 s.waitTestServerToStart(c) |
53 // These will not be filled in until a client has authorised which will
happen creating the instance above. | 54 // These will not be filled in until a client has authorised which will
happen creating the instance above. |
54 s.userId = s.client.UserId() | 55 s.userId = s.client.UserId() |
55 s.tenantId = s.client.TenantId() | 56 s.tenantId = s.client.TenantId() |
56 } | 57 } |
57 | 58 |
58 func (s *LiveTests) findFlavorId(flavorName string) (string, error) { | 59 func (s *LiveTests) findFlavorId(flavorName string) (string, error) { |
59 flavors, err := s.nova.ListFlavors() | 60 flavors, err := s.nova.ListFlavors() |
60 if err != nil { | 61 if err != nil { |
(...skipping 20 matching lines...) Expand all Loading... |
81 } | 82 } |
82 | 83 |
83 func (s *LiveTests) SetUpTest(c *C) { | 84 func (s *LiveTests) SetUpTest(c *C) { |
84 // noop, called by local test suite. | 85 // noop, called by local test suite. |
85 } | 86 } |
86 | 87 |
87 func (s *LiveTests) TearDownTest(c *C) { | 88 func (s *LiveTests) TearDownTest(c *C) { |
88 // noop, called by local test suite. | 89 // noop, called by local test suite. |
89 } | 90 } |
90 | 91 |
91 func (s *LiveTests) createInstance(c *C, name string) (instance *nova.Entity, er
r error) { | 92 func (s *LiveTests) createInstance(name string) (instance *nova.Entity, err erro
r) { |
92 opts := nova.RunServerOpts{ | 93 opts := nova.RunServerOpts{ |
93 » » Name: name, | 94 » » Name: name, |
94 » » FlavorId: s.testFlavorId, | 95 » » FlavorId: s.testFlavorId, |
95 » » ImageId: s.testImageId, | 96 » » ImageId: s.testImageId, |
96 » » UserData: nil, | 97 » » AvailabilityZone: s.testAvailabilityZone, |
| 98 » » UserData: nil, |
97 } | 99 } |
98 instance, err = s.nova.RunServer(opts) | 100 instance, err = s.nova.RunServer(opts) |
99 if err != nil { | 101 if err != nil { |
100 return nil, err | 102 return nil, err |
101 } | 103 } |
102 return instance, nil | 104 return instance, nil |
103 } | 105 } |
104 | 106 |
105 // Assert that the server record matches the details of the test server image. | 107 // Assert that the server record matches the details of the test server image. |
106 func (s *LiveTests) assertServerDetails(c *C, sr *nova.ServerDetail) { | 108 func (s *LiveTests) assertServerDetails(c *C, sr *nova.ServerDetail) { |
107 c.Check(sr.Id, Equals, s.testServer.Id) | 109 c.Check(sr.Id, Equals, s.testServer.Id) |
108 c.Check(sr.Name, Equals, testImageName) | 110 c.Check(sr.Name, Equals, testImageName) |
109 c.Check(sr.Flavor.Id, Equals, s.testFlavorId) | 111 c.Check(sr.Flavor.Id, Equals, s.testFlavorId) |
110 c.Check(sr.Image.Id, Equals, s.testImageId) | 112 c.Check(sr.Image.Id, Equals, s.testImageId) |
| 113 if s.testAvailabilityZone != "" { |
| 114 c.Check(sr.AvailabilityZone, Equals, s.testAvailabilityZone) |
| 115 } |
111 } | 116 } |
112 | 117 |
113 func (s *LiveTests) TestListFlavors(c *C) { | 118 func (s *LiveTests) TestListFlavors(c *C) { |
114 flavors, err := s.nova.ListFlavors() | 119 flavors, err := s.nova.ListFlavors() |
115 c.Assert(err, IsNil) | 120 c.Assert(err, IsNil) |
116 if len(flavors) < 1 { | 121 if len(flavors) < 1 { |
117 c.Fatalf("no flavors to list") | 122 c.Fatalf("no flavors to list") |
118 } | 123 } |
119 for _, f := range flavors { | 124 for _, f := range flavors { |
120 c.Check(f.Id, Not(Equals), "") | 125 c.Check(f.Id, Not(Equals), "") |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 c.Check(l.Href, Matches, "https?://.*") | 161 c.Check(l.Href, Matches, "https?://.*") |
157 c.Check(l.Rel, Matches, "self|bookmark") | 162 c.Check(l.Rel, Matches, "self|bookmark") |
158 } | 163 } |
159 } | 164 } |
160 if !foundTest { | 165 if !foundTest { |
161 c.Fatalf("test server (%s) not found in server list", s.testServ
er.Id) | 166 c.Fatalf("test server (%s) not found in server list", s.testServ
er.Id) |
162 } | 167 } |
163 } | 168 } |
164 | 169 |
165 func (s *LiveTests) TestListServersWithFilter(c *C) { | 170 func (s *LiveTests) TestListServersWithFilter(c *C) { |
166 » inst, err := s.createInstance(c, "filtered_server") | 171 » inst, err := s.createInstance("filtered_server") |
167 c.Assert(err, IsNil) | 172 c.Assert(err, IsNil) |
168 defer s.nova.DeleteServer(inst.Id) | 173 defer s.nova.DeleteServer(inst.Id) |
169 filter := nova.NewFilter() | 174 filter := nova.NewFilter() |
170 filter.Set(nova.FilterServer, "filtered_server") | 175 filter.Set(nova.FilterServer, "filtered_server") |
171 servers, err := s.nova.ListServers(filter) | 176 servers, err := s.nova.ListServers(filter) |
172 c.Assert(err, IsNil) | 177 c.Assert(err, IsNil) |
173 found := false | 178 found := false |
174 for _, sr := range servers { | 179 for _, sr := range servers { |
175 if sr.Id == inst.Id { | 180 if sr.Id == inst.Id { |
176 c.Assert(sr.Name, Equals, "filtered_server") | 181 c.Assert(sr.Name, Equals, "filtered_server") |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 c.Check(i.Href, Matches, "https?://.*") | 222 c.Check(i.Href, Matches, "https?://.*") |
218 c.Check(i.Rel, Matches, "self|bookmark") | 223 c.Check(i.Rel, Matches, "self|bookmark") |
219 } | 224 } |
220 } | 225 } |
221 if !foundTest { | 226 if !foundTest { |
222 c.Fatalf("test server (%s) not found in server list (details)",
s.testServer.Id) | 227 c.Fatalf("test server (%s) not found in server list (details)",
s.testServer.Id) |
223 } | 228 } |
224 } | 229 } |
225 | 230 |
226 func (s *LiveTests) TestListServersDetailWithFilter(c *C) { | 231 func (s *LiveTests) TestListServersDetailWithFilter(c *C) { |
227 » inst, err := s.createInstance(c, "filtered_server") | 232 » inst, err := s.createInstance("filtered_server") |
228 c.Assert(err, IsNil) | 233 c.Assert(err, IsNil) |
229 defer s.nova.DeleteServer(inst.Id) | 234 defer s.nova.DeleteServer(inst.Id) |
230 filter := nova.NewFilter() | 235 filter := nova.NewFilter() |
231 filter.Set(nova.FilterServer, "filtered_server") | 236 filter.Set(nova.FilterServer, "filtered_server") |
232 servers, err := s.nova.ListServersDetail(filter) | 237 servers, err := s.nova.ListServersDetail(filter) |
233 c.Assert(err, IsNil) | 238 c.Assert(err, IsNil) |
234 found := false | 239 found := false |
235 for _, sr := range servers { | 240 for _, sr := range servers { |
236 if sr.Id == inst.Id { | 241 if sr.Id == inst.Id { |
237 c.Assert(sr.Name, Equals, "filtered_server") | 242 c.Assert(sr.Name, Equals, "filtered_server") |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 c.Fail() | 486 c.Fail() |
482 } | 487 } |
483 | 488 |
484 func (s *LiveTests) TestRegexpInstanceFilters(c *C) { | 489 func (s *LiveTests) TestRegexpInstanceFilters(c *C) { |
485 serverNames := []string{ | 490 serverNames := []string{ |
486 "foobar123", | 491 "foobar123", |
487 "foo123baz", | 492 "foo123baz", |
488 "123barbaz", | 493 "123barbaz", |
489 } | 494 } |
490 for _, name := range serverNames { | 495 for _, name := range serverNames { |
491 » » inst, err := s.createInstance(c, name) | 496 » » inst, err := s.createInstance(name) |
492 c.Assert(err, IsNil) | 497 c.Assert(err, IsNil) |
493 defer s.nova.DeleteServer(inst.Id) | 498 defer s.nova.DeleteServer(inst.Id) |
494 } | 499 } |
495 filter := nova.NewFilter() | 500 filter := nova.NewFilter() |
496 filter.Set(nova.FilterServer, `foo.*baz`) | 501 filter.Set(nova.FilterServer, `foo.*baz`) |
497 servers, err := s.nova.ListServersDetail(filter) | 502 servers, err := s.nova.ListServersDetail(filter) |
498 c.Assert(err, IsNil) | 503 c.Assert(err, IsNil) |
499 c.Assert(servers, HasLen, 1) | 504 c.Assert(servers, HasLen, 1) |
500 c.Assert(servers[0].Name, Equals, serverNames[1]) | 505 c.Assert(servers[0].Name, Equals, serverNames[1]) |
501 filter.Set(nova.FilterServer, `[0-9]+[a-z]+`) | 506 filter.Set(nova.FilterServer, `[0-9]+[a-z]+`) |
502 servers, err = s.nova.ListServersDetail(filter) | 507 servers, err = s.nova.ListServersDetail(filter) |
503 c.Assert(err, IsNil) | 508 c.Assert(err, IsNil) |
504 c.Assert(servers, HasLen, 2) | 509 c.Assert(servers, HasLen, 2) |
505 if servers[0].Name != serverNames[1] { | 510 if servers[0].Name != serverNames[1] { |
506 servers[0], servers[1] = servers[1], servers[0] | 511 servers[0], servers[1] = servers[1], servers[0] |
507 } | 512 } |
508 c.Assert(servers[0].Name, Equals, serverNames[1]) | 513 c.Assert(servers[0].Name, Equals, serverNames[1]) |
509 c.Assert(servers[1].Name, Equals, serverNames[2]) | 514 c.Assert(servers[1].Name, Equals, serverNames[2]) |
510 } | 515 } |
511 | 516 |
512 func (s *LiveTests) TestListNetworks(c *C) { | 517 func (s *LiveTests) TestListNetworks(c *C) { |
513 networks, err := s.nova.ListNetworks() | 518 networks, err := s.nova.ListNetworks() |
514 c.Assert(err, IsNil) | 519 c.Assert(err, IsNil) |
515 for _, network := range networks { | 520 for _, network := range networks { |
516 c.Check(network.Id, Not(Equals), "") | 521 c.Check(network.Id, Not(Equals), "") |
517 c.Check(network.Label, Not(Equals), "") | 522 c.Check(network.Label, Not(Equals), "") |
518 c.Assert(network.Cidr, Matches, `\d{1,3}(\.+\d{1,3}){3}\/\d+`) | 523 c.Assert(network.Cidr, Matches, `\d{1,3}(\.+\d{1,3}){3}\/\d+`) |
519 } | 524 } |
520 } | 525 } |
| 526 |
| 527 func (s *LiveTests) runServerAvailabilityZone(zone string) (*nova.Entity, error)
{ |
| 528 old := s.testAvailabilityZone |
| 529 defer func() { s.testAvailabilityZone = old }() |
| 530 s.testAvailabilityZone = zone |
| 531 return s.createInstance(testImageName) |
| 532 } |
| 533 |
| 534 func (s *LiveTests) TestRunServerUnknownAvailabilityZone(c *C) { |
| 535 _, err := s.runServerAvailabilityZone("something_that_will_never_exist") |
| 536 c.Assert(err, ErrorMatches, "(.|\n)*The requested availability zone is n
ot available(.|\n)*") |
| 537 } |
OLD | NEW |