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  }