github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/firewaller/state_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  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	apitesting "github.com/juju/juju/api/testing"
    11  	"github.com/juju/juju/instance"
    12  	"github.com/juju/juju/state"
    13  	statetesting "github.com/juju/juju/state/testing"
    14  )
    15  
    16  type stateSuite struct {
    17  	firewallerSuite
    18  	*apitesting.EnvironWatcherTests
    19  }
    20  
    21  var _ = gc.Suite(&stateSuite{})
    22  
    23  func (s *stateSuite) SetUpTest(c *gc.C) {
    24  	s.firewallerSuite.SetUpTest(c)
    25  	s.EnvironWatcherTests = apitesting.NewEnvironWatcherTests(s.firewaller, s.BackingState, true)
    26  }
    27  
    28  func (s *stateSuite) TearDownTest(c *gc.C) {
    29  	s.firewallerSuite.TearDownTest(c)
    30  }
    31  
    32  func (s *stateSuite) TestWatchEnvironMachines(c *gc.C) {
    33  	w, err := s.firewaller.WatchEnvironMachines()
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	defer statetesting.AssertStop(c, w)
    36  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    37  
    38  	// Initial event.
    39  	wc.AssertChange(s.machines[0].Id(), s.machines[1].Id(), s.machines[2].Id())
    40  
    41  	// Add another machine make sure they are detected.
    42  	otherMachine, err := s.State.AddMachine("quantal", state.JobHostUnits)
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	wc.AssertChange(otherMachine.Id())
    45  
    46  	// Change the life cycle of last machine.
    47  	err = otherMachine.EnsureDead()
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	wc.AssertChange(otherMachine.Id())
    50  
    51  	// Add a container and make sure it's not detected.
    52  	template := state.MachineTemplate{
    53  		Series: "quantal",
    54  		Jobs:   []state.MachineJob{state.JobHostUnits},
    55  	}
    56  	_, err = s.State.AddMachineInsideMachine(template, s.machines[0].Id(), instance.LXC)
    57  	c.Assert(err, jc.ErrorIsNil)
    58  	wc.AssertNoChange()
    59  
    60  	statetesting.AssertStop(c, w)
    61  	wc.AssertClosed()
    62  }
    63  
    64  func (s *stateSuite) TestWatchOpenedPorts(c *gc.C) {
    65  	// Open some ports.
    66  	err := s.units[0].OpenPorts("tcp", 1234, 1400)
    67  	c.Assert(err, jc.ErrorIsNil)
    68  	err = s.units[2].OpenPort("udp", 4321)
    69  	c.Assert(err, jc.ErrorIsNil)
    70  
    71  	w, err := s.firewaller.WatchOpenedPorts()
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	defer statetesting.AssertStop(c, w)
    74  	wc := statetesting.NewStringsWatcherC(c, s.BackingState, w)
    75  
    76  	expectChanges := []string{
    77  		"0:juju-public",
    78  		"2:juju-public",
    79  	}
    80  	wc.AssertChangeInSingleEvent(expectChanges...)
    81  	wc.AssertNoChange()
    82  
    83  	// Close a port, make sure it's detected.
    84  	err = s.units[2].ClosePort("udp", 4321)
    85  	c.Assert(err, jc.ErrorIsNil)
    86  
    87  	wc.AssertChange(expectChanges[1])
    88  	wc.AssertNoChange()
    89  
    90  	// Close it again, no changes.
    91  	err = s.units[2].ClosePort("udp", 4321)
    92  	c.Assert(err, jc.ErrorIsNil)
    93  	wc.AssertNoChange()
    94  
    95  	// Close non-existing port, no changes.
    96  	err = s.units[0].ClosePort("udp", 1234)
    97  	c.Assert(err, jc.ErrorIsNil)
    98  	wc.AssertNoChange()
    99  
   100  	// Open another port range, ensure it's detected.
   101  	err = s.units[1].OpenPorts("tcp", 8080, 8088)
   102  	c.Assert(err, jc.ErrorIsNil)
   103  	wc.AssertChange("1:juju-public")
   104  	wc.AssertNoChange()
   105  
   106  	statetesting.AssertStop(c, w)
   107  	wc.AssertClosed()
   108  }