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

     1  // Copyright 2018 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package upgradeseries_test
     5  
     6  import (
     7  	"github.com/golang/mock/gomock"
     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/names.v2"
    13  	"gopkg.in/juju/worker.v1"
    14  	"gopkg.in/juju/worker.v1/dependency"
    15  	dt "gopkg.in/juju/worker.v1/dependency/testing"
    16  
    17  	"github.com/juju/juju/agent"
    18  	"github.com/juju/juju/api/base"
    19  	"github.com/juju/juju/worker/upgradeseries"
    20  )
    21  
    22  type ManifoldSuite struct {
    23  	testing.IsolationSuite
    24  }
    25  
    26  var _ = gc.Suite(&ManifoldSuite{})
    27  
    28  func (s *ManifoldSuite) TestInputs(c *gc.C) {
    29  	ctrl := gomock.NewController(c)
    30  	defer ctrl.Finish()
    31  
    32  	cfg, _, _ := validManifoldConfig(ctrl)
    33  	cfg.NewFacade = nil
    34  
    35  	c.Check(upgradeseries.Manifold(cfg).Inputs, jc.DeepEquals, []string{"agent-name", "api-caller-name"})
    36  }
    37  
    38  func (*ManifoldSuite) TestStartMissingNewFacade(c *gc.C) {
    39  	ctrl := gomock.NewController(c)
    40  	defer ctrl.Finish()
    41  
    42  	cfg, _, _ := validManifoldConfig(ctrl)
    43  	cfg.NewFacade = nil
    44  
    45  	work, err := upgradeseries.Manifold(cfg).Start(newStubContext())
    46  	c.Check(work, gc.IsNil)
    47  	c.Check(err, gc.ErrorMatches, "nil NewFacade function not valid")
    48  }
    49  
    50  func (*ManifoldSuite) TestStartMissingNewWorker(c *gc.C) {
    51  	ctrl := gomock.NewController(c)
    52  	defer ctrl.Finish()
    53  
    54  	cfg, _, _ := validManifoldConfig(ctrl)
    55  	cfg.NewWorker = nil
    56  
    57  	work, err := upgradeseries.Manifold(cfg).Start(newStubContext())
    58  	c.Check(work, gc.IsNil)
    59  	c.Check(err, gc.ErrorMatches, "nil NewWorker function not valid")
    60  }
    61  
    62  func (*ManifoldSuite) TestStartMissingLogger(c *gc.C) {
    63  	ctrl := gomock.NewController(c)
    64  	defer ctrl.Finish()
    65  
    66  	cfg, _, _ := validManifoldConfig(ctrl)
    67  	cfg.Logger = nil
    68  
    69  	work, err := upgradeseries.Manifold(cfg).Start(newStubContext())
    70  	c.Check(work, gc.IsNil)
    71  	c.Check(err, gc.ErrorMatches, "nil Logger not valid")
    72  }
    73  
    74  func (s *ManifoldSuite) TestStartMissingAgentName(c *gc.C) {
    75  	ctrl := gomock.NewController(c)
    76  	defer ctrl.Finish()
    77  
    78  	cfg, _, _ := validManifoldConfig(ctrl)
    79  	ctx := dt.StubContext(nil, map[string]interface{}{
    80  		"agent-name":      dependency.ErrMissing,
    81  		"api-caller-name": &dummyAPICaller{},
    82  	})
    83  
    84  	work, err := upgradeseries.Manifold(cfg).Start(ctx)
    85  	c.Check(work, gc.IsNil)
    86  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    87  }
    88  
    89  func (s *ManifoldSuite) TestStartMissingAPICallerName(c *gc.C) {
    90  	ctrl := gomock.NewController(c)
    91  	defer ctrl.Finish()
    92  
    93  	cfg, _, _ := validManifoldConfig(ctrl)
    94  	ctx := dt.StubContext(nil, map[string]interface{}{
    95  		"agent-name":      &dummyAgent{},
    96  		"api-caller-name": dependency.ErrMissing,
    97  	})
    98  
    99  	work, err := upgradeseries.Manifold(cfg).Start(ctx)
   100  	c.Check(work, gc.IsNil)
   101  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
   102  }
   103  
   104  func (s *ManifoldSuite) TestStartSuccess(c *gc.C) {
   105  	ctrl := gomock.NewController(c)
   106  	defer ctrl.Finish()
   107  
   108  	cfg, _, _ := validManifoldConfig(ctrl)
   109  
   110  	work, err := upgradeseries.Manifold(cfg).Start(newStubContext())
   111  	c.Check(work, gc.NotNil)
   112  	c.Check(err, jc.ErrorIsNil)
   113  }
   114  
   115  func (s *ManifoldSuite) TestStartError(c *gc.C) {
   116  	ctrl := gomock.NewController(c)
   117  	defer ctrl.Finish()
   118  
   119  	cfg, _, _ := validManifoldConfig(ctrl)
   120  	cfg.NewWorker = func(_ upgradeseries.Config) (worker.Worker, error) { return nil, errors.New("WHACK!") }
   121  
   122  	work, err := upgradeseries.Manifold(cfg).Start(newStubContext())
   123  	c.Check(work, gc.IsNil)
   124  	c.Check(err, gc.ErrorMatches, "starting machine upgrade series worker: WHACK!")
   125  }
   126  
   127  type dummyAPICaller struct {
   128  	base.APICaller
   129  }
   130  
   131  type dummyConfig struct {
   132  	agent.Config
   133  }
   134  
   135  type dummyAgent struct {
   136  	agent.Agent
   137  }
   138  
   139  func (*dummyAgent) CurrentConfig() agent.Config {
   140  	return &dummyConfig{}
   141  }
   142  
   143  func (*dummyConfig) Tag() names.Tag {
   144  	return names.NewMachineTag("666")
   145  }
   146  
   147  func newStubContext() *dt.Context {
   148  	return dt.StubContext(nil, map[string]interface{}{
   149  		"agent-name":      &dummyAgent{},
   150  		"api-caller-name": &dummyAPICaller{},
   151  	})
   152  }