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  }