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  }