github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/cmd/cmdtesting"
     9  	"github.com/juju/errors"
    10  	jujutesting "github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    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  	s.command = jujuc.NewJujucCommandWrappedForTest(s.command)
    29  }
    30  
    31  func (s *leaderSetSuite) TestInitEmpty(c *gc.C) {
    32  	err := s.command.Init(nil)
    33  	c.Check(err, jc.ErrorIsNil)
    34  }
    35  
    36  func (s *leaderSetSuite) TestInitValues(c *gc.C) {
    37  	err := s.command.Init([]string{"foo=bar", "baz=qux"})
    38  	c.Check(err, jc.ErrorIsNil)
    39  }
    40  
    41  func (s *leaderSetSuite) TestInitError(c *gc.C) {
    42  	err := s.command.Init([]string{"nonsense"})
    43  	c.Check(err, gc.ErrorMatches, `expected "key=value", got "nonsense"`)
    44  }
    45  
    46  func (s *leaderSetSuite) TestWriteEmpty(c *gc.C) {
    47  	jujucContext := &leaderSetContext{}
    48  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	runContext := cmdtesting.Context(c)
    51  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, nil)
    52  	c.Check(code, gc.Equals, 0)
    53  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{})
    54  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    55  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    56  }
    57  
    58  func (s *leaderSetSuite) TestWriteValues(c *gc.C) {
    59  	jujucContext := &leaderSetContext{}
    60  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    61  	c.Assert(err, jc.ErrorIsNil)
    62  	runContext := cmdtesting.Context(c)
    63  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, []string{"foo=bar", "baz=qux"})
    64  	c.Check(code, gc.Equals, 0)
    65  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{
    66  		"foo": "bar",
    67  		"baz": "qux",
    68  	})
    69  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    70  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
    71  }
    72  
    73  func (s *leaderSetSuite) TestWriteError(c *gc.C) {
    74  	jujucContext := &leaderSetContext{err: errors.New("splat")}
    75  	command, err := jujuc.NewLeaderSetCommand(jujucContext)
    76  	c.Assert(err, jc.ErrorIsNil)
    77  	runContext := cmdtesting.Context(c)
    78  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, []string{"foo=bar"})
    79  	c.Check(code, gc.Equals, 1)
    80  	c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{"foo": "bar"})
    81  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    82  	c.Check(bufferString(runContext.Stderr), gc.Equals, "ERROR cannot write leadership settings: splat\n")
    83  }
    84  
    85  type leaderSetContext struct {
    86  	jujuc.Context
    87  	gotSettings map[string]string
    88  	err         error
    89  }
    90  
    91  func (s *leaderSetContext) WriteLeaderSettings(settings map[string]string) error {
    92  	s.gotSettings = settings
    93  	return s.err
    94  }