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  }