github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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  	"github.com/juju/names"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/api/firewaller"
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/instance"
    14  	"github.com/juju/juju/network"
    15  	"github.com/juju/juju/state"
    16  	statetesting "github.com/juju/juju/state/testing"
    17  )
    18  
    19  type machineSuite struct {
    20  	firewallerSuite
    21  
    22  	apiMachine *firewaller.Machine
    23  }
    24  
    25  var _ = gc.Suite(&machineSuite{})
    26  
    27  func (s *machineSuite) SetUpTest(c *gc.C) {
    28  	s.firewallerSuite.SetUpTest(c)
    29  
    30  	var err error
    31  	s.apiMachine, err = s.firewaller.Machine(s.machines[0].Tag().(names.MachineTag))
    32  	c.Assert(err, jc.ErrorIsNil)
    33  }
    34  
    35  func (s *machineSuite) TearDownTest(c *gc.C) {
    36  	s.firewallerSuite.TearDownTest(c)
    37  }
    38  
    39  func (s *machineSuite) TestMachine(c *gc.C) {
    40  	apiMachine42, err := s.firewaller.Machine(names.NewMachineTag("42"))
    41  	c.Assert(err, gc.ErrorMatches, "machine 42 not found")
    42  	c.Assert(err, jc.Satisfies, params.IsCodeNotFound)
    43  	c.Assert(apiMachine42, gc.IsNil)
    44  
    45  	apiMachine0, err := s.firewaller.Machine(s.machines[0].Tag().(names.MachineTag))
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	c.Assert(apiMachine0, gc.NotNil)
    48  }
    49  
    50  func (s *machineSuite) TestTag(c *gc.C) {
    51  	c.Assert(s.apiMachine.Tag(), gc.Equals, names.NewMachineTag(s.machines[0].Id()))
    52  }
    53  
    54  func (s *machineSuite) TestInstanceId(c *gc.C) {
    55  	// Add another, not provisioned machine to test
    56  	// CodeNotProvisioned.
    57  	newMachine, err := s.State.AddMachine("quantal", state.JobHostUnits)
    58  	c.Assert(err, jc.ErrorIsNil)
    59  	apiNewMachine, err := s.firewaller.Machine(newMachine.Tag().(names.MachineTag))
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	_, err = apiNewMachine.InstanceId()
    62  	c.Assert(err, gc.ErrorMatches, "machine 3 not provisioned")
    63  	c.Assert(err, jc.Satisfies, params.IsCodeNotProvisioned)
    64  
    65  	instanceId, err := s.apiMachine.InstanceId()
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	c.Assert(instanceId, gc.Equals, instance.Id("i-manager"))
    68  }
    69  
    70  func (s *machineSuite) TestWatchUnits(c *gc.C) {
    71  	w, err := s.apiMachine.WatchUnits()
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	defer statetesting.AssertStop(c, w)
    74  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    75  
    76  	// Initial event.
    77  	wc.AssertChange("wordpress/0")
    78  	wc.AssertNoChange()
    79  
    80  	// Change something other than the life cycle and make sure it's
    81  	// not detected.
    82  	err = s.machines[0].SetPassword("foo")
    83  	c.Assert(err, gc.ErrorMatches, "password is only 3 bytes long, and is not a valid Agent password")
    84  	wc.AssertNoChange()
    85  
    86  	err = s.machines[0].SetPassword("foo-12345678901234567890")
    87  	c.Assert(err, jc.ErrorIsNil)
    88  	wc.AssertNoChange()
    89  
    90  	// Unassign unit 0 from the machine and check it's detected.
    91  	err = s.units[0].UnassignFromMachine()
    92  	c.Assert(err, jc.ErrorIsNil)
    93  	wc.AssertChange("wordpress/0")
    94  	wc.AssertNoChange()
    95  
    96  	statetesting.AssertStop(c, w)
    97  	wc.AssertClosed()
    98  }
    99  
   100  func (s *machineSuite) TestActiveNetworks(c *gc.C) {
   101  	// No ports opened at first, no networks.
   102  	nets, err := s.apiMachine.ActiveNetworks()
   103  	c.Assert(err, jc.ErrorIsNil)
   104  	c.Assert(nets, gc.HasLen, 0)
   105  
   106  	// Open a port and check again.
   107  	err = s.units[0].OpenPort("tcp", 1234)
   108  	c.Assert(err, jc.ErrorIsNil)
   109  	nets, err = s.apiMachine.ActiveNetworks()
   110  	c.Assert(err, jc.ErrorIsNil)
   111  	c.Assert(nets, jc.DeepEquals, []names.NetworkTag{
   112  		names.NewNetworkTag(network.DefaultPublic),
   113  	})
   114  
   115  	// Remove all ports, no networks.
   116  	ports, err := s.machines[0].OpenedPorts(network.DefaultPublic)
   117  	c.Assert(err, jc.ErrorIsNil)
   118  	err = ports.Remove()
   119  	c.Assert(err, jc.ErrorIsNil)
   120  	nets, err = s.apiMachine.ActiveNetworks()
   121  	c.Assert(err, jc.ErrorIsNil)
   122  	c.Assert(nets, gc.HasLen, 0)
   123  }
   124  
   125  func (s *machineSuite) TestOpenedPorts(c *gc.C) {
   126  	networkTag := names.NewNetworkTag(network.DefaultPublic)
   127  	unitTag := s.units[0].Tag().(names.UnitTag)
   128  
   129  	// No ports opened at first.
   130  	ports, err := s.apiMachine.OpenedPorts(networkTag)
   131  	c.Assert(err, jc.ErrorIsNil)
   132  	c.Assert(ports, gc.HasLen, 0)
   133  
   134  	// Open a port and check again.
   135  	err = s.units[0].OpenPort("tcp", 1234)
   136  	c.Assert(err, jc.ErrorIsNil)
   137  	ports, err = s.apiMachine.OpenedPorts(networkTag)
   138  	c.Assert(err, jc.ErrorIsNil)
   139  	c.Assert(ports, jc.DeepEquals, map[network.PortRange]names.UnitTag{
   140  		network.PortRange{FromPort: 1234, ToPort: 1234, Protocol: "tcp"}: unitTag,
   141  	})
   142  }