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  }