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  }