github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/environment/set_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package environment_test 5 6 import ( 7 "github.com/juju/cmd" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/apiserver/common" 12 "github.com/juju/juju/cmd/envcmd" 13 "github.com/juju/juju/cmd/juju/environment" 14 "github.com/juju/juju/testing" 15 ) 16 17 type SetSuite struct { 18 fakeEnvSuite 19 } 20 21 var _ = gc.Suite(&SetSuite{}) 22 23 func (s *SetSuite) run(c *gc.C, args ...string) (*cmd.Context, error) { 24 command := environment.NewSetCommand(s.fake) 25 return testing.RunCommand(c, envcmd.Wrap(command), args...) 26 } 27 28 func (s *SetSuite) TestInit(c *gc.C) { 29 for i, test := range []struct { 30 args []string 31 errorMatch string 32 }{ 33 { 34 errorMatch: "no key, value pairs specified", 35 }, { 36 args: []string{"special"}, 37 errorMatch: `expected "key=value", got "special"`, 38 }, { 39 args: []string{"special=extra", "special=other"}, 40 errorMatch: `key "special" specified more than once`, 41 }, { 42 args: []string{"agent-version=2.0.0"}, 43 errorMatch: "agent-version must be set via upgrade-juju", 44 }, 45 } { 46 c.Logf("test %d", i) 47 setCmd := &environment.SetCommand{} 48 err := testing.InitCommand(setCmd, test.args) 49 c.Check(err, gc.ErrorMatches, test.errorMatch) 50 } 51 } 52 53 func (s *SetSuite) TestPassesValues(c *gc.C) { 54 _, err := s.run(c, "special=extra", "unknown=foo") 55 c.Assert(err, jc.ErrorIsNil) 56 expected := map[string]interface{}{ 57 "special": "extra", 58 "unknown": "foo", 59 } 60 c.Assert(s.fake.values, jc.DeepEquals, expected) 61 } 62 63 func (s *SetSuite) TestSettingKnownValue(c *gc.C) { 64 _, err := s.run(c, "special=extra", "unknown=foo") 65 c.Assert(err, jc.ErrorIsNil) 66 // Command succeeds, but warning logged. 67 expected := `key "unknown" is not defined in the current environment configuration: possible misspelling` 68 c.Check(c.GetTestLog(), jc.Contains, expected) 69 } 70 71 func (s *SetSuite) TestBlockedError(c *gc.C) { 72 s.fake.err = common.ErrOperationBlocked("TestBlockedError") 73 _, err := s.run(c, "special=extra") 74 c.Assert(err, gc.Equals, cmd.ErrSilent) 75 // msg is logged 76 c.Check(c.GetTestLog(), jc.Contains, "TestBlockedError") 77 }