Index: worker/firewaller/firewaller_test.go |
=== added file 'worker/firewaller/firewaller_test.go' |
--- worker/firewaller/firewaller_test.go 1970-01-01 00:00:00 +0000 |
+++ worker/firewaller/firewaller_test.go 2012-07-12 23:16:05 +0000 |
@@ -0,0 +1,115 @@ |
+package firewaller_test |
+ |
+import ( |
+ . "launchpad.net/gocheck" |
+ "launchpad.net/juju-core/environs" |
+ "launchpad.net/juju-core/environs/dummy" |
+ "launchpad.net/juju-core/state" |
+ "launchpad.net/juju-core/state/testing" |
+ coretesting "launchpad.net/juju-core/testing" |
+ "launchpad.net/juju-core/worker/firewaller" |
+ stdtesting "testing" |
+) |
+ |
+func TestPackage(t *stdtesting.T) { |
+ coretesting.ZkTestPackage(t) |
+} |
+ |
+type FirewallerSuite struct { |
+ coretesting.LoggingSuite |
+ testing.StateSuite |
+ op <-chan dummy.Operation |
+} |
+ |
+func (s *FirewallerSuite) SetUpTest(c *C) { |
+ // Create the operations channel with more than enough space |
+ // for those tests that don't listen on it. |
+ op := make(chan dummy.Operation, 500) |
+ dummy.Listen(op) |
+ s.op = op |
+ |
+ env, err := environs.NewEnviron(map[string]interface{}{ |
+ "type": "dummy", |
+ "zookeeper": true, |
+ "name": "testing", |
+ }) |
+ c.Assert(err, IsNil) |
+ err = env.Bootstrap(false) |
+ c.Assert(err, IsNil) |
+ |
+ // Sanity check |
+ info, err := env.StateInfo() |
+ c.Assert(err, IsNil) |
+ c.Assert(info, DeepEquals, s.StateInfo(c)) |
+ |
+ s.StateSuite.SetUpTest(c) |
+} |
+ |
+func (s *FirewallerSuite) TearDownTest(c *C) { |
+ dummy.Reset() |
+ s.StateSuite.TearDownTest(c) |
+ s.LoggingSuite.TearDownTest(c) |
+} |
+ |
+var _ = Suite(&FirewallerSuite{}) |
+ |
+// invalidateEnvironment alters the environment configuration |
+// so the ConfigNode returned from the watcher will not pass |
+// validation. |
+func (s *FirewallerSuite) invalidateEnvironment() error { |
+ env, err := s.State.EnvironConfig() |
+ if err != nil { |
+ return err |
+ } |
+ env.Set("name", 1) |
+ _, err = env.Write() |
+ return err |
+} |
+ |
+// fixEnvironment undoes the work of invalidateEnvironment. |
+func (s *FirewallerSuite) fixEnvironment() error { |
+ env, err := s.State.EnvironConfig() |
+ if err != nil { |
+ return err |
+ } |
+ env.Set("name", "testing") |
+ _, err = env.Write() |
+ return err |
+} |
+ |
+func (s *FirewallerSuite) newState(c *C) *state.State { |
+ st, err := state.Open(s.StateInfo(c)) |
+ c.Assert(err, IsNil) |
+ return st |
+} |
+ |
+func stopFirewaller(c *C, f *firewaller.Firewaller) { |
+ c.Assert(f.Stop(), IsNil) |
+} |
+ |
+func (s *FirewallerSuite) TestFirewallerStartStop(c *C) { |
+ f, err := firewaller.NewFirewaller(s.newState(c)) |
+ c.Assert(err, IsNil) |
+ stopFirewaller(c, f) |
+} |
+ |
+func (s *FirewallerSuite) TestFirewallerEnvironmentChange(c *C) { |
+ f, err := firewaller.NewFirewaller(s.newState(c)) |
+ c.Assert(err, IsNil) |
+ defer stopFirewaller(c, f) |
+ err = s.invalidateEnvironment() |
+ c.Assert(err, IsNil) |
+ err = s.fixEnvironment() |
+ c.Assert(err, IsNil) |
+} |
+ |
+func (s *FirewallerSuite) TestFirewallerStopOnStateClose(c *C) { |
+ f, err := firewaller.NewFirewaller(s.newState(c)) |
+ c.Assert(err, IsNil) |
+ |
+ f.CloseState() |
+ |
+ // must use Check to avoid leaking firewallers. |
+ c.Check(f.Wait(), ErrorMatches, ".* zookeeper is closing") |
+ c.Assert(f.Stop(), ErrorMatches, ".* zookeeper is closing") |
+} |