1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
9
"gopkg.in/juju/names.v2"
11
"github.com/juju/juju/api/uniter"
12
"github.com/juju/juju/apiserver/params"
13
"github.com/juju/juju/state"
16
type actionSuite struct {
20
var _ = gc.Suite(&actionSuite{})
21
var basicParams = map[string]interface{}{"outfile": "foo.txt"}
23
func (s *actionSuite) TestAction(c *gc.C) {
24
var actionTests = []struct {
28
description: "A simple Action.",
29
action: params.Action{
31
Parameters: basicParams,
34
description: "An Action with nested parameters.",
35
action: params.Action{
37
Parameters: map[string]interface{}{
39
"compression": map[string]interface{}{
41
"quality": float64(5.0),
47
for i, actionTest := range actionTests {
48
c.Logf("test %d: %s", i, actionTest.description)
49
a, err := s.uniterSuite.wordpressUnit.AddAction(
50
actionTest.action.Name,
51
actionTest.action.Parameters)
52
c.Assert(err, jc.ErrorIsNil)
54
ok := names.IsValidAction(a.Id())
55
c.Assert(ok, gc.Equals, true)
56
actionTag := names.NewActionTag(a.Id())
57
c.Assert(a.Tag(), gc.Equals, actionTag)
59
retrievedAction, err := s.uniter.Action(actionTag)
60
c.Assert(err, jc.ErrorIsNil)
62
c.Assert(retrievedAction.Name(), gc.DeepEquals, actionTest.action.Name)
63
c.Assert(retrievedAction.Params(), gc.DeepEquals, actionTest.action.Parameters)
67
func (s *actionSuite) TestActionNotFound(c *gc.C) {
68
_, err := s.uniter.Action(names.NewActionTag("feedface-0123-4567-8901-2345deadbeef"))
69
c.Assert(err, gc.NotNil)
70
c.Assert(err, gc.ErrorMatches, `action "feedface-0123-4567-8901-2345deadbeef" not found`)
73
func (s *actionSuite) TestNewActionAndAccessors(c *gc.C) {
74
testAction, err := uniter.NewAction("snapshot", basicParams)
75
c.Assert(err, jc.ErrorIsNil)
76
testName := testAction.Name()
77
testParams := testAction.Params()
78
c.Assert(testName, gc.Equals, "snapshot")
79
c.Assert(testParams, gc.DeepEquals, basicParams)
82
func (s *actionSuite) TestActionComplete(c *gc.C) {
83
completed, err := s.uniterSuite.wordpressUnit.CompletedActions()
84
c.Assert(err, jc.ErrorIsNil)
85
c.Assert(completed, gc.DeepEquals, ([]state.Action)(nil))
87
action, err := s.uniterSuite.wordpressUnit.AddAction("fakeaction", nil)
88
c.Assert(err, jc.ErrorIsNil)
90
actionResult := map[string]interface{}{"output": "it worked!"}
91
err = s.uniter.ActionFinish(action.ActionTag(), params.ActionCompleted, actionResult, "")
92
c.Assert(err, jc.ErrorIsNil)
94
completed, err = s.uniterSuite.wordpressUnit.CompletedActions()
95
c.Assert(err, jc.ErrorIsNil)
96
c.Assert(len(completed), gc.Equals, 1)
97
c.Assert(completed[0].Status(), gc.Equals, state.ActionCompleted)
98
res, errstr := completed[0].Results()
99
c.Assert(errstr, gc.Equals, "")
100
c.Assert(res, gc.DeepEquals, actionResult)
101
c.Assert(completed[0].Name(), gc.Equals, "fakeaction")
104
func (s *actionSuite) TestActionFail(c *gc.C) {
105
completed, err := s.uniterSuite.wordpressUnit.CompletedActions()
106
c.Assert(err, jc.ErrorIsNil)
107
c.Assert(completed, gc.DeepEquals, ([]state.Action)(nil))
109
action, err := s.uniterSuite.wordpressUnit.AddAction("fakeaction", nil)
110
c.Assert(err, jc.ErrorIsNil)
112
errmsg := "it failed!"
113
err = s.uniter.ActionFinish(action.ActionTag(), params.ActionFailed, nil, errmsg)
114
c.Assert(err, jc.ErrorIsNil)
116
completed, err = s.uniterSuite.wordpressUnit.CompletedActions()
117
c.Assert(err, jc.ErrorIsNil)
118
c.Assert(len(completed), gc.Equals, 1)
119
c.Assert(completed[0].Status(), gc.Equals, state.ActionFailed)
120
res, errstr := completed[0].Results()
121
c.Assert(errstr, gc.Equals, errmsg)
122
c.Assert(res, gc.DeepEquals, map[string]interface{}{})
123
c.Assert(completed[0].Name(), gc.Equals, "fakeaction")