github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/retrystrategy/worker_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Copyright 2016 Cloudbase Solutions
     3  // Licensed under the AGPLv3, see LICENCE file for details.
     4  
     5  package retrystrategy_test
     6  
     7  import (
     8  	"github.com/juju/errors"
     9  	"github.com/juju/testing"
    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/worker/retrystrategy"
    15  )
    16  
    17  type WorkerSuite struct {
    18  	testing.IsolationSuite
    19  }
    20  
    21  var _ = gc.Suite(&WorkerSuite{})
    22  
    23  func (s *WorkerSuite) testValidate(c *gc.C, config retrystrategy.WorkerConfig, errMsg string) {
    24  	check := func(err error) {
    25  		c.Check(err, gc.ErrorMatches, errMsg)
    26  		c.Check(err, jc.Satisfies, errors.IsNotValid)
    27  	}
    28  
    29  	err := config.Validate()
    30  	check(err)
    31  
    32  	worker, err := retrystrategy.NewRetryStrategyWorker(config)
    33  	check(err)
    34  	c.Check(worker, gc.IsNil)
    35  }
    36  
    37  func (s WorkerSuite) TestValidateInvalidFacade(c *gc.C) {
    38  	s.testValidate(c, retrystrategy.WorkerConfig{}, "nil Facade not valid")
    39  }
    40  
    41  func (s WorkerSuite) TestValidateInvalidAgentTag(c *gc.C) {
    42  	s.testValidate(c, retrystrategy.WorkerConfig{
    43  		Facade: &stubFacade{},
    44  	}, "nil AgentTag not valid")
    45  }
    46  
    47  func (s WorkerSuite) TestValidateInvalidRetryStrategy(c *gc.C) {
    48  	s.testValidate(c, retrystrategy.WorkerConfig{
    49  		Facade:   &stubFacade{},
    50  		AgentTag: &stubTag{},
    51  	}, "empty RetryStrategy not valid")
    52  }
    53  
    54  func (s WorkerSuite) TestWatchError(c *gc.C) {
    55  	fix := newFixture(c, errors.New("supersonybunduru"))
    56  	fix.Run(c, func(w worker.Worker) {
    57  		err := w.Wait()
    58  		c.Assert(err, gc.ErrorMatches, "supersonybunduru")
    59  	})
    60  	fix.CheckCallNames(c, "WatchRetryStrategy")
    61  }
    62  
    63  func (s WorkerSuite) TestGetStrategyError(c *gc.C) {
    64  	fix := newFixture(c, nil, errors.New("blackfridaybunduru"))
    65  	fix.Run(c, func(w worker.Worker) {
    66  		err := w.Wait()
    67  		c.Assert(err, gc.ErrorMatches, "blackfridaybunduru")
    68  	})
    69  	fix.CheckCallNames(c, "WatchRetryStrategy", "RetryStrategy")
    70  }
    71  
    72  func (s WorkerSuite) TestBounce(c *gc.C) {
    73  	fix := newFixture(c, nil, nil, nil)
    74  	fix.Run(c, func(w worker.Worker) {
    75  		err := w.Wait()
    76  		c.Assert(err, gc.ErrorMatches, "bouncing retrystrategy worker to get new values")
    77  	})
    78  	fix.CheckCallNames(c, "WatchRetryStrategy", "RetryStrategy", "RetryStrategy")
    79  }