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 }