Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1074)

Delta Between Two Patch Sets: worker/firewaller/firewaller_test.go

Issue 6374069: worker: started implementation of the firewaller (Closed)
Left Patch Set: worker: started implementation of the firewaller Created 11 years, 8 months ago
Right Patch Set: worker: started implementation of the firewaller Created 11 years, 8 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « worker/firewaller/firewaller.go ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 package firewaller_test 1 package firewaller_test
2 2
3 import ( 3 import (
4 "fmt"
4 . "launchpad.net/gocheck" 5 . "launchpad.net/gocheck"
5 "launchpad.net/juju-core/environs"
6 "launchpad.net/juju-core/environs/dummy" 6 "launchpad.net/juju-core/environs/dummy"
7 "launchpad.net/juju-core/log"
7 "launchpad.net/juju-core/state/testing" 8 "launchpad.net/juju-core/state/testing"
8 coretesting "launchpad.net/juju-core/testing" 9 coretesting "launchpad.net/juju-core/testing"
9 "launchpad.net/juju-core/worker/firewaller" 10 "launchpad.net/juju-core/worker/firewaller"
10 "sort" 11 "sort"
12 "strings"
11 stdtesting "testing" 13 stdtesting "testing"
12 "time" 14 "time"
13 ) 15 )
14 16
15 func TestPackage(t *stdtesting.T) { 17 func TestPackage(t *stdtesting.T) {
16 coretesting.ZkTestPackage(t) 18 coretesting.ZkTestPackage(t)
17 } 19 }
18 20
21 // hooLogger allows the grabbing of debug log statements
22 // to compare them inside the tests.
23 type hookLogger struct {
24 event chan string
25 oldTarget log.Logger
26 }
27
28 var logHook *hookLogger
29
30 const prefix = "JUJU:DEBUG firewaller: "
31
32 func (h *hookLogger) Output(calldepth int, s string) error {
33 err := h.oldTarget.Output(calldepth, s)
34 if strings.HasPrefix(s, prefix) {
35 h.event <- s[len(prefix):]
36 }
37 return err
38 }
39
40 func setUpLogHook() {
41 logHook = &hookLogger{
42 event: make(chan string, 30),
43 oldTarget: log.Target,
44 }
45 log.Target = logHook
46 }
47
48 func tearDownLogHook() {
49 log.Target = logHook.oldTarget
50 }
51
52 // assertEvents asserts that the expected events are received from
53 // the firewaller, in no particular order.
54 func assertEvents(c *C, expect []string) {
55 var got []string
56 for _ = range expect {
57 select {
58 case e := <-logHook.event:
59 got = append(got, e)
60 case <-time.After(500 * time.Millisecond):
61 c.Fatalf("expected %q; timed out after %q", expect, got)
62 }
63 }
64 select {
65 case e := <-logHook.event:
66 got = append(got, e)
67 c.Fatalf("expected %q; too many events %q ", expect, got)
68 case <-time.After(100 * time.Millisecond):
69 }
70 sort.Strings(expect)
71 sort.Strings(got)
72 c.Assert(got, DeepEquals, expect)
73 }
74
19 type FirewallerSuite struct { 75 type FirewallerSuite struct {
20 coretesting.LoggingSuite 76 coretesting.LoggingSuite
21 testing.StateSuite 77 testing.StateSuite
22 » environ environs.Environ 78 » op <-chan dummy.Operation
23 » op <-chan dummy.Operation
24 } 79 }
25 80
26 var _ = Suite(&FirewallerSuite{}) 81 var _ = Suite(&FirewallerSuite{})
27 82
28 func (s *FirewallerSuite) SetUpTest(c *C) { 83 func (s *FirewallerSuite) SetUpTest(c *C) {
29 s.LoggingSuite.SetUpTest(c) 84 s.LoggingSuite.SetUpTest(c)
30 85
31 op := make(chan dummy.Operation, 500) 86 op := make(chan dummy.Operation, 500)
32 dummy.Listen(op) 87 dummy.Listen(op)
33 s.op = op 88 s.op = op
34 89
35 var err error
36 s.environ, err = environs.NewEnviron(map[string]interface{}{
37 "type": "dummy",
38 "zookeeper": true,
39 "name": "testing",
40 })
41 c.Assert(err, IsNil)
42 err = s.environ.Bootstrap(false)
43 c.Assert(err, IsNil)
44
45 // Sanity check
46 info, err := s.environ.StateInfo()
47 c.Assert(err, IsNil)
48 c.Assert(info, DeepEquals, s.StateInfo(c))
49
50 s.StateSuite.SetUpTest(c) 90 s.StateSuite.SetUpTest(c)
51 } 91 }
52 92
53 func (s *FirewallerSuite) TearDownTest(c *C) { 93 func (s *FirewallerSuite) TearDownTest(c *C) {
54 dummy.Reset() 94 dummy.Reset()
55 s.StateSuite.TearDownTest(c)
56 s.LoggingSuite.TearDownTest(c) 95 s.LoggingSuite.TearDownTest(c)
57 } 96 }
58 97
59 func (s *FirewallerSuite) TestStartStop(c *C) { 98 func (s *FirewallerSuite) TestStartStop(c *C) {
60 » fw, err := firewaller.NewFirewaller(s.environ) 99 » fw, err := firewaller.NewFirewaller(s.State)
61 c.Assert(err, IsNil) 100 c.Assert(err, IsNil)
62 c.Assert(fw.Stop(), IsNil) 101 c.Assert(fw.Stop(), IsNil)
63 } 102 }
64 103
65 func (s *FirewallerSuite) TestAddRemoveMachine(c *C) { 104 func (s *FirewallerSuite) TestAddRemoveMachine(c *C) {
66 » fw, err := firewaller.NewFirewaller(s.environ) 105 » fw, err := firewaller.NewFirewaller(s.State)
67 c.Assert(err, IsNil) 106 c.Assert(err, IsNil)
107
108 setUpLogHook()
109 defer tearDownLogHook()
68 110
69 m1, err := s.State.AddMachine() 111 m1, err := s.State.AddMachine()
70 c.Assert(err, IsNil) 112 c.Assert(err, IsNil)
71 m2, err := s.State.AddMachine() 113 m2, err := s.State.AddMachine()
72 c.Assert(err, IsNil) 114 c.Assert(err, IsNil)
73 m3, err := s.State.AddMachine() 115 m3, err := s.State.AddMachine()
74 c.Assert(err, IsNil) 116 c.Assert(err, IsNil)
75 time.Sleep(100 * time.Millisecond)
76 117
77 » addedMachines := []int{m1.Id(), m2.Id(), m3.Id()} 118 » assertEvents(c, []string{
78 » allMachines := fw.AllMachines() 119 » » fmt.Sprint("started tracking machine ", m1.Id()),
79 » sort.Ints(addedMachines) 120 » » fmt.Sprint("started tracking machine ", m2.Id()),
80 » sort.Ints(allMachines) 121 » » fmt.Sprint("started tracking machine ", m3.Id()),
81 » c.Assert(addedMachines, DeepEquals, allMachines) 122 » })
rog 2012/07/18 12:26:39 c.Assert(allMachines, DeepEquals, addedMachines)
TheMue 2012/07/18 16:26:40 Done.
82 123
83 err = s.State.RemoveMachine(m2.Id()) 124 err = s.State.RemoveMachine(m2.Id())
84 c.Assert(err, IsNil) 125 c.Assert(err, IsNil)
85 time.Sleep(100 * time.Millisecond)
86 126
87 » addedMachines = []int{m1.Id(), m3.Id()} 127 » assertEvents(c, []string{
88 » allMachines = fw.AllMachines() 128 » » fmt.Sprint("stopped tracking machine ", m2.Id()),
89 » sort.Ints(addedMachines) 129 » })
90 » sort.Ints(allMachines)
91 » c.Assert(addedMachines, DeepEquals, allMachines)
rog 2012/07/18 12:26:39 c.Assert(allMachines, DeepEquals, addedMachines)
TheMue 2012/07/18 16:26:40 Done.
92 130
93 c.Assert(fw.Stop(), IsNil) 131 c.Assert(fw.Stop(), IsNil)
94 } 132 }
95 133
96 func (s *FirewallerSuite) TestFirewallerStopOnStateClose(c *C) { 134 func (s *FirewallerSuite) TestFirewallerStopOnStateClose(c *C) {
97 » fw, err := firewaller.NewFirewaller(s.environ) 135 » fw, err := firewaller.NewFirewaller(s.State)
98 c.Assert(err, IsNil) 136 c.Assert(err, IsNil)
99 fw.CloseState() 137 fw.CloseState()
100 c.Check(fw.Wait(), ErrorMatches, ".* zookeeper is closing") 138 c.Check(fw.Wait(), ErrorMatches, ".* zookeeper is closing")
101 c.Assert(fw.Stop(), ErrorMatches, ".* zookeeper is closing") 139 c.Assert(fw.Stop(), ErrorMatches, ".* zookeeper is closing")
102 } 140 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b