github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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/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 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 } 29 30 func (s *leaderSetSuite) TestInitEmpty(c *gc.C) { 31 err := s.command.Init(nil) 32 c.Check(err, jc.ErrorIsNil) 33 } 34 35 func (s *leaderSetSuite) TestInitValues(c *gc.C) { 36 err := s.command.Init([]string{"foo=bar", "baz=qux"}) 37 c.Check(err, jc.ErrorIsNil) 38 } 39 40 func (s *leaderSetSuite) TestInitError(c *gc.C) { 41 err := s.command.Init([]string{"nonsense"}) 42 c.Check(err, gc.ErrorMatches, `expected "key=value", got "nonsense"`) 43 } 44 45 func (s *leaderSetSuite) TestWriteEmpty(c *gc.C) { 46 jujucContext := &leaderSetContext{} 47 command, err := jujuc.NewLeaderSetCommand(jujucContext) 48 c.Assert(err, jc.ErrorIsNil) 49 runContext := testing.Context(c) 50 code := cmd.Main(command, runContext, nil) 51 c.Check(code, gc.Equals, 0) 52 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{}) 53 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 54 c.Check(bufferString(runContext.Stderr), gc.Equals, "") 55 } 56 57 func (s *leaderSetSuite) TestWriteValues(c *gc.C) { 58 jujucContext := &leaderSetContext{} 59 command, err := jujuc.NewLeaderSetCommand(jujucContext) 60 c.Assert(err, jc.ErrorIsNil) 61 runContext := testing.Context(c) 62 code := cmd.Main(command, runContext, []string{"foo=bar", "baz=qux"}) 63 c.Check(code, gc.Equals, 0) 64 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{ 65 "foo": "bar", 66 "baz": "qux", 67 }) 68 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 69 c.Check(bufferString(runContext.Stderr), gc.Equals, "") 70 } 71 72 func (s *leaderSetSuite) TestWriteError(c *gc.C) { 73 jujucContext := &leaderSetContext{err: errors.New("splat")} 74 command, err := jujuc.NewLeaderSetCommand(jujucContext) 75 c.Assert(err, jc.ErrorIsNil) 76 runContext := testing.Context(c) 77 code := cmd.Main(command, runContext, []string{"foo=bar"}) 78 c.Check(code, gc.Equals, 1) 79 c.Check(jujucContext.gotSettings, jc.DeepEquals, map[string]string{"foo": "bar"}) 80 c.Check(bufferString(runContext.Stdout), gc.Equals, "") 81 c.Check(bufferString(runContext.Stderr), gc.Equals, "error: cannot write leadership settings: splat\n") 82 } 83 84 type leaderSetContext struct { 85 jujuc.Context 86 gotSettings map[string]string 87 err error 88 } 89 90 func (s *leaderSetContext) WriteLeaderSettings(settings map[string]string) error { 91 s.gotSettings = settings 92 return s.err 93 }