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