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 }