github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/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 "github.com/juju/errors" 10 "github.com/juju/names" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/api" 15 "github.com/juju/juju/api/machiner" 16 apitesting "github.com/juju/juju/api/testing" 17 "github.com/juju/juju/apiserver/params" 18 "github.com/juju/juju/juju/testing" 19 "github.com/juju/juju/network" 20 "github.com/juju/juju/state" 21 statetesting "github.com/juju/juju/state/testing" 22 coretesting "github.com/juju/juju/testing" 23 ) 24 25 func TestAll(t *stdtesting.T) { 26 coretesting.MgoTestPackage(t) 27 } 28 29 type machinerSuite struct { 30 testing.JujuConnSuite 31 *apitesting.APIAddresserTests 32 33 st *api.State 34 machine *state.Machine 35 36 machiner *machiner.State 37 } 38 39 var _ = gc.Suite(&machinerSuite{}) 40 41 func (s *machinerSuite) SetUpTest(c *gc.C) { 42 s.JujuConnSuite.SetUpTest(c) 43 m, err := s.State.AddMachine("quantal", state.JobManageEnviron) 44 c.Assert(err, jc.ErrorIsNil) 45 err = m.SetAddresses(network.NewAddress("10.0.0.1", network.ScopeUnknown)) 46 c.Assert(err, jc.ErrorIsNil) 47 48 s.st, s.machine = s.OpenAPIAsNewMachine(c) 49 // Create the machiner API facade. 50 s.machiner = s.st.Machiner() 51 c.Assert(s.machiner, gc.NotNil) 52 s.APIAddresserTests = apitesting.NewAPIAddresserTests(s.machiner, s.BackingState) 53 } 54 55 func (s *machinerSuite) TestMachineAndMachineTag(c *gc.C) { 56 machine, err := s.machiner.Machine(names.NewMachineTag("42")) 57 c.Assert(err, gc.ErrorMatches, "permission denied") 58 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 59 c.Assert(machine, gc.IsNil) 60 61 machine1 := names.NewMachineTag("1") 62 machine, err = s.machiner.Machine(machine1) 63 c.Assert(err, jc.ErrorIsNil) 64 c.Assert(machine.Tag(), gc.Equals, machine1) 65 } 66 67 func (s *machinerSuite) TestSetStatus(c *gc.C) { 68 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 69 c.Assert(err, jc.ErrorIsNil) 70 71 status, info, data, err := s.machine.Status() 72 c.Assert(err, jc.ErrorIsNil) 73 c.Assert(status, gc.Equals, state.StatusPending) 74 c.Assert(info, gc.Equals, "") 75 c.Assert(data, gc.HasLen, 0) 76 77 err = machine.SetStatus(params.StatusStarted, "blah", nil) 78 c.Assert(err, jc.ErrorIsNil) 79 80 status, info, data, err = s.machine.Status() 81 c.Assert(err, jc.ErrorIsNil) 82 c.Assert(status, gc.Equals, state.StatusStarted) 83 c.Assert(info, gc.Equals, "blah") 84 c.Assert(data, gc.HasLen, 0) 85 } 86 87 func (s *machinerSuite) TestEnsureDead(c *gc.C) { 88 c.Assert(s.machine.Life(), gc.Equals, state.Alive) 89 90 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 91 c.Assert(err, jc.ErrorIsNil) 92 93 err = machine.EnsureDead() 94 c.Assert(err, jc.ErrorIsNil) 95 96 err = s.machine.Refresh() 97 c.Assert(err, jc.ErrorIsNil) 98 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 99 100 err = machine.EnsureDead() 101 c.Assert(err, jc.ErrorIsNil) 102 err = s.machine.Refresh() 103 c.Assert(err, jc.ErrorIsNil) 104 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 105 106 err = s.machine.Remove() 107 c.Assert(err, jc.ErrorIsNil) 108 err = s.machine.Refresh() 109 c.Assert(err, jc.Satisfies, errors.IsNotFound) 110 111 err = machine.EnsureDead() 112 c.Assert(err, gc.ErrorMatches, "machine 1 not found") 113 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 114 } 115 116 func (s *machinerSuite) TestRefresh(c *gc.C) { 117 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 118 c.Assert(err, jc.ErrorIsNil) 119 c.Assert(machine.Life(), gc.Equals, params.Alive) 120 121 err = machine.EnsureDead() 122 c.Assert(err, jc.ErrorIsNil) 123 c.Assert(machine.Life(), gc.Equals, params.Alive) 124 125 err = machine.Refresh() 126 c.Assert(err, jc.ErrorIsNil) 127 c.Assert(machine.Life(), gc.Equals, params.Dead) 128 } 129 130 func (s *machinerSuite) TestSetMachineAddresses(c *gc.C) { 131 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 132 c.Assert(err, jc.ErrorIsNil) 133 134 addr := s.machine.Addresses() 135 c.Assert(addr, gc.HasLen, 0) 136 137 setAddresses := network.NewAddresses( 138 "8.8.8.8", 139 "127.0.0.1", 140 "10.0.0.1", 141 ) 142 // Before setting, the addresses are sorted to put public on top, 143 // cloud-local next, machine-local last. 144 expectAddresses := network.NewAddresses( 145 "8.8.8.8", 146 "10.0.0.1", 147 "127.0.0.1", 148 ) 149 err = machine.SetMachineAddresses(setAddresses) 150 c.Assert(err, jc.ErrorIsNil) 151 152 err = s.machine.Refresh() 153 c.Assert(err, jc.ErrorIsNil) 154 c.Assert(s.machine.MachineAddresses(), jc.DeepEquals, expectAddresses) 155 } 156 157 func (s *machinerSuite) TestWatch(c *gc.C) { 158 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 159 c.Assert(err, jc.ErrorIsNil) 160 c.Assert(machine.Life(), gc.Equals, params.Alive) 161 162 w, err := machine.Watch() 163 c.Assert(err, jc.ErrorIsNil) 164 defer statetesting.AssertStop(c, w) 165 wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w) 166 167 // Initial event. 168 wc.AssertOneChange() 169 170 // Change something other than the lifecycle and make sure it's 171 // not detected. 172 err = machine.SetStatus(params.StatusStarted, "not really", nil) 173 c.Assert(err, jc.ErrorIsNil) 174 wc.AssertNoChange() 175 176 // Make the machine dead and check it's detected. 177 err = machine.EnsureDead() 178 c.Assert(err, jc.ErrorIsNil) 179 wc.AssertOneChange() 180 181 statetesting.AssertStop(c, w) 182 wc.AssertClosed() 183 }