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  }