From 6a931c3590f5a2f274f9ab4c43452939d101a1b5 Mon Sep 17 00:00:00 2001 From: John Howard Date: Wed, 24 Feb 2016 10:17:25 -0800 Subject: [PATCH] Windows CI: Integrity check for busybox top Signed-off-by: John Howard --- integration-cli/docker_api_events_test.go | 2 +- integration-cli/docker_cli_events_test.go | 2 +- integration-cli/docker_cli_inspect_test.go | 16 +++++----- integration-cli/docker_utils.go | 36 ++++++++++++++++++++++ 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/integration-cli/docker_api_events_test.go b/integration-cli/docker_api_events_test.go index 5d6e817f02..cb219fbc56 100644 --- a/integration-cli/docker_api_events_test.go +++ b/integration-cli/docker_api_events_test.go @@ -39,7 +39,7 @@ func (s *DockerSuite) TestEventsApiBackwardsCompatible(c *check.C) { since := daemonTime(c).Unix() ts := strconv.FormatInt(since, 10) - out, _ := dockerCmd(c, "run", "--name=foo", "-d", "busybox", "top") + out, _ := runSleepingContainer(c, "--name=foo", "-d") containerID := strings.TrimSpace(out) c.Assert(waitRun(containerID), checker.IsNil) diff --git a/integration-cli/docker_cli_events_test.go b/integration-cli/docker_cli_events_test.go index 33d9ade9ce..878e2c103f 100644 --- a/integration-cli/docker_cli_events_test.go +++ b/integration-cli/docker_cli_events_test.go @@ -439,7 +439,7 @@ func (s *DockerSuite) TestEventsCopy(c *check.C) { func (s *DockerSuite) TestEventsResize(c *check.C) { since := daemonTime(c).Unix() - out, _ := dockerCmd(c, "run", "-d", "busybox", "top") + out, _ := runSleepingContainer(c, "-d") cID := strings.TrimSpace(out) c.Assert(waitRun(cID), checker.IsNil) diff --git a/integration-cli/docker_cli_inspect_test.go b/integration-cli/docker_cli_inspect_test.go index 9bf167d354..e365350c47 100644 --- a/integration-cli/docker_cli_inspect_test.go +++ b/integration-cli/docker_cli_inspect_test.go @@ -273,7 +273,7 @@ func (s *DockerSuite) TestInspectNoSizeFlagContainer(c *check.C) { //Both the container and image are named busybox. docker inspect will fetch container //JSON SizeRw and SizeRootFs field. If there is no flag --size/-s, there are no size fields. - dockerCmd(c, "run", "--name=busybox", "-d", "busybox", "top") + runSleepingContainer(c, "--name=busybox", "-d") formatStr := "--format='{{.SizeRw}},{{.SizeRootFs}}'" out, _ := dockerCmd(c, "inspect", "--type=container", formatStr, "busybox") @@ -281,7 +281,7 @@ func (s *DockerSuite) TestInspectNoSizeFlagContainer(c *check.C) { } func (s *DockerSuite) TestInspectSizeFlagContainer(c *check.C) { - dockerCmd(c, "run", "--name=busybox", "-d", "busybox", "top") + runSleepingContainer(c, "--name=busybox", "-d") formatStr := "--format='{{.SizeRw}},{{.SizeRootFs}}'" out, _ := dockerCmd(c, "inspect", "-s", "--type=container", formatStr, "busybox") @@ -292,7 +292,7 @@ func (s *DockerSuite) TestInspectSizeFlagContainer(c *check.C) { } func (s *DockerSuite) TestInspectSizeFlagImage(c *check.C) { - dockerCmd(c, "run", "--name=busybox", "-d", "busybox", "top") + runSleepingContainer(c, "-d") formatStr := "--format='{{.SizeRw}},{{.SizeRootFs}}'" out, _, err := dockerCmdWithError("inspect", "-s", "--type=image", formatStr, "busybox") @@ -303,10 +303,10 @@ func (s *DockerSuite) TestInspectSizeFlagImage(c *check.C) { c.Assert(out, checker.Contains, "Template parsing error") } -func (s *DockerSuite) TestInspectTempateError(c *check.C) { +func (s *DockerSuite) TestInspectTemplateError(c *check.C) { // Template parsing error for both the container and image. - dockerCmd(c, "run", "--name=container1", "-d", "busybox", "top") + runSleepingContainer(c, "--name=container1", "-d") out, _, err := dockerCmdWithError("inspect", "--type=container", "--format='Format container: {{.ThisDoesNotExist}}'", "container1") c.Assert(err, check.Not(check.IsNil)) @@ -318,7 +318,7 @@ func (s *DockerSuite) TestInspectTempateError(c *check.C) { } func (s *DockerSuite) TestInspectJSONFields(c *check.C) { - dockerCmd(c, "run", "--name=busybox", "-d", "busybox", "top") + runSleepingContainer(c, "--name=busybox", "-d") out, _, err := dockerCmdWithError("inspect", "--type=container", "--format='{{.HostConfig.Dns}}'", "busybox") c.Assert(err, check.IsNil) @@ -337,8 +337,8 @@ func (s *DockerSuite) TestInspectByPrefix(c *check.C) { } func (s *DockerSuite) TestInspectStopWhenNotFound(c *check.C) { - dockerCmd(c, "run", "--name=busybox", "-d", "busybox", "top") - dockerCmd(c, "run", "--name=not-shown", "-d", "busybox", "top") + runSleepingContainer(c, "--name=busybox", "-d") + runSleepingContainer(c, "--name=not-shown", "-d") out, _, err := dockerCmdWithError("inspect", "--type=container", "--format='{{.Name}}'", "busybox", "missing", "not-shown") c.Assert(err, checker.Not(check.IsNil)) diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 5c7fe04fa6..616bbec291 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -872,32 +872,68 @@ func pullImageIfNotExist(image string) error { } func dockerCmdWithError(args ...string) (string, int, error) { + if err := validateArgs(args...); err != nil { + return "", 0, err + } return integration.DockerCmdWithError(dockerBinary, args...) } func dockerCmdWithStdoutStderr(c *check.C, args ...string) (string, string, int) { + if err := validateArgs(args...); err != nil { + c.Fatalf(err.Error()) + } return integration.DockerCmdWithStdoutStderr(dockerBinary, c, args...) } func dockerCmd(c *check.C, args ...string) (string, int) { + if err := validateArgs(args...); err != nil { + c.Fatalf(err.Error()) + } return integration.DockerCmd(dockerBinary, c, args...) } // execute a docker command with a timeout func dockerCmdWithTimeout(timeout time.Duration, args ...string) (string, int, error) { + if err := validateArgs(args...); err != nil { + return "", 0, err + } return integration.DockerCmdWithTimeout(dockerBinary, timeout, args...) } // execute a docker command in a directory func dockerCmdInDir(c *check.C, path string, args ...string) (string, int, error) { + if err := validateArgs(args...); err != nil { + c.Fatalf(err.Error()) + } return integration.DockerCmdInDir(dockerBinary, path, args...) } // execute a docker command in a directory with a timeout func dockerCmdInDirWithTimeout(timeout time.Duration, path string, args ...string) (string, int, error) { + if err := validateArgs(args...); err != nil { + return "", 0, err + } return integration.DockerCmdInDirWithTimeout(dockerBinary, timeout, path, args...) } +// validateArgs is a checker to ensure tests are not running commands which are +// not supported on platforms. Specifically on Windows this is 'busybox top'. +func validateArgs(args ...string) error { + if daemonPlatform != "windows" { + return nil + } + foundBusybox := -1 + for key, value := range args { + if strings.ToLower(value) == "busybox" { + foundBusybox = key + } + if (foundBusybox != -1) && (key == foundBusybox+1) && (strings.ToLower(value) == "top") { + return errors.New("Cannot use 'busybox top' in tests on Windows. Use runSleepingContainer()") + } + } + return nil +} + // find the State.ExitCode in container metadata func findContainerExitCode(c *check.C, name string, vargs ...string) string { args := append(vargs, "inspect", "--format='{{ .State.ExitCode }} {{ .State.Error }}'", name)