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