github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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.Connection 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.SetProviderAddresses(network.NewAddress("10.0.0.1")) 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 statusInfo, err := s.machine.Status() 72 c.Assert(err, jc.ErrorIsNil) 73 c.Assert(statusInfo.Status, gc.Equals, state.StatusPending) 74 c.Assert(statusInfo.Message, gc.Equals, "") 75 c.Assert(statusInfo.Data, gc.HasLen, 0) 76 77 err = machine.SetStatus(params.StatusStarted, "blah", nil) 78 c.Assert(err, jc.ErrorIsNil) 79 80 statusInfo, err = s.machine.Status() 81 c.Assert(err, jc.ErrorIsNil) 82 c.Assert(statusInfo.Status, gc.Equals, state.StatusStarted) 83 c.Assert(statusInfo.Message, gc.Equals, "blah") 84 c.Assert(statusInfo.Data, gc.HasLen, 0) 85 c.Assert(statusInfo.Since, gc.NotNil) 86 } 87 88 func (s *machinerSuite) TestEnsureDead(c *gc.C) { 89 c.Assert(s.machine.Life(), gc.Equals, state.Alive) 90 91 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 92 c.Assert(err, jc.ErrorIsNil) 93 94 err = machine.EnsureDead() 95 c.Assert(err, jc.ErrorIsNil) 96 97 err = s.machine.Refresh() 98 c.Assert(err, jc.ErrorIsNil) 99 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 100 101 err = machine.EnsureDead() 102 c.Assert(err, jc.ErrorIsNil) 103 err = s.machine.Refresh() 104 c.Assert(err, jc.ErrorIsNil) 105 c.Assert(s.machine.Life(), gc.Equals, state.Dead) 106 107 err = s.machine.Remove() 108 c.Assert(err, jc.ErrorIsNil) 109 err = s.machine.Refresh() 110 c.Assert(err, jc.Satisfies, errors.IsNotFound) 111 112 err = machine.EnsureDead() 113 c.Assert(err, gc.ErrorMatches, "machine 1 not found") 114 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 115 } 116 117 func (s *machinerSuite) TestRefresh(c *gc.C) { 118 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 119 c.Assert(err, jc.ErrorIsNil) 120 c.Assert(machine.Life(), gc.Equals, params.Alive) 121 122 err = machine.EnsureDead() 123 c.Assert(err, jc.ErrorIsNil) 124 c.Assert(machine.Life(), gc.Equals, params.Alive) 125 126 err = machine.Refresh() 127 c.Assert(err, jc.ErrorIsNil) 128 c.Assert(machine.Life(), gc.Equals, params.Dead) 129 } 130 131 func (s *machinerSuite) TestSetMachineAddresses(c *gc.C) { 132 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 133 c.Assert(err, jc.ErrorIsNil) 134 135 addr := s.machine.Addresses() 136 c.Assert(addr, gc.HasLen, 0) 137 138 setAddresses := network.NewAddresses( 139 "8.8.8.8", 140 "127.0.0.1", 141 "10.0.0.1", 142 ) 143 // Before setting, the addresses are sorted to put public on top, 144 // cloud-local next, machine-local last. 145 expectAddresses := network.NewAddresses( 146 "8.8.8.8", 147 "10.0.0.1", 148 "127.0.0.1", 149 ) 150 err = machine.SetMachineAddresses(setAddresses) 151 c.Assert(err, jc.ErrorIsNil) 152 153 err = s.machine.Refresh() 154 c.Assert(err, jc.ErrorIsNil) 155 c.Assert(s.machine.MachineAddresses(), jc.DeepEquals, expectAddresses) 156 } 157 158 func (s *machinerSuite) TestSetEmptyMachineAddresses(c *gc.C) { 159 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 160 c.Assert(err, jc.ErrorIsNil) 161 162 setAddresses := network.NewAddresses( 163 "8.8.8.8", 164 "127.0.0.1", 165 "10.0.0.1", 166 ) 167 err = machine.SetMachineAddresses(setAddresses) 168 c.Assert(err, jc.ErrorIsNil) 169 err = s.machine.Refresh() 170 c.Assert(err, jc.ErrorIsNil) 171 c.Assert(s.machine.MachineAddresses(), gc.HasLen, 3) 172 173 err = machine.SetMachineAddresses(nil) 174 c.Assert(err, jc.ErrorIsNil) 175 err = s.machine.Refresh() 176 c.Assert(err, jc.ErrorIsNil) 177 c.Assert(s.machine.MachineAddresses(), gc.HasLen, 0) 178 } 179 180 func (s *machinerSuite) TestWatch(c *gc.C) { 181 machine, err := s.machiner.Machine(names.NewMachineTag("1")) 182 c.Assert(err, jc.ErrorIsNil) 183 c.Assert(machine.Life(), gc.Equals, params.Alive) 184 185 w, err := machine.Watch() 186 c.Assert(err, jc.ErrorIsNil) 187 defer statetesting.AssertStop(c, w) 188 wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w) 189 190 // Initial event. 191 wc.AssertOneChange() 192 193 // Change something other than the lifecycle and make sure it's 194 // not detected. 195 err = machine.SetStatus(params.StatusStarted, "not really", nil) 196 c.Assert(err, jc.ErrorIsNil) 197 wc.AssertNoChange() 198 199 // Make the machine dead and check it's detected. 200 err = machine.EnsureDead() 201 c.Assert(err, jc.ErrorIsNil) 202 wc.AssertOneChange() 203 204 statetesting.AssertStop(c, w) 205 wc.AssertClosed() 206 }