github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/uniter/runner/jujuc/leader-set_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package jujuc_test
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  	jujutesting "github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/testing"
    14  	"github.com/juju/juju/worker/uniter/runner/jujuc"
    15  )
    16  
    17  type leaderSetSuite struct {
    18  	jujutesting.IsolationSuite
    19  	command cmd.Command
    20  }
    21  
    22  var _ = gc.Suite(&leaderSetSuite{})
    23  
    24  func (s *leaderSetSuite) SetUpTest(c *gc.C) {
    25  	var err error
    26  	s.command, err = jujuc.NewLeaderSetCommand(nil)
    27  	c.Assert(err, jc.ErrorIsNil)
    28  }
    29  
    30  func (s *leaderSetSuite) TestInitEmpty(c *gc.C) {
    31  	err := s.command.Init(nil)
    32  	c.Check(err, jc.ErrorIsNil)
    33  }
    34  
    35  func (s *leaderSetSuite) TestInitValues(c *gc.C) {
    36  	err := s.command.Init([]string{"foo=bar", "baz=qux"})
    37  	c.Check(err, jc.ErrorIsNil)
    38  }
    39  
    40  func (s *leaderSetSuite) TestInitError(c *gc.C) {
    41  	err := s.command.Init([]string{"nonsense"})
    42  	c.Check(err, gc.ErrorMatches, `expected "key=value", got "nonsense"`)
    43  }
    44  
    45  func (s *leaderSetSuite) TestWriteEmpty(c *gc.C) {
    46  	jujucContext := &leaderSetContext{}
    47  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	runContext := testing.Context(c)
    50  	code := cmd.Main(command, runContext, nil)
    51  	c.Check(code, gc.Equals, 0)
    52  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{})
    53  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    54  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    55  }
    56  
    57  func (s *leaderSetSuite) TestWriteValues(c *gc.C) {
    58  	jujucContext := &leaderSetContext{}
    59  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	runContext := testing.Context(c)
    62  	code := cmd.Main(command, runContext, []string{"foo=bar", "baz=qux"})
    63  	c.Check(code, gc.Equals, 0)
    64  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{
    65  		"foo": "bar",
    66  		"baz": "qux",
    67  	})
    68  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    69  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    70  }
    71  
    72  func (s *leaderSetSuite) TestWriteError(c *gc.C) {
    73  	jujucContext := &leaderSetContext{err: errors.New("splat")}
    74  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    75  	c.Assert(err, jc.ErrorIsNil)
    76  	runContext := testing.Context(c)
    77  	code := cmd.Main(command, runContext, []string{"foo=bar"})
    78  	c.Check(code, gc.Equals, 1)
    79  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{"foo": "bar"})
    80  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    81  	c.Check(bufferString(runContext.Stderr), gc.Equals, "error: cannot write leadership settings: splat\n")
    82  }
    83  
    84  type leaderSetContext struct {
    85  	jujuc.Context
    86  	gotSettings map[string]string
    87  	err         error
    88  }
    89  
    90  func (s *leaderSetContext) WriteLeaderSettings(settings map[string]string) error {
    91  	s.gotSettings = settings
    92  	return s.err
    93  }