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