瀏覽代碼

Merge pull request #19603 from Microsoft/jjh/testps

Windows CI: Address simple failures in TestPS*
Arnaud Porterie 9 年之前
父節點
當前提交
51d4d8eff2
共有 1 個文件被更改,包括 41 次插入31 次删除
  1. 41 31
      integration-cli/docker_cli_ps_test.go

+ 41 - 31
integration-cli/docker_cli_ps_test.go

@@ -16,7 +16,16 @@ import (
 	"github.com/go-check/check"
 	"github.com/go-check/check"
 )
 )
 
 
+var sleepCmd = "/bin/sleep"
+
+func init() {
+	if daemonPlatform == "windows" {
+		sleepCmd = "sleep"
+	}
+}
+
 func (s *DockerSuite) TestPsListContainersBase(c *check.C) {
 func (s *DockerSuite) TestPsListContainersBase(c *check.C) {
+	// Problematic on Windows as busybox doesn't support top
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
 	out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
 	firstID := strings.TrimSpace(out)
 	firstID := strings.TrimSpace(out)
@@ -127,6 +136,7 @@ func assertContainerList(out string, expected []string) bool {
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersSize(c *check.C) {
 func (s *DockerSuite) TestPsListContainersSize(c *check.C) {
+	// Problematic on Windows as it doesn't report the size correctly @swernli
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	dockerCmd(c, "run", "-d", "busybox", "echo", "hello")
 	dockerCmd(c, "run", "-d", "busybox", "echo", "hello")
 
 
@@ -168,8 +178,6 @@ func (s *DockerSuite) TestPsListContainersSize(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) {
-	testRequires(c, DaemonIsLinux)
-
 	// start exited container
 	// start exited container
 	out, _ := dockerCmd(c, "run", "-d", "busybox")
 	out, _ := dockerCmd(c, "run", "-d", "busybox")
 	firstID := strings.TrimSpace(out)
 	firstID := strings.TrimSpace(out)
@@ -193,26 +201,28 @@ func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) {
 	out, _, _ = dockerCmdWithTimeout(time.Second*60, "ps", "-a", "-q", "--filter=status=rubbish")
 	out, _, _ = dockerCmdWithTimeout(time.Second*60, "ps", "-a", "-q", "--filter=status=rubbish")
 	c.Assert(out, checker.Contains, "Unrecognised filter value for status", check.Commentf("Expected error response due to invalid status filter output: %q", out))
 	c.Assert(out, checker.Contains, "Unrecognised filter value for status", check.Commentf("Expected error response due to invalid status filter output: %q", out))
 
 
-	// pause running container
-	out, _ = dockerCmd(c, "run", "-itd", "busybox")
-	pausedID := strings.TrimSpace(out)
-	dockerCmd(c, "pause", pausedID)
-	// make sure the container is unpaused to let the daemon stop it properly
-	defer func() { dockerCmd(c, "unpause", pausedID) }()
-
-	out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=paused")
-	containerOut = strings.TrimSpace(out)
-	c.Assert(containerOut, checker.Equals, pausedID)
+	// Windows doesn't support pausing of containers
+	if daemonPlatform != "windows" {
+		// pause running container
+		out, _ = dockerCmd(c, "run", "-itd", "busybox")
+		pausedID := strings.TrimSpace(out)
+		dockerCmd(c, "pause", pausedID)
+		// make sure the container is unpaused to let the daemon stop it properly
+		defer func() { dockerCmd(c, "unpause", pausedID) }()
+
+		out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=paused")
+		containerOut = strings.TrimSpace(out)
+		c.Assert(containerOut, checker.Equals, pausedID)
+	}
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// start container
 	// start container
 	out, _ := dockerCmd(c, "run", "-d", "busybox")
 	out, _ := dockerCmd(c, "run", "-d", "busybox")
 	firstID := strings.TrimSpace(out)
 	firstID := strings.TrimSpace(out)
 
 
 	// start another container
 	// start another container
-	dockerCmd(c, "run", "-d", "busybox", "top")
+	dockerCmd(c, "run", "-d", "busybox", sleepCmd, "60")
 
 
 	// filter containers by id
 	// filter containers by id
 	out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=id="+firstID)
 	out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=id="+firstID)
@@ -222,13 +232,12 @@ func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterName(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterName(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// start container
 	// start container
 	out, _ := dockerCmd(c, "run", "-d", "--name=a_name_to_match", "busybox")
 	out, _ := dockerCmd(c, "run", "-d", "--name=a_name_to_match", "busybox")
 	firstID := strings.TrimSpace(out)
 	firstID := strings.TrimSpace(out)
 
 
 	// start another container
 	// start another container
-	dockerCmd(c, "run", "-d", "--name=b_name_to_match", "busybox", "top")
+	dockerCmd(c, "run", "-d", "--name=b_name_to_match", "busybox", sleepCmd, "60")
 
 
 	// filter containers by name
 	// filter containers by name
 	out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=name=a_name_to_match")
 	out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=name=a_name_to_match")
@@ -246,7 +255,6 @@ func (s *DockerSuite) TestPsListContainersFilterName(c *check.C) {
 // - Run containers for each of those image (busybox, images_ps_filter_test1, images_ps_filter_test2)
 // - Run containers for each of those image (busybox, images_ps_filter_test1, images_ps_filter_test2)
 // - Filter them out :P
 // - Filter them out :P
 func (s *DockerSuite) TestPsListContainersFilterAncestorImage(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterAncestorImage(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// Build images
 	// Build images
 	imageName1 := "images_ps_filter_test1"
 	imageName1 := "images_ps_filter_test1"
 	imageID1, err := buildImage(imageName1,
 	imageID1, err := buildImage(imageName1,
@@ -342,7 +350,6 @@ func checkPsAncestorFilterOutput(c *check.C, out string, filterName string, expe
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterLabel(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterLabel(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// start container
 	// start container
 	out, _ := dockerCmd(c, "run", "-d", "-l", "match=me", "-l", "second=tag", "busybox")
 	out, _ := dockerCmd(c, "run", "-d", "-l", "match=me", "-l", "second=tag", "busybox")
 	firstID := strings.TrimSpace(out)
 	firstID := strings.TrimSpace(out)
@@ -379,8 +386,9 @@ func (s *DockerSuite) TestPsListContainersFilterLabel(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterExited(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterExited(c *check.C) {
+	// TODO Windows CI: Enable for TP5. Fails on TP4
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
-	dockerCmd(c, "run", "-d", "--name", "top", "busybox", "top")
+	dockerCmd(c, "run", "-d", "--name", "sleep", "busybox", sleepCmd, "60")
 
 
 	dockerCmd(c, "run", "--name", "zero1", "busybox", "true")
 	dockerCmd(c, "run", "--name", "zero1", "busybox", "true")
 	firstZero, err := getIDByName("zero1")
 	firstZero, err := getIDByName("zero1")
@@ -417,16 +425,17 @@ func (s *DockerSuite) TestPsListContainersFilterExited(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsRightTagName(c *check.C) {
 func (s *DockerSuite) TestPsRightTagName(c *check.C) {
+	// TODO Investigate further why this fails on Windows to Windows CI
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	tag := "asybox:shmatest"
 	tag := "asybox:shmatest"
 	dockerCmd(c, "tag", "busybox", tag)
 	dockerCmd(c, "tag", "busybox", tag)
 
 
 	var id1 string
 	var id1 string
-	out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
+	out, _ := dockerCmd(c, "run", "-d", "busybox", sleepCmd, "60")
 	id1 = strings.TrimSpace(string(out))
 	id1 = strings.TrimSpace(string(out))
 
 
 	var id2 string
 	var id2 string
-	out, _ = dockerCmd(c, "run", "-d", tag, "top")
+	out, _ = dockerCmd(c, "run", "-d", tag, sleepCmd, "60")
 	id2 = strings.TrimSpace(string(out))
 	id2 = strings.TrimSpace(string(out))
 
 
 	var imageID string
 	var imageID string
@@ -434,7 +443,7 @@ func (s *DockerSuite) TestPsRightTagName(c *check.C) {
 	imageID = strings.TrimSpace(string(out))
 	imageID = strings.TrimSpace(string(out))
 
 
 	var id3 string
 	var id3 string
-	out, _ = dockerCmd(c, "run", "-d", imageID, "top")
+	out, _ = dockerCmd(c, "run", "-d", imageID, sleepCmd, "60")
 	id3 = strings.TrimSpace(string(out))
 	id3 = strings.TrimSpace(string(out))
 
 
 	out, _ = dockerCmd(c, "ps", "--no-trunc")
 	out, _ = dockerCmd(c, "ps", "--no-trunc")
@@ -458,9 +467,10 @@ func (s *DockerSuite) TestPsRightTagName(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsLinkedWithNoTrunc(c *check.C) {
 func (s *DockerSuite) TestPsLinkedWithNoTrunc(c *check.C) {
+	// Problematic on Windows as it doesn't support links as of Jan 2016
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
-	dockerCmd(c, "run", "--name=first", "-d", "busybox", "top")
-	dockerCmd(c, "run", "--name=second", "--link=first:first", "-d", "busybox", "top")
+	dockerCmd(c, "run", "--name=first", "-d", "busybox", sleepCmd, "60")
+	dockerCmd(c, "run", "--name=second", "--link=first:first", "-d", "busybox", sleepCmd, "60")
 
 
 	out, _ := dockerCmd(c, "ps", "--no-trunc")
 	out, _ := dockerCmd(c, "ps", "--no-trunc")
 	lines := strings.Split(strings.TrimSpace(string(out)), "\n")
 	lines := strings.Split(strings.TrimSpace(string(out)), "\n")
@@ -476,6 +486,7 @@ func (s *DockerSuite) TestPsLinkedWithNoTrunc(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsGroupPortRange(c *check.C) {
 func (s *DockerSuite) TestPsGroupPortRange(c *check.C) {
+	// Problematic on Windows as it doesn't support port ranges as of Jan 2016
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	portRange := "3800-3900"
 	portRange := "3800-3900"
 	dockerCmd(c, "run", "-d", "--name", "porttest", "-p", portRange+":"+portRange, "busybox", "top")
 	dockerCmd(c, "run", "-d", "--name", "porttest", "-p", portRange+":"+portRange, "busybox", "top")
@@ -487,6 +498,7 @@ func (s *DockerSuite) TestPsGroupPortRange(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsWithSize(c *check.C) {
 func (s *DockerSuite) TestPsWithSize(c *check.C) {
+	// Problematic on Windows as it doesn't report the size correctly @swernli
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	dockerCmd(c, "run", "-d", "--name", "sizetest", "busybox", "top")
 	dockerCmd(c, "run", "-d", "--name", "sizetest", "busybox", "top")
 
 
@@ -495,7 +507,6 @@ func (s *DockerSuite) TestPsWithSize(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsListContainersFilterCreated(c *check.C) {
 func (s *DockerSuite) TestPsListContainersFilterCreated(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// create a container
 	// create a container
 	out, _ := dockerCmd(c, "create", "busybox")
 	out, _ := dockerCmd(c, "create", "busybox")
 	cID := strings.TrimSpace(out)
 	cID := strings.TrimSpace(out)
@@ -526,6 +537,7 @@ func (s *DockerSuite) TestPsListContainersFilterCreated(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsFormatMultiNames(c *check.C) {
 func (s *DockerSuite) TestPsFormatMultiNames(c *check.C) {
+	// Problematic on Windows as it doesn't support link as of Jan 2016
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
 	//create 2 containers and link them
 	//create 2 containers and link them
 	dockerCmd(c, "run", "--name=child", "-d", "busybox", "top")
 	dockerCmd(c, "run", "--name=child", "-d", "busybox", "top")
@@ -554,19 +566,17 @@ func (s *DockerSuite) TestPsFormatMultiNames(c *check.C) {
 }
 }
 
 
 func (s *DockerSuite) TestPsFormatHeaders(c *check.C) {
 func (s *DockerSuite) TestPsFormatHeaders(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	// make sure no-container "docker ps" still prints the header row
 	// make sure no-container "docker ps" still prints the header row
 	out, _ := dockerCmd(c, "ps", "--format", "table {{.ID}}")
 	out, _ := dockerCmd(c, "ps", "--format", "table {{.ID}}")
 	c.Assert(out, checker.Equals, "CONTAINER ID\n", check.Commentf(`Expected 'CONTAINER ID\n', got %v`, out))
 	c.Assert(out, checker.Equals, "CONTAINER ID\n", check.Commentf(`Expected 'CONTAINER ID\n', got %v`, out))
 
 
 	// verify that "docker ps" with a container still prints the header row also
 	// verify that "docker ps" with a container still prints the header row also
-	dockerCmd(c, "run", "--name=test", "-d", "busybox", "top")
+	dockerCmd(c, "run", "--name=test", "-d", "busybox", sleepCmd, "60")
 	out, _ = dockerCmd(c, "ps", "--format", "table {{.Names}}")
 	out, _ = dockerCmd(c, "ps", "--format", "table {{.Names}}")
 	c.Assert(out, checker.Equals, "NAMES\ntest\n", check.Commentf(`Expected 'NAMES\ntest\n', got %v`, out))
 	c.Assert(out, checker.Equals, "NAMES\ntest\n", check.Commentf(`Expected 'NAMES\ntest\n', got %v`, out))
 }
 }
 
 
 func (s *DockerSuite) TestPsDefaultFormatAndQuiet(c *check.C) {
 func (s *DockerSuite) TestPsDefaultFormatAndQuiet(c *check.C) {
-	testRequires(c, DaemonIsLinux)
 	config := `{
 	config := `{
 		"psFormat": "default {{ .ID }}"
 		"psFormat": "default {{ .ID }}"
 }`
 }`
@@ -577,7 +587,7 @@ func (s *DockerSuite) TestPsDefaultFormatAndQuiet(c *check.C) {
 	err = ioutil.WriteFile(filepath.Join(d, "config.json"), []byte(config), 0644)
 	err = ioutil.WriteFile(filepath.Join(d, "config.json"), []byte(config), 0644)
 	c.Assert(err, checker.IsNil)
 	c.Assert(err, checker.IsNil)
 
 
-	out, _ := dockerCmd(c, "run", "--name=test", "-d", "busybox", "top")
+	out, _ := dockerCmd(c, "run", "--name=test", "-d", "busybox", sleepCmd, "60")
 	id := strings.TrimSpace(out)
 	id := strings.TrimSpace(out)
 
 
 	out, _ = dockerCmd(c, "--config", d, "ps", "-q")
 	out, _ = dockerCmd(c, "--config", d, "ps", "-q")
@@ -586,8 +596,8 @@ func (s *DockerSuite) TestPsDefaultFormatAndQuiet(c *check.C) {
 
 
 // Test for GitHub issue #12595
 // Test for GitHub issue #12595
 func (s *DockerSuite) TestPsImageIDAfterUpdate(c *check.C) {
 func (s *DockerSuite) TestPsImageIDAfterUpdate(c *check.C) {
+	// TODO: Investigate why this fails on Windows to Windows CI further.
 	testRequires(c, DaemonIsLinux)
 	testRequires(c, DaemonIsLinux)
-
 	originalImageName := "busybox:TestPsImageIDAfterUpdate-original"
 	originalImageName := "busybox:TestPsImageIDAfterUpdate-original"
 	updatedImageName := "busybox:TestPsImageIDAfterUpdate-updated"
 	updatedImageName := "busybox:TestPsImageIDAfterUpdate-updated"
 
 
@@ -598,7 +608,7 @@ func (s *DockerSuite) TestPsImageIDAfterUpdate(c *check.C) {
 	originalImageID, err := getIDByName(originalImageName)
 	originalImageID, err := getIDByName(originalImageName)
 	c.Assert(err, checker.IsNil)
 	c.Assert(err, checker.IsNil)
 
 
-	runCmd = exec.Command(dockerBinary, "run", "-d", originalImageName, "top")
+	runCmd = exec.Command(dockerBinary, "run", "-d", originalImageName, sleepCmd, "60")
 	out, _, err = runCommandWithOutput(runCmd)
 	out, _, err = runCommandWithOutput(runCmd)
 	c.Assert(err, checker.IsNil)
 	c.Assert(err, checker.IsNil)
 	containerID := strings.TrimSpace(out)
 	containerID := strings.TrimSpace(out)