github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/machineactions/handleactions_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Copyright 2016 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 package machineactions_test 6 7 import ( 8 "strings" 9 10 "github.com/juju/errors" 11 "github.com/juju/testing" 12 jc "github.com/juju/testing/checkers" 13 "github.com/juju/utils/exec" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/core/actions" 17 "github.com/juju/juju/worker/machineactions" 18 ) 19 20 type HandleSuite struct { 21 testing.IsolationSuite 22 } 23 24 var _ = gc.Suite(&HandleSuite{}) 25 26 func (s *HandleSuite) SetUpTest(c *gc.C) { 27 s.IsolationSuite.SetUpTest(c) 28 // For testing purposes, don't set the user to run as. 29 // Most developers don't have rights to use 'su'. 30 s.PatchValue(&machineactions.RunAsUser, "") 31 } 32 33 func (s *HandleSuite) TestInvalidAction(c *gc.C) { 34 results, err := machineactions.HandleAction("invalid", nil) 35 c.Assert(err, gc.ErrorMatches, "unexpected action invalid") 36 c.Assert(results, gc.IsNil) 37 } 38 39 func (s *HandleSuite) TestValidActionInvalidParams(c *gc.C) { 40 results, err := machineactions.HandleAction(actions.JujuRunActionName, nil) 41 c.Assert(err, gc.ErrorMatches, "invalid action parameters") 42 c.Assert(results, gc.IsNil) 43 } 44 45 func (s *HandleSuite) TestTimeoutRun(c *gc.C) { 46 params := map[string]interface{}{ 47 "command": "sleep 100", 48 "timeout": float64(1), 49 } 50 51 results, err := machineactions.HandleAction(actions.JujuRunActionName, params) 52 c.Assert(errors.Cause(err), gc.Equals, exec.ErrCancelled) 53 c.Assert(results, gc.IsNil) 54 } 55 56 func (s *HandleSuite) TestSuccessfulRun(c *gc.C) { 57 params := map[string]interface{}{ 58 "command": "echo 1", 59 "timeout": float64(0), 60 } 61 62 results, err := machineactions.HandleAction(actions.JujuRunActionName, params) 63 c.Assert(err, jc.ErrorIsNil) 64 c.Assert(results["Code"], gc.Equals, "0") 65 c.Assert(strings.TrimRight(results["Stdout"].(string), "\r\n"), gc.Equals, "1") 66 c.Assert(results["Stderr"], gc.Equals, "") 67 } 68 69 func (s *HandleSuite) TestErrorRun(c *gc.C) { 70 params := map[string]interface{}{ 71 "command": "exit 42", 72 "timeout": float64(0), 73 } 74 75 results, err := machineactions.HandleAction(actions.JujuRunActionName, params) 76 c.Assert(err, jc.ErrorIsNil) 77 c.Assert(results["Code"], gc.Equals, "42") 78 c.Assert(results["Stdout"], gc.Equals, "") 79 c.Assert(results["Stderr"], gc.Equals, "") 80 }