launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/worker/cleaner/cleaner_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cleaner_test 5 6 import ( 7 gc "launchpad.net/gocheck" 8 stdtesting "testing" 9 "time" 10 11 "launchpad.net/juju-core/juju/testing" 12 coretesting "launchpad.net/juju-core/testing" 13 "launchpad.net/juju-core/worker" 14 "launchpad.net/juju-core/worker/cleaner" 15 ) 16 17 func TestPackage(t *stdtesting.T) { 18 coretesting.MgoTestPackage(t) 19 } 20 21 type CleanerSuite struct { 22 testing.JujuConnSuite 23 } 24 25 var _ = gc.Suite(&CleanerSuite{}) 26 27 var _ worker.NotifyWatchHandler = (*cleaner.Cleaner)(nil) 28 29 func (s *CleanerSuite) TestCleaner(c *gc.C) { 30 cr := cleaner.NewCleaner(s.State) 31 defer func() { c.Assert(worker.Stop(cr), gc.IsNil) }() 32 33 needed, err := s.State.NeedsCleanup() 34 c.Assert(err, gc.IsNil) 35 c.Assert(needed, gc.Equals, false) 36 37 s.AddTestingService(c, "wordpress", s.AddTestingCharm(c, "wordpress")) 38 s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql")) 39 eps, err := s.State.InferEndpoints([]string{"wordpress", "mysql"}) 40 c.Assert(err, gc.IsNil) 41 relM, err := s.State.AddRelation(eps...) 42 c.Assert(err, gc.IsNil) 43 44 needed, err = s.State.NeedsCleanup() 45 c.Assert(err, gc.IsNil) 46 c.Assert(needed, gc.Equals, false) 47 48 // Observe destroying of the relation with a watcher. 49 cw := s.State.WatchCleanups() 50 defer func() { c.Assert(cw.Stop(), gc.IsNil) }() 51 52 err = relM.Destroy() 53 c.Assert(err, gc.IsNil) 54 55 timeout := time.After(coretesting.LongWait) 56 for { 57 s.State.StartSync() 58 select { 59 case <-time.After(coretesting.ShortWait): 60 continue 61 case <-timeout: 62 c.Fatalf("timed out waiting for cleanup") 63 case <-cw.Changes(): 64 needed, err = s.State.NeedsCleanup() 65 c.Assert(err, gc.IsNil) 66 if needed { 67 continue 68 } 69 } 70 break 71 } 72 }