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