github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/runner/jujuc/leader-set_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 jujutesting "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/worker/uniter/runner/jujuc" 15 ) 16 17 type leaderSetSuite struct { 18 jujutesting.IsolationSuite 19 command cmd.Command 20 } 21 22 var _ = gc.Suite(&leaderSetSuite{}) 23 24 func (s *leaderSetSuite) SetUpTest(c *gc.C) { 25 var err error 26 s.command, err = jujuc.NewLeaderSetCommand(nil) 27 c.Assert(err, jc.ErrorIsNil) 28 s.command = jujuc.NewJujucCommandWrappedForTest(s.command) 29 } 30 31 func (s *leaderSetSuite) TestInitEmpty(c *gc.C) { 32 err := s.command.Init(nil) 33 c.Check(err, jc.ErrorIsNil) 34 } 35 36 func (s *leaderSetSuite) TestInitValues(c *gc.C) { 37 err := s.command.Init([]string{"foo=bar", "baz=qux"}) 38 c.Check(err, jc.ErrorIsNil) 39 } 40 41 func (s *leaderSetSuite) TestInitError(c *gc.C) { 42 err := s.command.Init([]string{"nonsense"}) 43 c.Check(err, gc.ErrorMatches, `expected "key=value", got "nonsense"`) 44 } 45 46 func (s *leaderSetSuite) TestWriteEmpty(c *gc.C) { 47 jujucContext := &leaderSetContext{} 48 command, err := jujuc.NewLeaderSetCommand(jujucContext) 49 c.Assert(err, jc.ErrorIsNil) 50 runContext := cmdtesting.Context(c) 51 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, nil) 52 c.Check(code, gc.Equals, 0) 53 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{}) 54 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 55 c.Check(bufferString(runContext.Stderr), gc.Equals, "") 56 } 57 58 func (s *leaderSetSuite) TestWriteValues(c *gc.C) { 59 jujucContext := &leaderSetContext{} 60 command, err := jujuc.NewLeaderSetCommand(jujucContext) 61 c.Assert(err, jc.ErrorIsNil) 62 runContext := cmdtesting.Context(c) 63 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, []string{"foo=bar", "baz=qux"}) 64 c.Check(code, gc.Equals, 0) 65 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{ 66 "foo": "bar", 67 "baz": "qux", 68 }) 69 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 70 c.Check(bufferString(runContext.Stderr), gc.Equals, "") 71 } 72 73 func (s *leaderSetSuite) TestWriteError(c *gc.C) { 74 jujucContext := &leaderSetContext{err: errors.New("splat")} 75 command, err := jujuc.NewLeaderSetCommand(jujucContext) 76 c.Assert(err, jc.ErrorIsNil) 77 runContext := cmdtesting.Context(c) 78 code := cmd.Main(jujuc.NewJujucCommandWrappedForTest(command), runContext, []string{"foo=bar"}) 79 c.Check(code, gc.Equals, 1) 80 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{"foo": "bar"}) 81 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 82 c.Check(bufferString(runContext.Stderr), gc.Equals, "ERROR cannot write leadership settings: splat\n") 83 } 84 85 type leaderSetContext struct { 86 jujuc.Context 87 gotSettings map[string]string 88 err error 89 } 90 91 func (s *leaderSetContext) WriteLeaderSettings(settings map[string]string) error { 92 s.gotSettings = settings 93 return s.err 94 }