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 }