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 }