github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/uniter/verifycharmprofile/verifycharmprofile_test.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package verifycharmprofile_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/core/model" 11 "github.com/juju/juju/worker/uniter/operation" 12 "github.com/juju/juju/worker/uniter/remotestate" 13 "github.com/juju/juju/worker/uniter/resolver" 14 "github.com/juju/juju/worker/uniter/verifycharmprofile" 15 ) 16 17 type verifySuite struct{} 18 19 var _ = gc.Suite(&verifySuite{}) 20 21 func (s *verifySuite) TestNextOpNotInstallNorUpgrade(c *gc.C) { 22 local := resolver.LocalState{ 23 State: operation.State{Kind: operation.RunAction}, 24 } 25 remote := remotestate.Snapshot{} 26 res := newVerifyCharmProfileResolver() 27 28 op, err := res.NextOp(local, remote, nil) 29 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 30 c.Assert(op, gc.IsNil) 31 } 32 33 func (s *verifySuite) TestNextOpInstallProfileNotRequired(c *gc.C) { 34 local := resolver.LocalState{ 35 State: operation.State{Kind: operation.Install}, 36 } 37 remote := remotestate.Snapshot{ 38 CharmProfileRequired: false, 39 } 40 res := newVerifyCharmProfileResolver() 41 42 op, err := res.NextOp(local, remote, nil) 43 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 44 c.Assert(op, gc.IsNil) 45 } 46 47 func (s *verifySuite) TestNextOpInstallProfileRequiredEmptyName(c *gc.C) { 48 local := resolver.LocalState{ 49 State: operation.State{Kind: operation.Install}, 50 } 51 remote := remotestate.Snapshot{ 52 CharmProfileRequired: true, 53 } 54 res := newVerifyCharmProfileResolver() 55 56 op, err := res.NextOp(local, remote, nil) 57 c.Assert(err, gc.Equals, resolver.ErrDoNotProceed) 58 c.Assert(op, gc.IsNil) 59 } 60 61 func (s *verifySuite) TestNextOpMisMatchCharmRevisions(c *gc.C) { 62 local := resolver.LocalState{ 63 State: operation.State{Kind: operation.Upgrade}, 64 } 65 remote := remotestate.Snapshot{ 66 CharmProfileRequired: true, 67 LXDProfileName: "juju-wordpress-74", 68 CharmURL: "ch:wordpress-75", 69 } 70 res := newVerifyCharmProfileResolver() 71 72 op, err := res.NextOp(local, remote, nil) 73 c.Assert(err, gc.Equals, resolver.ErrDoNotProceed) 74 c.Assert(op, gc.IsNil) 75 } 76 77 func (s *verifySuite) TestNextOpMatchingCharmRevisions(c *gc.C) { 78 local := resolver.LocalState{ 79 State: operation.State{Kind: operation.Upgrade}, 80 } 81 remote := remotestate.Snapshot{ 82 CharmProfileRequired: true, 83 LXDProfileName: "juju-wordpress-75", 84 CharmURL: "ch:wordpress-75", 85 } 86 res := newVerifyCharmProfileResolver() 87 88 op, err := res.NextOp(local, remote, nil) 89 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 90 c.Assert(op, gc.IsNil) 91 } 92 93 func (s *verifySuite) TestNewResolverCAAS(c *gc.C) { 94 r := verifycharmprofile.NewResolver(&fakelogger{}, model.CAAS) 95 op, err := r.NextOp(resolver.LocalState{}, remotestate.Snapshot{}, nil) 96 c.Assert(err, gc.Equals, resolver.ErrNoOperation) 97 c.Assert(op, jc.ErrorIsNil) 98 } 99 100 func newVerifyCharmProfileResolver() resolver.Resolver { 101 return verifycharmprofile.NewResolver(&fakelogger{}, model.IAAS) 102 } 103 104 type fakelogger struct{} 105 106 func (*fakelogger) Debugf(string, ...interface{}) {} 107 108 func (*fakelogger) Tracef(string, ...interface{}) {}