github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/upgradecharmprofile/resolver_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package upgradecharmprofile_test 5 6 import ( 7 "errors" 8 9 "github.com/golang/mock/gomock" 10 "github.com/juju/testing" 11 gc "gopkg.in/check.v1" 12 corecharm "gopkg.in/juju/charm.v6" 13 14 "github.com/juju/juju/core/lxdprofile" 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/upgradecharmprofile" 19 ) 20 21 type ResolverSuite struct { 22 testing.IsolationSuite 23 } 24 25 var _ = gc.Suite(&ResolverSuite{}) 26 27 func (ResolverSuite) TestNextOpWithNoRemoveStatus(c *gc.C) { 28 ctrl := gomock.NewController(c) 29 defer ctrl.Finish() 30 31 mockFactory := mocks.NewMockFactory(ctrl) 32 33 res := upgradecharmprofile.NewResolver() 34 _, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{}, mockFactory) 35 c.Assert(err, gc.Equals, resolver.ErrDoNotProceed) 36 } 37 38 func (ResolverSuite) TestNextOpWithNotRequiredStatus(c *gc.C) { 39 ctrl := gomock.NewController(c) 40 defer ctrl.Finish() 41 42 mockFactory := mocks.NewMockFactory(ctrl) 43 44 res := upgradecharmprofile.NewResolver() 45 _, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{ 46 UpgradeCharmProfileStatus: lxdprofile.NotRequiredStatus, 47 }, mockFactory) 48 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 49 } 50 51 func (ResolverSuite) TestNextOpWithSuccessStatus(c *gc.C) { 52 ctrl := gomock.NewController(c) 53 defer ctrl.Finish() 54 55 mockFactory := mocks.NewMockFactory(ctrl) 56 57 res := upgradecharmprofile.NewResolver() 58 _, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{ 59 UpgradeCharmProfileStatus: lxdprofile.SuccessStatus, 60 }, mockFactory) 61 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 62 } 63 64 func (ResolverSuite) TestNextOpWithErrorStatus(c *gc.C) { 65 ctrl := gomock.NewController(c) 66 defer ctrl.Finish() 67 68 charmURL, err := corecharm.ParseURL("cs:~user/series/name") 69 c.Assert(err, gc.IsNil) 70 71 mockOp := mocks.NewMockOperation(ctrl) 72 73 mockFactory := mocks.NewMockFactory(ctrl) 74 mockFactory.EXPECT().NewFinishUpgradeCharmProfile(charmURL).Return(mockOp, nil) 75 76 res := upgradecharmprofile.NewResolver() 77 op, err := res.NextOp(resolver.LocalState{}, remotestate.Snapshot{ 78 CharmURL: charmURL, 79 UpgradeCharmProfileStatus: lxdprofile.AnnotateErrorStatus(errors.New("foo bar")), 80 }, mockFactory) 81 c.Assert(err, gc.IsNil) 82 c.Assert(op, gc.NotNil) 83 } 84 85 func (ResolverSuite) TestNextOpWithErrorStatusWithALocalState(c *gc.C) { 86 ctrl := gomock.NewController(c) 87 defer ctrl.Finish() 88 89 charmURL, err := corecharm.ParseURL("cs:~user/series/name") 90 c.Assert(err, gc.IsNil) 91 92 mockFactory := mocks.NewMockFactory(ctrl) 93 94 res := upgradecharmprofile.NewResolver() 95 _, err = res.NextOp(resolver.LocalState{ 96 UpgradeCharmProfileStatus: lxdprofile.NotKnownStatus, 97 }, remotestate.Snapshot{ 98 CharmURL: charmURL, 99 UpgradeCharmProfileStatus: lxdprofile.AnnotateErrorStatus(errors.New("foo bar")), 100 }, mockFactory) 101 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 102 }