github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/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  }
    20  
    21  var _ = gc.Suite(&leaderSetSuite{})
    22  
    23  func (s *leaderSetSuite) TestInitEmpty(c *gc.C) {
    24  	command := jujuc.NewLeaderSetCommand(nil)
    25  	err := command.Init(nil)
    26  	c.Check(err, jc.ErrorIsNil)
    27  }
    28  
    29  func (s *leaderSetSuite) TestInitValues(c *gc.C) {
    30  	command := jujuc.NewLeaderSetCommand(nil)
    31  	err := command.Init([]string{"foo=bar", "baz=qux"})
    32  	c.Check(err, jc.ErrorIsNil)
    33  }
    34  
    35  func (s *leaderSetSuite) TestInitError(c *gc.C) {
    36  	command := jujuc.NewLeaderSetCommand(nil)
    37  	err := command.Init([]string{"nonsense"})
    38  	c.Check(err, gc.ErrorMatches, `expected "key=value", got "nonsense"`)
    39  }
    40  
    41  func (s *leaderSetSuite) TestWriteEmpty(c *gc.C) {
    42  	jujucContext := &leaderSetContext{}
    43  	command := jujuc.NewLeaderSetCommand(jujucContext)
    44  	runContext := testing.Context(c)
    45  	code := cmd.Main(command, runContext, nil)
    46  	c.Check(code, gc.Equals, 0)
    47  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{})
    48  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    49  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    50  }
    51  
    52  func (s *leaderSetSuite) TestWriteValues(c *gc.C) {
    53  	jujucContext := &leaderSetContext{}
    54  	command := jujuc.NewLeaderSetCommand(jujucContext)
    55  	runContext := testing.Context(c)
    56  	code := cmd.Main(command, runContext, []string{"foo=bar", "baz=qux"})
    57  	c.Check(code, gc.Equals, 0)
    58  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{
    59  		"foo": "bar",
    60  		"baz": "qux",
    61  	})
    62  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    63  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    64  }
    65  
    66  func (s *leaderSetSuite) TestWriteError(c *gc.C) {
    67  	jujucContext := &leaderSetContext{err: errors.New("splat")}
    68  	command := jujuc.NewLeaderSetCommand(jujucContext)
    69  	runContext := testing.Context(c)
    70  	code := cmd.Main(command, runContext, []string{"foo=bar"})
    71  	c.Check(code, gc.Equals, 1)
    72  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{"foo": "bar"})
    73  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    74  	c.Check(bufferString(runContext.Stderr), gc.Equals, "error: cannot write leadership settings: splat\n")
    75  }
    76  
    77  type leaderSetContext struct {
    78  	jujuc.Context
    79  	gotSettings map[string]string
    80  	err         error
    81  }
    82  
    83  func (s *leaderSetContext) WriteLeaderSettings(settings map[string]string) error {
    84  	s.gotSettings = settings
    85  	return s.err
    86  }