From 87255b6721f4dc02ae34696f2013537fdc967a99 Mon Sep 17 00:00:00 2001 From: Doug Davis Date: Tue, 8 Sep 2015 14:19:27 -0700 Subject: [PATCH] Add --help to "docker volume inspect --help" output Closes #16146 While in there, modified the testing infrastructure for the help text so that we can get commands with nested commands - like "volume". Signed-off-by: Doug Davis --- api/client/volume.go | 11 +++++---- integration-cli/docker_cli_help_test.go | 32 +++++++++++++++++++------ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/api/client/volume.go b/api/client/volume.go index e29060e449..740f3d7b7a 100644 --- a/api/client/volume.go +++ b/api/client/volume.go @@ -32,7 +32,7 @@ func (cli *DockerCli) CmdVolume(args ...string) error { description += fmt.Sprintf(" %-25.25s%s\n", cmd[0], cmd[1]) } - description += "\nRun 'docker volume COMMAND --help' for more information on a command." + description += "\nRun 'docker volume COMMAND --help' for more information on a command" cmd := Cli.Subcmd("volume", []string{"[COMMAND]"}, description, true) cmd.Require(flag.Exact, 0) cmd.ParseFlags(args, true) @@ -103,14 +103,15 @@ func (cli *DockerCli) CmdVolumeLs(args ...string) error { // Usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...] func (cli *DockerCli) CmdVolumeInspect(args ...string) error { cmd := Cli.Subcmd("volume inspect", []string{"VOLUME [VOLUME...]"}, "Return low-level information on a volume", true) - tmplStr := cmd.String([]string{"f", "-format"}, "", "Format the output using the given go template.") - if err := cmd.Parse(args); err != nil { - return nil - } + tmplStr := cmd.String([]string{"f", "-format"}, "", "Format the output using the given go template") cmd.Require(flag.Min, 1) cmd.ParseFlags(args, true) + if err := cmd.Parse(args); err != nil { + return nil + } + var tmpl *template.Template if *tmplStr != "" { var err error diff --git a/integration-cli/docker_cli_help_test.go b/integration-cli/docker_cli_help_test.go index 517150e162..2cbb6eef6c 100644 --- a/integration-cli/docker_cli_help_test.go +++ b/integration-cli/docker_cli_help_test.go @@ -101,9 +101,10 @@ func (s *DockerSuite) TestHelpTextVerify(c *check.C) { // Skip first line helpOut = helpOut[1:] } - for _, cmd := range helpOut { - var stderr string + // Create the list of commands we want to test + cmdsToTest := []string{} + for _, cmd := range helpOut { // Stop on blank line or non-idented line if cmd == "" || !unicode.IsSpace(rune(cmd[0])) { break @@ -111,10 +112,25 @@ func (s *DockerSuite) TestHelpTextVerify(c *check.C) { // Grab just the first word of each line cmd = strings.Split(strings.TrimSpace(cmd), " ")[0] - cmds = append(cmds, cmd) + cmds = append(cmds, cmd) // Saving count for later + + cmdsToTest = append(cmdsToTest, cmd) + } + + // Add some 'two word' commands - would be nice to automatically + // calculate this list - somehow + cmdsToTest = append(cmdsToTest, "volume create") + cmdsToTest = append(cmdsToTest, "volume inspect") + cmdsToTest = append(cmdsToTest, "volume ls") + cmdsToTest = append(cmdsToTest, "volume rm") + + for _, cmd := range cmdsToTest { + var stderr string + + args := strings.Split(cmd+" --help", " ") // Check the full usage text - helpCmd := exec.Command(dockerBinary, cmd, "--help") + helpCmd := exec.Command(dockerBinary, args...) helpCmd.Env = newEnvs out, stderr, ec, err = runCommandWithStdoutStderr(helpCmd) if len(stderr) != 0 { @@ -168,7 +184,9 @@ func (s *DockerSuite) TestHelpTextVerify(c *check.C) { // For each command make sure we generate an error // if we give a bad arg - dCmd := exec.Command(dockerBinary, cmd, "--badArg") + args = strings.Split(cmd+" --badArg", " ") + + dCmd := exec.Command(dockerBinary, args...) out, stderr, ec, err = runCommandWithStdoutStderr(dCmd) if len(out) != 0 || len(stderr) == 0 || ec == 0 || err == nil { c.Fatalf("Bad results from 'docker %s --badArg'\nec:%d\nstdout:%s\nstderr:%s\nerr:%q", cmd, ec, out, stderr, err) @@ -209,14 +227,14 @@ func (s *DockerSuite) TestHelpTextVerify(c *check.C) { ec = 0 if _, ok := skipNoArgs[cmd]; !ok { - args = []string{cmd} + args = strings.Split(cmd, " ") dCmd = exec.Command(dockerBinary, args...) stdout, stderr, ec, err = runCommandWithStdoutStderr(dCmd) } // If its ok w/o any args then try again with an arg if ec == 0 { - args = []string{cmd, "badArg"} + args = strings.Split(cmd+" badArg", " ") dCmd = exec.Command(dockerBinary, args...) stdout, stderr, ec, err = runCommandWithStdoutStderr(dCmd) }