github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/uniter/actions/resolver_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package actions_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/worker/uniter/actions"
    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  )
    15  
    16  type actionsSuite struct{}
    17  
    18  var _ = gc.Suite(&actionsSuite{})
    19  
    20  func (s *actionsSuite) TestNoActions(c *gc.C) {
    21  	actionResolver := actions.NewResolver()
    22  	localState := resolver.LocalState{}
    23  	remoteState := remotestate.Snapshot{}
    24  	_, err := actionResolver.NextOp(localState, remoteState, &mockOperations{})
    25  	c.Assert(err, gc.DeepEquals, resolver.ErrNoOperation)
    26  }
    27  
    28  func (s *actionsSuite) TestActionStateKindContinue(c *gc.C) {
    29  	actionResolver := actions.NewResolver()
    30  	localState := resolver.LocalState{
    31  		State: operation.State{
    32  			Kind: operation.Continue,
    33  		},
    34  	}
    35  	remoteState := remotestate.Snapshot{
    36  		Actions: []string{"actionA", "actionB"},
    37  	}
    38  	op, err := actionResolver.NextOp(localState, remoteState, &mockOperations{})
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	c.Assert(op, jc.DeepEquals, mockOp("actionA"))
    41  }
    42  
    43  func (s *actionsSuite) TestActionRunHook(c *gc.C) {
    44  	actionResolver := actions.NewResolver()
    45  	localState := resolver.LocalState{
    46  		State: operation.State{
    47  			Kind: operation.RunHook,
    48  			Step: operation.Pending,
    49  		},
    50  	}
    51  	remoteState := remotestate.Snapshot{
    52  		Actions: []string{"actionA", "actionB"},
    53  	}
    54  	op, err := actionResolver.NextOp(localState, remoteState, &mockOperations{})
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	c.Assert(op, jc.DeepEquals, mockOp("actionA"))
    57  }
    58  
    59  func (s *actionsSuite) TestNextAction(c *gc.C) {
    60  	actionResolver := actions.NewResolver()
    61  	localState := resolver.LocalState{
    62  		State: operation.State{
    63  			Kind: operation.Continue,
    64  		},
    65  		CompletedActions: map[string]struct{}{"actionA": struct{}{}},
    66  	}
    67  	remoteState := remotestate.Snapshot{
    68  		Actions: []string{"actionA", "actionB"},
    69  	}
    70  	op, err := actionResolver.NextOp(localState, remoteState, &mockOperations{})
    71  	c.Assert(err, jc.ErrorIsNil)
    72  	c.Assert(op, jc.DeepEquals, mockOp("actionB"))
    73  }
    74  
    75  type mockOperations struct {
    76  	operation.Factory
    77  }
    78  
    79  func (m *mockOperations) NewAction(id string) (operation.Operation, error) {
    80  	return mockOp(id), nil
    81  }
    82  
    83  func mockOp(name string) operation.Operation {
    84  	return &mockOperation{name: name}
    85  }
    86  
    87  type mockOperation struct {
    88  	operation.Operation
    89  	name string
    90  }
    91  
    92  func (op *mockOperation) String() string {
    93  	return op.name
    94  }