github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/uniter/action_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 "gopkg.in/juju/names.v2" 10 11 "github.com/juju/juju/api/uniter" 12 "github.com/juju/juju/apiserver/params" 13 "github.com/juju/juju/state" 14 ) 15 16 type actionSuite struct { 17 uniterSuite 18 } 19 20 var _ = gc.Suite(&actionSuite{}) 21 var basicParams = map[string]interface{}{"outfile": "foo.txt"} 22 23 func (s *actionSuite) TestAction(c *gc.C) { 24 var actionTests = []struct { 25 description string 26 action params.Action 27 }{{ 28 description: "A simple Action.", 29 action: params.Action{ 30 Name: "fakeaction", 31 Parameters: basicParams, 32 }, 33 }, { 34 description: "An Action with nested parameters.", 35 action: params.Action{ 36 Name: "fakeaction", 37 Parameters: map[string]interface{}{ 38 "outfile": "foo.bz2", 39 "compression": map[string]interface{}{ 40 "kind": "bzip", 41 "quality": float64(5.0), 42 }, 43 }, 44 }, 45 }} 46 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) 53 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) 58 59 retrievedAction, err := s.uniter.Action(actionTag) 60 c.Assert(err, jc.ErrorIsNil) 61 62 c.Assert(retrievedAction.Name(), gc.DeepEquals, actionTest.action.Name) 63 c.Assert(retrievedAction.Params(), gc.DeepEquals, actionTest.action.Parameters) 64 } 65 } 66 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`) 71 } 72 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) 80 } 81 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)) 86 87 action, err := s.uniterSuite.wordpressUnit.AddAction("fakeaction", nil) 88 c.Assert(err, jc.ErrorIsNil) 89 90 actionResult := map[string]interface{}{"output": "it worked!"} 91 err = s.uniter.ActionFinish(action.ActionTag(), params.ActionCompleted, actionResult, "") 92 c.Assert(err, jc.ErrorIsNil) 93 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") 102 } 103 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)) 108 109 action, err := s.uniterSuite.wordpressUnit.AddAction("fakeaction", nil) 110 c.Assert(err, jc.ErrorIsNil) 111 112 errmsg := "it failed!" 113 err = s.uniter.ActionFinish(action.ActionTag(), params.ActionFailed, nil, errmsg) 114 c.Assert(err, jc.ErrorIsNil) 115 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") 124 }