github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/machiner/machiner_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package machiner_test 5 6 import ( 7 stdtesting "testing" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/errors" 12 "launchpad.net/juju-core/instance" 13 "launchpad.net/juju-core/juju/testing" 14 "launchpad.net/juju-core/state" 15 "launchpad.net/juju-core/state/api" 16 "launchpad.net/juju-core/state/api/machiner" 17 "launchpad.net/juju-core/state/api/params" 18 statetesting "launchpad.net/juju-core/state/testing" 19 coretesting "launchpad.net/juju-core/testing" 20 jc "launchpad.net/juju-core/testing/checkers" 21 ) 22 23 func TestAll(t *stdtesting.T) { 24 coretesting.MgoTestPackage(t) 25 } 26 27 type machinerSuite struct { 28 testing.JujuConnSuite 29 st *api.State 30 machine *state.Machine 31 32 machiner *machiner.State 33 } 34 35 var _ = gc.Suite(&machinerSuite{}) 36 37 func (s *machinerSuite) SetUpTest(c *gc.C) { 38 s.JujuConnSuite.SetUpTest(c) 39 s.st, s.machine = s.OpenAPIAsNewMachine(c) 40 // Create the machiner API facade. 41 s.machiner = s.st.Machiner() 42 c.Assert(s.machiner, gc.NotNil) 43 } 44 45 func (s *machinerSuite) TestMachineAndMachineTag(c *gc.C) { 46 machine, err := s.machiner.Machine("machine-42") 47 c.Assert(err, gc.ErrorMatches, "permission denied") 48 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 49 c.Assert(machine, gc.IsNil) 50 51 machine, err = s.machiner.Machine("machine-0") 52 c.Assert(err, gc.IsNil) 53 c.Assert(machine.Tag(), gc.Equals, "machine-0") 54 } 55 56 func (s *machinerSuite) TestSetStatus(c *gc.C) { 57 machine, err := s.machiner.Machine("machine-0") 58 c.Assert(err, gc.IsNil) 59 60 status, info, data, err := s.machine.Status() 61 c.Assert(err, gc.IsNil) 62 c.Assert(status, gc.Equals, params.StatusPending) 63 c.Assert(info, gc.Equals, "") 64 c.Assert(data, gc.HasLen, 0) 65 66 err = machine.SetStatus(params.StatusStarted, "blah", nil) 67 c.Assert(err, gc.IsNil) 68 69 status, info, data, err = s.machine.Status() 70 c.Assert(err, gc.IsNil) 71 c.Assert(status, gc.Equals, params.StatusStarted) 72 c.Assert(info, gc.Equals, "blah") 73 c.Assert(data, gc.HasLen, 0) 74 } 75 76 func (s *machinerSuite) TestEnsureDead(c *gc.C) { 77 c.Assert(s.machine.Life(), gc.Equals, state.Alive) 78 79 machine, err := s.machiner.Machine("machine-0") 80 c.Assert(err, gc.IsNil) 81 82 err = machine.EnsureDead() 83 c.Assert(err, gc.IsNil) 84 85 err = s.machine.Refresh() 86 c.Assert(err, gc.IsNil) 87 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 88 89 err = machine.EnsureDead() 90 c.Assert(err, gc.IsNil) 91 err = s.machine.Refresh() 92 c.Assert(err, gc.IsNil) 93 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 94 95 err = s.machine.Remove() 96 c.Assert(err, gc.IsNil) 97 err = s.machine.Refresh() 98 c.Assert(err, jc.Satisfies, errors.IsNotFoundError) 99 100 err = machine.EnsureDead() 101 c.Assert(err, gc.ErrorMatches, "machine 0 not found") 102 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 103 } 104 105 func (s *machinerSuite) TestRefresh(c *gc.C) { 106 machine, err := s.machiner.Machine("machine-0") 107 c.Assert(err, gc.IsNil) 108 c.Assert(machine.Life(), gc.Equals, params.Alive) 109 110 err = machine.EnsureDead() 111 c.Assert(err, gc.IsNil) 112 c.Assert(machine.Life(), gc.Equals, params.Alive) 113 114 err = machine.Refresh() 115 c.Assert(err, gc.IsNil) 116 c.Assert(machine.Life(), gc.Equals, params.Dead) 117 } 118 119 func (s *machinerSuite) TestSetMachineAddresses(c *gc.C) { 120 machine, err := s.machiner.Machine("machine-0") 121 c.Assert(err, gc.IsNil) 122 123 addr := s.machine.Addresses() 124 c.Assert(addr, gc.HasLen, 0) 125 126 addresses := []instance.Address{ 127 instance.NewAddress("127.0.0.1"), 128 instance.NewAddress("8.8.8.8"), 129 } 130 err = machine.SetMachineAddresses(addresses) 131 c.Assert(err, gc.IsNil) 132 133 err = s.machine.Refresh() 134 c.Assert(err, gc.IsNil) 135 c.Assert(s.machine.MachineAddresses(), gc.DeepEquals, addresses) 136 } 137 138 func (s *machinerSuite) TestWatch(c *gc.C) { 139 machine, err := s.machiner.Machine("machine-0") 140 c.Assert(err, gc.IsNil) 141 c.Assert(machine.Life(), gc.Equals, params.Alive) 142 143 w, err := machine.Watch() 144 c.Assert(err, gc.IsNil) 145 defer statetesting.AssertStop(c, w) 146 wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w) 147 148 // Initial event. 149 wc.AssertOneChange() 150 151 // Change something other than the lifecycle and make sure it's 152 // not detected. 153 err = machine.SetStatus(params.StatusStarted, "not really", nil) 154 c.Assert(err, gc.IsNil) 155 wc.AssertNoChange() 156 157 // Make the machine dead and check it's detected. 158 err = machine.EnsureDead() 159 c.Assert(err, gc.IsNil) 160 wc.AssertOneChange() 161 162 statetesting.AssertStop(c, w) 163 wc.AssertClosed() 164 }