github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/worker/minunitsworker/minunitsworker_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package minunitsworker_test 5 6 import ( 7 stdtesting "testing" 8 "time" 9 10 "github.com/juju/loggo" 11 gc "launchpad.net/gocheck" 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/minunitsworker" 17 ) 18 19 var logger = loggo.GetLogger("juju.worker.minunitsworker_test") 20 21 func TestPackage(t *stdtesting.T) { 22 coretesting.MgoTestPackage(t) 23 } 24 25 type minUnitsWorkerSuite struct { 26 testing.JujuConnSuite 27 } 28 29 var _ = gc.Suite(&minUnitsWorkerSuite{}) 30 31 var _ worker.StringsWatchHandler = (*minunitsworker.MinUnitsWorker)(nil) 32 33 func (s *minUnitsWorkerSuite) TestMinUnitsWorker(c *gc.C) { 34 mu := minunitsworker.NewMinUnitsWorker(s.State) 35 defer func() { c.Assert(worker.Stop(mu), gc.IsNil) }() 36 37 // Set up services and units for later use. 38 wordpress := s.AddTestingService(c, "wordpress", s.AddTestingCharm(c, "wordpress")) 39 mysql := s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql")) 40 unit, err := wordpress.AddUnit() 41 c.Assert(err, gc.IsNil) 42 _, err = wordpress.AddUnit() 43 c.Assert(err, gc.IsNil) 44 45 // Set up minimum units for services. 46 err = wordpress.SetMinUnits(3) 47 c.Assert(err, gc.IsNil) 48 err = mysql.SetMinUnits(2) 49 c.Assert(err, gc.IsNil) 50 51 // Remove a unit for a service. 52 err = unit.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 wordpressUnits, err := wordpress.AllUnits() 61 c.Assert(err, gc.IsNil) 62 mysqlUnits, err := mysql.AllUnits() 63 c.Assert(err, gc.IsNil) 64 wordpressCount := len(wordpressUnits) 65 mysqlCount := len(mysqlUnits) 66 if wordpressCount == 3 && mysqlCount == 2 { 67 return 68 } 69 logger.Infof("wordpress units: %d; mysql units: %d", wordpressCount, mysqlCount) 70 case <-timeout: 71 c.Fatalf("timed out waiting for minunits events") 72 } 73 } 74 }