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  }