github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/juju/testing" 15 coretesting "github.com/juju/juju/testing" 16 "github.com/juju/juju/worker" 17 "github.com/juju/juju/worker/minunitsworker" 18 ) 19 20 var logger = loggo.GetLogger("juju.worker.minunitsworker_test") 21 22 func TestPackage(t *stdtesting.T) { 23 coretesting.MgoTestPackage(t) 24 } 25 26 type minUnitsWorkerSuite struct { 27 testing.JujuConnSuite 28 } 29 30 var _ = gc.Suite(&minUnitsWorkerSuite{}) 31 32 var _ worker.StringsWatchHandler = (*minunitsworker.MinUnitsWorker)(nil) 33 34 func (s *minUnitsWorkerSuite) TestMinUnitsWorker(c *gc.C) { 35 mu := minunitsworker.NewMinUnitsWorker(s.State) 36 defer func() { c.Assert(worker.Stop(mu), gc.IsNil) }() 37 38 // Set up services and units for later use. 39 wordpress := s.AddTestingService(c, "wordpress", s.AddTestingCharm(c, "wordpress")) 40 mysql := s.AddTestingService(c, "mysql", s.AddTestingCharm(c, "mysql")) 41 unit, err := wordpress.AddUnit() 42 c.Assert(err, jc.ErrorIsNil) 43 _, err = wordpress.AddUnit() 44 c.Assert(err, jc.ErrorIsNil) 45 46 // Set up minimum units for services. 47 err = wordpress.SetMinUnits(3) 48 c.Assert(err, jc.ErrorIsNil) 49 err = mysql.SetMinUnits(2) 50 c.Assert(err, jc.ErrorIsNil) 51 52 // Remove a unit for a service. 53 err = unit.Destroy() 54 c.Assert(err, jc.ErrorIsNil) 55 56 timeout := time.After(coretesting.LongWait) 57 for { 58 s.State.StartSync() 59 select { 60 case <-time.After(coretesting.ShortWait): 61 wordpressUnits, err := wordpress.AllUnits() 62 c.Assert(err, jc.ErrorIsNil) 63 mysqlUnits, err := mysql.AllUnits() 64 c.Assert(err, jc.ErrorIsNil) 65 wordpressCount := len(wordpressUnits) 66 mysqlCount := len(mysqlUnits) 67 if wordpressCount == 3 && mysqlCount == 2 { 68 return 69 } 70 logger.Infof("wordpress units: %d; mysql units: %d", wordpressCount, mysqlCount) 71 case <-timeout: 72 c.Fatalf("timed out waiting for minunits events") 73 } 74 } 75 }