func (s *configCommandSuite) assertSetWarning(c *gc.C, dir string, args []string, w string) { ctx := coretesting.ContextForDir(c, dir) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, append([]string{"dummy-application"}, args...)) c.Check(code, gc.Equals, 0) c.Assert(strings.Replace(c.GetTestLog(), "\n", " ", -1), gc.Matches, ".*WARNING.*"+w+".*") }
func (s *configCommandSuite) TestGetConfigKeyNotFound(c *gc.C) { ctx := coretesting.Context(c) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{"dummy-application", "invalid"}) c.Check(code, gc.Equals, 1) c.Assert(ctx.Stderr.(*bytes.Buffer).String(), gc.Equals, "error: key \"invalid\" not found in \"dummy-application\" application settings.\n") c.Assert(ctx.Stdout.(*bytes.Buffer).String(), gc.Equals, "") }
func (s *configCommandSuite) TestGetConfigKey(c *gc.C) { ctx := coretesting.Context(c) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{"dummy-application", "title"}) c.Check(code, gc.Equals, 0) c.Assert(ctx.Stderr.(*bytes.Buffer).String(), gc.Equals, "") c.Assert(ctx.Stdout.(*bytes.Buffer).String(), gc.Equals, "Nearly There\n") }
func (s *configCommandSuite) TestSetFromStdin(c *gc.C) { s.fake = &fakeApplicationAPI{name: "dummy-application"} ctx := coretesting.Context(c) ctx.Stdin = strings.NewReader("settings:\n username:\n value: world\n") code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{ "dummy-application", "--file", "-"}) c.Check(code, gc.Equals, 0) c.Check(s.fake.config, jc.DeepEquals, "settings:\n username:\n value: world\n") }
func (s *configCommandSuite) TestBlockSetConfig(c *gc.C) { // Block operation s.fake.err = common.OperationBlockedError("TestBlockSetConfig") ctx := coretesting.ContextForDir(c, s.dir) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{ "dummy-application", "--file", "testconfig.yaml"}) c.Check(code, gc.Equals, 1) // msg is logged stripped := strings.Replace(c.GetTestLog(), "\n", "", -1) c.Check(stripped, gc.Matches, ".*TestBlockSetConfig.*") }
func (s *configCommandSuite) TestSetCommandInit(c *gc.C) { // missing args err := coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{}) c.Assert(err, gc.ErrorMatches, "no application name specified") // missing application name err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"name=foo"}) c.Assert(err, gc.ErrorMatches, "no application name specified") // --file path, but no application err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"--file", "testconfig.yaml"}) c.Assert(err, gc.ErrorMatches, "no application name specified") // --file and options specified err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--file", "testconfig.yaml", "bees="}) c.Assert(err, gc.ErrorMatches, "cannot specify --file and key=value arguments simultaneously") // --reset and no config name provided err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--reset"}) c.Assert(err, gc.ErrorMatches, "no configuration options specified") }
func (s *configCommandSuite) TestSetConfig(c *gc.C) { s.assertSetFail(c, s.dir, []string{ "--file", "missing.yaml", }, "error.* "+utils.NoSuchFileErrRegexp+"\n") ctx := coretesting.ContextForDir(c, s.dir) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{ "dummy-application", "--file", "testconfig.yaml"}) c.Check(code, gc.Equals, 0) c.Check(s.fake.config, gc.Equals, yamlConfigValue) }
func (s *configCommandSuite) TestSetCommandInit(c *gc.C) { // missing args err := coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{}) c.Assert(err, gc.ErrorMatches, "no application name specified") // missing application name err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"name=foo"}) c.Assert(err, gc.ErrorMatches, "no application name specified") // --file path, but no application err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"--file", "testconfig.yaml"}) c.Assert(err, gc.ErrorMatches, "no application name specified") // --file and options specified err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--file", "testconfig.yaml", "bees="}) c.Assert(err, gc.ErrorMatches, "cannot specify --file and key=value arguments simultaneously") // --reset and no config name provided err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--reset"}) c.Assert(err, gc.ErrorMatches, "flag needs an argument: --reset") // cannot set and retrieve simultaneously err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "get", "set=value"}) c.Assert(err, gc.ErrorMatches, "cannot set and retrieve values simultaneously") // cannot reset and get simultaneously err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--reset", "reset", "get"}) c.Assert(err, gc.ErrorMatches, "cannot reset and retrieve values simultaneously") // invalid reset keys err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "--reset", "reset,bad=key"}) c.Assert(err, gc.ErrorMatches, `--reset accepts a comma delimited set of keys "a,b,c", received: "bad=key"`) // init too many args fails err = coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"application", "key", "another"}) c.Assert(err, gc.ErrorMatches, "can only retrieve a single value, or all values") }
func (s *configCommandSuite) TestGetConfig(c *gc.C) { for _, t := range getTests { ctx := coretesting.Context(c) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, []string{t.application}) c.Check(code, gc.Equals, 0) c.Assert(ctx.Stderr.(*bytes.Buffer).String(), gc.Equals, "") // round trip via goyaml to avoid being sucked into a quagmire of // map[interface{}]interface{} vs map[string]interface{}. This is // also required if we add json support to this command. buf, err := goyaml.Marshal(t.expected) c.Assert(err, jc.ErrorIsNil) expected := make(map[string]interface{}) err = goyaml.Unmarshal(buf, &expected) c.Assert(err, jc.ErrorIsNil) actual := make(map[string]interface{}) err = goyaml.Unmarshal(ctx.Stdout.(*bytes.Buffer).Bytes(), &actual) c.Assert(err, jc.ErrorIsNil) c.Assert(actual, gc.DeepEquals, expected) } }
func (s *configCommandSuite) TestGetCommandInitWithApplication(c *gc.C) { err := coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"app"}) // everything ok c.Assert(err, jc.ErrorIsNil) }
func (s *configCommandSuite) TestGetCommandInit(c *gc.C) { // missing args err := coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{}) c.Assert(err, gc.ErrorMatches, "no application name specified") }
// assertSetFail sets configuration options and checks the expected error. func (s *configCommandSuite) assertSetFail(c *gc.C, dir string, args []string, err string) { ctx := coretesting.ContextForDir(c, dir) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, append([]string{"dummy-application"}, args...)) c.Check(code, gc.Not(gc.Equals), 0) c.Assert(ctx.Stderr.(*bytes.Buffer).String(), gc.Matches, err) }
// assertSetSuccess sets configuration options and checks the expected settings. func (s *configCommandSuite) assertSetSuccess(c *gc.C, dir string, args []string, expect map[string]interface{}) { ctx := coretesting.ContextForDir(c, dir) code := cmd.Main(application.NewConfigCommandForTest(s.fake), ctx, append([]string{"dummy-application"}, args...)) c.Assert(code, gc.Equals, 0) }
func (s *configCommandSuite) TestGetCommandInitTooManyArgs(c *gc.C) { err := coretesting.InitCommand(application.NewConfigCommandForTest(s.fake), []string{"app", "key", "another"}) c.Assert(err, gc.ErrorMatches, "can only retrieve a single value, or all values") }