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 }