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  }