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