github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/provider/maas/instance_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package maas 5 6 import ( 7 "fmt" 8 9 gc "launchpad.net/gocheck" 10 11 "github.com/juju/juju/instance" 12 ) 13 14 type instanceTest struct { 15 providerSuite 16 } 17 18 var _ = gc.Suite(&instanceTest{}) 19 20 func (s *instanceTest) TestId(c *gc.C) { 21 jsonValue := `{"system_id": "system_id", "test": "test"}` 22 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 23 resourceURI, _ := obj.GetField("resource_uri") 24 instance := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 25 26 c.Check(string(instance.Id()), gc.Equals, resourceURI) 27 } 28 29 func (s *instanceTest) TestString(c *gc.C) { 30 jsonValue := `{"hostname": "thethingintheplace", "system_id": "system_id", "test": "test"}` 31 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 32 instance := &maasInstance{maasObject: &obj, environ: s.makeEnviron()} 33 hostname, err := instance.hostname() 34 c.Assert(err, gc.IsNil) 35 expected := hostname + ":" + string(instance.Id()) 36 c.Assert(fmt.Sprint(instance), gc.Equals, expected) 37 } 38 39 func (s *instanceTest) TestStringWithoutHostname(c *gc.C) { 40 // For good measure, test what happens if we don't have a hostname. 41 jsonValue := `{"system_id": "system_id", "test": "test"}` 42 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 43 instance := &maasInstance{maasObject: &obj, environ: s.makeEnviron()} 44 _, err := instance.hostname() 45 c.Assert(err, gc.NotNil) 46 expected := fmt.Sprintf("<DNSName failed: %q>", err) + ":" + string(instance.Id()) 47 c.Assert(fmt.Sprint(instance), gc.Equals, expected) 48 } 49 50 func (s *instanceTest) TestRefreshInstance(c *gc.C) { 51 jsonValue := `{"system_id": "system_id", "test": "test"}` 52 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 53 s.testMAASObject.TestServer.ChangeNode("system_id", "test2", "test2") 54 instance := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 55 56 err := instance.Refresh() 57 58 c.Check(err, gc.IsNil) 59 testField, err := (*instance.maasObject).GetField("test2") 60 c.Check(err, gc.IsNil) 61 c.Check(testField, gc.Equals, "test2") 62 } 63 64 func (s *instanceTest) TestAddresses(c *gc.C) { 65 jsonValue := `{ 66 "hostname": "testing.invalid", 67 "system_id": "system_id", 68 "ip_addresses": [ "1.2.3.4", "fe80::d806:dbff:fe23:1199" ] 69 }` 70 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 71 inst := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 72 73 expected := []instance.Address{ 74 {Value: "testing.invalid", Type: instance.HostName, NetworkScope: instance.NetworkPublic}, 75 instance.NewAddress("1.2.3.4", instance.NetworkUnknown), 76 instance.NewAddress("fe80::d806:dbff:fe23:1199", instance.NetworkUnknown), 77 } 78 79 addr, err := inst.Addresses() 80 81 c.Assert(err, gc.IsNil) 82 c.Check(addr, gc.DeepEquals, expected) 83 } 84 85 func (s *instanceTest) TestAddressesMissing(c *gc.C) { 86 // Older MAAS versions do not have ip_addresses returned, for these 87 // just the DNS name should be returned without error. 88 jsonValue := `{ 89 "hostname": "testing.invalid", 90 "system_id": "system_id" 91 }` 92 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 93 inst := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 94 95 addr, err := inst.Addresses() 96 c.Assert(err, gc.IsNil) 97 c.Check(addr, gc.DeepEquals, []instance.Address{ 98 {Value: "testing.invalid", Type: instance.HostName, NetworkScope: instance.NetworkPublic}, 99 }) 100 } 101 102 func (s *instanceTest) TestAddressesInvalid(c *gc.C) { 103 jsonValue := `{ 104 "hostname": "testing.invalid", 105 "system_id": "system_id", 106 "ip_addresses": "incompatible" 107 }` 108 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 109 inst := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 110 111 _, err := inst.Addresses() 112 c.Assert(err, gc.NotNil) 113 } 114 115 func (s *instanceTest) TestAddressesInvalidContents(c *gc.C) { 116 jsonValue := `{ 117 "hostname": "testing.invalid", 118 "system_id": "system_id", 119 "ip_addresses": [42] 120 }` 121 obj := s.testMAASObject.TestServer.NewNode(jsonValue) 122 inst := maasInstance{maasObject: &obj, environ: s.makeEnviron()} 123 124 _, err := inst.Addresses() 125 c.Assert(err, gc.NotNil) 126 }