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{}) {}