From c382a20d9bcac0fc5d6248be3148f2cb4a1270a8 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Sun, 31 Aug 2014 01:18:15 -0700 Subject: [PATCH 1/2] docker top: fix command when multiple arguments are supplied Docker-DCO-1.1-Signed-off-by: Erik Hollensbe (github: erikh) Upstream-commit: 394a6d3154fe810565ddc5619447c8a82e7ce38c Component: engine --- components/engine/daemon/top.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/engine/daemon/top.go b/components/engine/daemon/top.go index ceaeea157e..f7b981d10a 100644 --- a/components/engine/daemon/top.go +++ b/components/engine/daemon/top.go @@ -29,7 +29,7 @@ func (daemon *Daemon) ContainerTop(job *engine.Job) engine.Status { if err != nil { return job.Error(err) } - output, err := exec.Command("ps", psArgs).Output() + output, err := exec.Command("ps", strings.Split(psArgs, " ")...).Output() if err != nil { return job.Errorf("Error running ps: %s", err) } From e16ec47eebce16066ed75022658c4cf2de7badb9 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Sun, 31 Aug 2014 05:53:05 -0700 Subject: [PATCH 2/2] Add a test for the multiple arguments passed to `docker top` Docker-DCO-1.1-Signed-off-by: Erik Hollensbe (github: erikh) Upstream-commit: d7dd35bbd6250fcf42f8fe6521a55813e670f805 Component: engine --- .../integration-cli/docker_cli_top_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/components/engine/integration-cli/docker_cli_top_test.go b/components/engine/integration-cli/docker_cli_top_test.go index 6535473430..fde90bf7e7 100644 --- a/components/engine/integration-cli/docker_cli_top_test.go +++ b/components/engine/integration-cli/docker_cli_top_test.go @@ -7,6 +7,25 @@ import ( "testing" ) +func TestTopMultipleArgs(t *testing.T) { + runCmd := exec.Command(dockerBinary, "run", "-i", "-d", "busybox", "sleep", "20") + out, _, err := runCommandWithOutput(runCmd) + errorOut(err, t, fmt.Sprintf("failed to start the container: %v", err)) + + cleanedContainerID := stripTrailingCharacters(out) + defer deleteContainer(cleanedContainerID) + + topCmd := exec.Command(dockerBinary, "top", cleanedContainerID, "-o", "pid") + out, _, err = runCommandWithOutput(topCmd) + errorOut(err, t, fmt.Sprintf("failed to run top: %v %v", out, err)) + + if !strings.Contains(out, "PID") { + errorOut(nil, t, fmt.Sprintf("did not see PID after top -o pid")) + } + + logDone("top - multiple arguments") +} + func TestTopNonPrivileged(t *testing.T) { runCmd := exec.Command(dockerBinary, "run", "-i", "-d", "busybox", "sleep", "20") out, _, err := runCommandWithOutput(runCmd)