github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/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 stdtesting "testing" 8 "time" 9 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/juju/testing" 13 coretesting "github.com/juju/juju/testing" 14 "github.com/juju/juju/worker" 15 "github.com/juju/juju/worker/cleaner" 16 ) 17 18 func TestPackage(t *stdtesting.T) { 19 coretesting.MgoTestPackage(t) 20 } 21 22 type CleanerSuite struct { 23 testing.JujuConnSuite 24 } 25 26 var _ = gc.Suite(&CleanerSuite{}) 27 28 var _ worker.NotifyWatchHandler = (*cleaner.Cleaner)(nil) 29 30 func (s *CleanerSuite) TestCleaner(c *gc.C) { 31 cr := cleaner.NewCleaner(s.State) 32 defer func() { c.Assert(worker.Stop(cr), gc.IsNil) }() 33 34 needed, err := s.State.NeedsCleanup() 35 c.Assert(err, gc.IsNil) 36 c.Assert(needed, gc.Equals, false) 37 38 s.AddTestingService(c, "wordpress", s.AddTestingCharm(c, "wordpress")) 39 s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql")) 40 eps, err := s.State.InferEndpoints([]string{"wordpress", "mysql"}) 41 c.Assert(err, gc.IsNil) 42 relM, err := s.State.AddRelation(eps...) 43 c.Assert(err, gc.IsNil) 44 45 needed, err = s.State.NeedsCleanup() 46 c.Assert(err, gc.IsNil) 47 c.Assert(needed, gc.Equals, false) 48 49 // Observe destroying of the relation with a watcher. 50 cw := s.State.WatchCleanups() 51 defer func() { c.Assert(cw.Stop(), gc.IsNil) }() 52 53 err = relM.Destroy() 54 c.Assert(err, gc.IsNil) 55 56 timeout := time.After(coretesting.LongWait) 57 for { 58 s.State.StartSync() 59 select { 60 case <-time.After(coretesting.ShortWait): 61 continue 62 case <-timeout: 63 c.Fatalf("timed out waiting for cleanup") 64 case <-cw.Changes(): 65 needed, err = s.State.NeedsCleanup() 66 c.Assert(err, gc.IsNil) 67 if needed { 68 continue 69 } 70 } 71 break 72 } 73 }