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