Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1568)

Side by Side Diff: nova/live_test.go

Issue 103900045: Add support for Availability Zones
Patch Set: Add support for Availability Zones Created 9 years, 9 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « errors/errors_test.go ('k') | nova/local_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « errors/errors_test.go ('k') | nova/local_test.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b