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