github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/upgradeseries/resolver_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/testing" 9 gc "gopkg.in/check.v1" 10 "gopkg.in/juju/charm.v6/hooks" 11 12 "github.com/juju/juju/core/model" 13 "github.com/juju/juju/worker/uniter/hook" 14 "github.com/juju/juju/worker/uniter/operation" 15 "github.com/juju/juju/worker/uniter/operation/mocks" 16 "github.com/juju/juju/worker/uniter/remotestate" 17 "github.com/juju/juju/worker/uniter/resolver" 18 "github.com/juju/juju/worker/uniter/upgradeseries" 19 ) 20 21 type ResolverSuite struct { 22 testing.IsolationSuite 23 } 24 25 var _ = gc.Suite(&ResolverSuite{}) 26 27 func (ResolverSuite) TestNextOpWithRemoveStateCompleted(c *gc.C) { 28 ctrl := gomock.NewController(c) 29 defer ctrl.Finish() 30 31 mockFactory := mocks.NewMockFactory(ctrl) 32 33 res := upgradeseries.NewResolver() 34 _, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{ 35 UpgradeSeriesStatus: model.UpgradeSeriesPrepareCompleted, 36 }, mockFactory) 37 c.Assert(err, gc.Equals, resolver.ErrDoNotProceed) 38 } 39 40 func (ResolverSuite) TestNextOpWithPreSeriesUpgrade(c *gc.C) { 41 ctrl := gomock.NewController(c) 42 defer ctrl.Finish() 43 44 mockOp := mocks.NewMockOperation(ctrl) 45 46 mockFactory := mocks.NewMockFactory(ctrl) 47 mockFactory.EXPECT().NewRunHook(hook.Info{Kind: hooks.PreSeriesUpgrade}).Return(mockOp, nil) 48 49 res := upgradeseries.NewResolver() 50 op, err := res.NextOp(resolver.LocalState{ 51 State: operation.State{ 52 Kind: operation.Continue, 53 }, 54 UpgradeSeriesStatus: model.UpgradeSeriesNotStarted, 55 }, remotestate.Snapshot{ 56 UpgradeSeriesStatus: model.UpgradeSeriesPrepareStarted, 57 }, mockFactory) 58 c.Assert(err, gc.IsNil) 59 c.Assert(op, gc.NotNil) 60 } 61 62 func (ResolverSuite) TestNextOpWithPostSeriesUpgrade(c *gc.C) { 63 ctrl := gomock.NewController(c) 64 defer ctrl.Finish() 65 66 mockOp := mocks.NewMockOperation(ctrl) 67 68 mockFactory := mocks.NewMockFactory(ctrl) 69 mockFactory.EXPECT().NewRunHook(hook.Info{Kind: hooks.PostSeriesUpgrade}).Return(mockOp, nil) 70 71 res := upgradeseries.NewResolver() 72 op, err := res.NextOp(resolver.LocalState{ 73 State: operation.State{ 74 Kind: operation.Continue, 75 }, 76 UpgradeSeriesStatus: model.UpgradeSeriesNotStarted, 77 }, remotestate.Snapshot{ 78 UpgradeSeriesStatus: model.UpgradeSeriesCompleteStarted, 79 }, mockFactory) 80 c.Assert(err, gc.IsNil) 81 c.Assert(op, gc.NotNil) 82 } 83 84 func (ResolverSuite) TestNextOpWithFinishUpgradeSeries(c *gc.C) { 85 ctrl := gomock.NewController(c) 86 defer ctrl.Finish() 87 88 mockOp := mocks.NewMockOperation(ctrl) 89 90 mockFactory := mocks.NewMockFactory(ctrl) 91 mockFactory.EXPECT().NewNoOpFinishUpgradeSeries().Return(mockOp, nil) 92 93 res := upgradeseries.NewResolver() 94 op, err := res.NextOp(resolver.LocalState{ 95 State: operation.State{ 96 Kind: operation.Continue, 97 }, 98 UpgradeSeriesStatus: model.UpgradeSeriesCompleted, 99 }, remotestate.Snapshot{ 100 UpgradeSeriesStatus: model.UpgradeSeriesNotStarted, 101 }, mockFactory) 102 c.Assert(err, gc.IsNil) 103 c.Assert(op, gc.NotNil) 104 } 105 106 func (ResolverSuite) TestNextOpWithNoState(c *gc.C) { 107 ctrl := gomock.NewController(c) 108 defer ctrl.Finish() 109 110 mockFactory := mocks.NewMockFactory(ctrl) 111 112 res := upgradeseries.NewResolver() 113 _, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{}, mockFactory) 114 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 115 }