github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/runner/jujuc/leader-get_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  	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 leaderGetSuite struct {
    18  	testing.BaseSuite
    19  	command cmd.Command
    20  }
    21  
    22  var _ = gc.Suite(&leaderGetSuite{})
    23  
    24  func (s *leaderGetSuite) SetUpTest(c *gc.C) {
    25  	s.BaseSuite.SetUpTest(c)
    26  	var err error
    27  	s.command, err = jujuc.NewLeaderGetCommand(nil)
    28  	c.Assert(err, jc.ErrorIsNil)
    29  	s.command = jujuc.NewJujucCommandWrappedForTest(s.command)
    30  }
    31  
    32  func (s *leaderGetSuite) TestInitError(c *gc.C) {
    33  	err := s.command.Init([]string{"x=x"})
    34  	c.Assert(err, gc.ErrorMatches, `invalid key "x=x"`)
    35  }
    36  
    37  func (s *leaderGetSuite) TestInitKey(c *gc.C) {
    38  	err := s.command.Init([]string{"some-key"})
    39  	c.Assert(err, jc.ErrorIsNil)
    40  }
    41  
    42  func (s *leaderGetSuite) TestInitAll(c *gc.C) {
    43  	err := s.command.Init([]string{"-"})
    44  	c.Assert(err, jc.ErrorIsNil)
    45  }
    46  
    47  func (s *leaderGetSuite) TestInitEmpty(c *gc.C) {
    48  	err := s.command.Init(nil)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  }
    51  
    52  func (s *leaderGetSuite) TestFormatError(c *gc.C) {
    53  	runContext := cmdtesting.Context(c)
    54  	code := cmd.Main(s.command, runContext, []string{"--format", "bad"})
    55  	c.Check(code, gc.Equals, 2)
    56  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    57  	c.Check(bufferString(runContext.Stderr), gc.Equals, `ERROR invalid value "bad" for option --format: unknown format "bad"`+"\n")
    58  }
    59  
    60  func (s *leaderGetSuite) TestSettingsError(c *gc.C) {
    61  	jujucContext := newLeaderGetContext(errors.New("zap"))
    62  	command, err := jujuc.NewLeaderGetCommand(jujucContext)
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	runContext := cmdtesting.Context(c)
    65  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, nil)
    66  	c.Check(code, gc.Equals, 1)
    67  	c.Check(jujucContext.called, jc.IsTrue)
    68  	c.Check(bufferString(runContext.Stdout), gc.Equals, "")
    69  	c.Check(bufferString(runContext.Stderr), gc.Equals, "ERROR cannot read leadership settings: zap\n")
    70  }
    71  
    72  func (s *leaderGetSuite) TestSettingsFormatDefaultMissingKey(c *gc.C) {
    73  	s.testOutput(c, []string{"unknown"}, "")
    74  }
    75  
    76  func (s *leaderGetSuite) TestSettingsFormatDefaultKey(c *gc.C) {
    77  	s.testOutput(c, []string{"key"}, "value\n")
    78  }
    79  
    80  func (s *leaderGetSuite) TestSettingsFormatDefaultAll(c *gc.C) {
    81  	s.testParseOutput(c, []string{"-"}, jc.YAMLEquals, leaderGetSettings())
    82  }
    83  
    84  func (s *leaderGetSuite) TestSettingsFormatDefaultEmpty(c *gc.C) {
    85  	s.testParseOutput(c, nil, jc.YAMLEquals, leaderGetSettings())
    86  }
    87  
    88  func (s *leaderGetSuite) TestSettingsFormatSmartMissingKey(c *gc.C) {
    89  	s.testOutput(c, []string{"--format", "smart", "unknown"}, "")
    90  }
    91  
    92  func (s *leaderGetSuite) TestSettingsFormatSmartKey(c *gc.C) {
    93  	s.testOutput(c, []string{"--format", "smart", "key"}, "value\n")
    94  }
    95  
    96  func (s *leaderGetSuite) TestSettingsFormatSmartAll(c *gc.C) {
    97  	s.testParseOutput(c, []string{"--format", "smart", "-"}, jc.YAMLEquals, leaderGetSettings())
    98  }
    99  
   100  func (s *leaderGetSuite) TestSettingsFormatSmartEmpty(c *gc.C) {
   101  	s.testParseOutput(c, []string{"--format", "smart"}, jc.YAMLEquals, leaderGetSettings())
   102  }
   103  
   104  func (s *leaderGetSuite) TestSettingsFormatJSONMissingKey(c *gc.C) {
   105  	s.testParseOutput(c, []string{"--format", "json", "unknown"}, jc.JSONEquals, nil)
   106  }
   107  
   108  func (s *leaderGetSuite) TestSettingsFormatJSONKey(c *gc.C) {
   109  	s.testParseOutput(c, []string{"--format", "json", "key"}, jc.JSONEquals, "value")
   110  }
   111  
   112  func (s *leaderGetSuite) TestSettingsFormatJSONAll(c *gc.C) {
   113  	s.testParseOutput(c, []string{"--format", "json", "-"}, jc.JSONEquals, leaderGetSettings())
   114  }
   115  
   116  func (s *leaderGetSuite) TestSettingsFormatJSONEmpty(c *gc.C) {
   117  	s.testParseOutput(c, []string{"--format", "json"}, jc.JSONEquals, leaderGetSettings())
   118  }
   119  
   120  func (s *leaderGetSuite) TestSettingsFormatYAMLMissingKey(c *gc.C) {
   121  	s.testParseOutput(c, []string{"--format", "yaml", "unknown"}, jc.YAMLEquals, nil)
   122  }
   123  
   124  func (s *leaderGetSuite) TestSettingsFormatYAMLKey(c *gc.C) {
   125  	s.testParseOutput(c, []string{"--format", "yaml", "key"}, jc.YAMLEquals, "value")
   126  }
   127  
   128  func (s *leaderGetSuite) TestSettingsFormatYAMLAll(c *gc.C) {
   129  	s.testParseOutput(c, []string{"--format", "yaml", "-"}, jc.YAMLEquals, leaderGetSettings())
   130  }
   131  
   132  func (s *leaderGetSuite) TestSettingsFormatYAMLEmpty(c *gc.C) {
   133  	s.testParseOutput(c, []string{"--format", "yaml"}, jc.YAMLEquals, leaderGetSettings())
   134  }
   135  
   136  func (s *leaderGetSuite) testOutput(c *gc.C, args []string, expect string) {
   137  	s.testParseOutput(c, args, gc.Equals, expect)
   138  }
   139  
   140  func (s *leaderGetSuite) testParseOutput(c *gc.C, args []string, checker gc.Checker, expect interface{}) {
   141  	jujucContext := newLeaderGetContext(nil)
   142  	command, err := jujuc.NewLeaderGetCommand(jujucContext)
   143  	c.Assert(err, jc.ErrorIsNil)
   144  	runContext := cmdtesting.Context(c)
   145  	code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, args)
   146  	c.Check(code, gc.Equals, 0)
   147  	c.Check(jujucContext.called, jc.IsTrue)
   148  	c.Check(bufferString(runContext.Stdout), checker, expect)
   149  	c.Check(bufferString(runContext.Stderr), gc.Equals, "")
   150  }
   151  
   152  func leaderGetSettings() map[string]string {
   153  	return map[string]string{
   154  		"key":    "value",
   155  		"sample": "settings",
   156  	}
   157  }
   158  
   159  func newLeaderGetContext(err error) *leaderGetContext {
   160  	if err != nil {
   161  		return &leaderGetContext{err: err}
   162  	}
   163  	return &leaderGetContext{settings: leaderGetSettings()}
   164  }
   165  
   166  type leaderGetContext struct {
   167  	jujuc.Context
   168  	called   bool
   169  	settings map[string]string
   170  	err      error
   171  }
   172  
   173  func (c *leaderGetContext) LeaderSettings() (map[string]string, error) {
   174  	c.called = true
   175  	return c.settings, c.err
   176  }