github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/firewaller/machine_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewaller_test 5 6 import ( 7 gc "launchpad.net/gocheck" 8 9 "launchpad.net/juju-core/instance" 10 "launchpad.net/juju-core/state" 11 "launchpad.net/juju-core/state/api/firewaller" 12 "launchpad.net/juju-core/state/api/params" 13 statetesting "launchpad.net/juju-core/state/testing" 14 jc "launchpad.net/juju-core/testing/checkers" 15 ) 16 17 type machineSuite struct { 18 firewallerSuite 19 20 apiMachine *firewaller.Machine 21 } 22 23 var _ = gc.Suite(&machineSuite{}) 24 25 func (s *machineSuite) SetUpTest(c *gc.C) { 26 s.firewallerSuite.SetUpTest(c) 27 28 var err error 29 s.apiMachine, err = s.firewaller.Machine(s.machines[0].Tag()) 30 c.Assert(err, gc.IsNil) 31 } 32 33 func (s *machineSuite) TearDownTest(c *gc.C) { 34 s.firewallerSuite.TearDownTest(c) 35 } 36 37 func (s *machineSuite) TestMachine(c *gc.C) { 38 apiMachine42, err := s.firewaller.Machine("machine-42") 39 c.Assert(err, gc.ErrorMatches, "machine 42 not found") 40 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 41 c.Assert(apiMachine42, gc.IsNil) 42 43 apiMachine0, err := s.firewaller.Machine(s.machines[0].Tag()) 44 c.Assert(err, gc.IsNil) 45 c.Assert(apiMachine0, gc.NotNil) 46 } 47 48 func (s *machineSuite) TestInstanceId(c *gc.C) { 49 // Add another, not provisioned machine to test 50 // CodeNotProvisioned. 51 newMachine, err := s.State.AddMachine("quantal", state.JobHostUnits) 52 c.Assert(err, gc.IsNil) 53 apiNewMachine, err := s.firewaller.Machine(newMachine.Tag()) 54 c.Assert(err, gc.IsNil) 55 _, err = apiNewMachine.InstanceId() 56 c.Assert(err, gc.ErrorMatches, "machine 3 is not provisioned") 57 c.Assert(err, jc.Satisfies, params.IsCodeNotProvisioned) 58 59 instanceId, err := s.apiMachine.InstanceId() 60 c.Assert(err, gc.IsNil) 61 c.Assert(instanceId, gc.Equals, instance.Id("i-manager")) 62 } 63 64 func (s *machineSuite) TestWatchUnits(c *gc.C) { 65 w, err := s.apiMachine.WatchUnits() 66 c.Assert(err, gc.IsNil) 67 defer statetesting.AssertStop(c, w) 68 wc := statetesting.NewStringsWatcherC(c, s.BackingState, w) 69 70 // Initial event. 71 wc.AssertChange("wordpress/0") 72 wc.AssertNoChange() 73 74 // Change something other than the life cycle and make sure it's 75 // not detected. 76 err = s.machines[0].SetPassword("foo") 77 c.Assert(err, gc.ErrorMatches, "password is only 3 bytes long, and is not a valid Agent password") 78 wc.AssertNoChange() 79 80 err = s.machines[0].SetPassword("foo-12345678901234567890") 81 c.Assert(err, gc.IsNil) 82 wc.AssertNoChange() 83 84 // Unassign unit 0 from the machine and check it's detected. 85 err = s.units[0].UnassignFromMachine() 86 c.Assert(err, gc.IsNil) 87 wc.AssertChange("wordpress/0") 88 wc.AssertNoChange() 89 90 statetesting.AssertStop(c, w) 91 wc.AssertClosed() 92 }