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