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