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 }