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