github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/core/instance"
    12  	"github.com/juju/juju/core/watcher/watchertest"
    13  	"github.com/juju/juju/state"
    14  )
    15  
    16  type stateSuite struct {
    17  	firewallerSuite
    18  	*apitesting.ModelWatcherTests
    19  }
    20  
    21  var _ = gc.Suite(&stateSuite{})
    22  
    23  func (s *stateSuite) SetUpTest(c *gc.C) {
    24  	s.firewallerSuite.SetUpTest(c)
    25  	s.ModelWatcherTests = apitesting.NewModelWatcherTests(s.firewaller, s.BackingState, s.Model)
    26  }
    27  
    28  func (s *stateSuite) TearDownTest(c *gc.C) {
    29  	s.firewallerSuite.TearDownTest(c)
    30  }
    31  
    32  func (s *stateSuite) TestWatchModelMachines(c *gc.C) {
    33  	w, err := s.firewaller.WatchModelMachines()
    34  	c.Assert(err, jc.ErrorIsNil)
    35  	wc := watchertest.NewStringsWatcherC(c, w, s.BackingState.StartSync)
    36  	defer wc.AssertStops()
    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.LXD)
    57  	c.Assert(err, jc.ErrorIsNil)
    58  	wc.AssertNoChange()
    59  }
    60  
    61  func (s *stateSuite) TestWatchOpenedPorts(c *gc.C) {
    62  	// Open some ports.
    63  	err := s.units[0].OpenPorts("tcp", 1234, 1400)
    64  	c.Assert(err, jc.ErrorIsNil)
    65  	err = s.units[2].OpenPort("udp", 4321)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  
    68  	w, err := s.firewaller.WatchOpenedPorts()
    69  	c.Assert(err, jc.ErrorIsNil)
    70  	wc := watchertest.NewStringsWatcherC(c, w, s.BackingState.StartSync)
    71  	defer wc.AssertStops()
    72  
    73  	expectChanges := []string{
    74  		"0:",
    75  		"2:",
    76  	}
    77  	wc.AssertChangeInSingleEvent(expectChanges...)
    78  	wc.AssertNoChange()
    79  
    80  	// Close a port, make sure it's detected.
    81  	err = s.units[2].ClosePort("udp", 4321)
    82  	c.Assert(err, jc.ErrorIsNil)
    83  
    84  	wc.AssertChange(expectChanges[1])
    85  	wc.AssertNoChange()
    86  
    87  	// Close it again, no changes.
    88  	err = s.units[2].ClosePort("udp", 4321)
    89  	c.Assert(err, jc.ErrorIsNil)
    90  	wc.AssertNoChange()
    91  
    92  	// Close non-existing port, no changes.
    93  	err = s.units[0].ClosePort("udp", 1234)
    94  	c.Assert(err, jc.ErrorIsNil)
    95  	wc.AssertNoChange()
    96  
    97  	// Open another port range, ensure it's detected.
    98  	err = s.units[1].OpenPorts("tcp", 8080, 8088)
    99  	c.Assert(err, jc.ErrorIsNil)
   100  	wc.AssertChange("1:")
   101  	wc.AssertNoChange()
   102  }