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