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  }