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