Просмотр исходного кода

Fix racy integration tests

Do not run containers in the background in the integration tests if you
depend on the run completing.  It is better especially if you just want
to ensure that the run has completed with a `true` to just run in
foreground and use a known name for the container to query it after it
has stopped.

The failures can be reproduced on most machines by giving your dind
container one core and a cpushare.

docker run -c 200 --cpuset 0 -ti --rm --privileged -e
DOCKER_GRAPHDRIVER=vfs docker hack/make.sh binary test-integration-cli

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
Michael Crosby 10 лет назад
Родитель
Сommit
ba5370c116
1 измененных файлов с 14 добавлено и 14 удалено
  1. 14 14
      integration-cli/docker_api_containers_test.go

+ 14 - 14
integration-cli/docker_api_containers_test.go

@@ -16,20 +16,21 @@ func TestContainerApiGetAll(t *testing.T) {
 		t.Fatalf("Cannot query container count: %v", err)
 		t.Fatalf("Cannot query container count: %v", err)
 	}
 	}
 
 
-	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
+	name := "getall"
+	runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "true")
 	out, _, err := runCommandWithOutput(runCmd)
 	out, _, err := runCommandWithOutput(runCmd)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 	}
 	}
 
 
-	testContainerId := stripTrailingCharacters(out)
-
 	body, err := sockRequest("GET", "/containers/json?all=1")
 	body, err := sockRequest("GET", "/containers/json?all=1")
 	if err != nil {
 	if err != nil {
 		t.Fatalf("GET all containers sockRequest failed: %v", err)
 		t.Fatalf("GET all containers sockRequest failed: %v", err)
 	}
 	}
 
 
-	var inspectJSON []map[string]interface{}
+	var inspectJSON []struct {
+		Names []string
+	}
 	if err = json.Unmarshal(body, &inspectJSON); err != nil {
 	if err = json.Unmarshal(body, &inspectJSON); err != nil {
 		t.Fatalf("unable to unmarshal response body: %v", err)
 		t.Fatalf("unable to unmarshal response body: %v", err)
 	}
 	}
@@ -37,8 +38,9 @@ func TestContainerApiGetAll(t *testing.T) {
 	if len(inspectJSON) != startCount+1 {
 	if len(inspectJSON) != startCount+1 {
 		t.Fatalf("Expected %d container(s), %d found (started with: %d)", startCount+1, len(inspectJSON), startCount)
 		t.Fatalf("Expected %d container(s), %d found (started with: %d)", startCount+1, len(inspectJSON), startCount)
 	}
 	}
-	if id, _ := inspectJSON[0]["Id"]; id != testContainerId {
-		t.Fatalf("Container ID mismatch. Expected: %s, received: %s\n", testContainerId, id)
+
+	if actual := inspectJSON[0].Names[0]; actual != "/"+name {
+		t.Fatalf("Container Name mismatch. Expected: %q, received: %q\n", "/"+name, actual)
 	}
 	}
 
 
 	deleteAllContainers()
 	deleteAllContainers()
@@ -47,15 +49,14 @@ func TestContainerApiGetAll(t *testing.T) {
 }
 }
 
 
 func TestContainerApiGetExport(t *testing.T) {
 func TestContainerApiGetExport(t *testing.T) {
-	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "touch", "/test")
+	name := "exportcontainer"
+	runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "touch", "/test")
 	out, _, err := runCommandWithOutput(runCmd)
 	out, _, err := runCommandWithOutput(runCmd)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 	}
 	}
 
 
-	testContainerId := stripTrailingCharacters(out)
-
-	body, err := sockRequest("GET", "/containers/"+testContainerId+"/export")
+	body, err := sockRequest("GET", "/containers/"+name+"/export")
 	if err != nil {
 	if err != nil {
 		t.Fatalf("GET containers/export sockRequest failed: %v", err)
 		t.Fatalf("GET containers/export sockRequest failed: %v", err)
 	}
 	}
@@ -84,15 +85,14 @@ func TestContainerApiGetExport(t *testing.T) {
 }
 }
 
 
 func TestContainerApiGetChanges(t *testing.T) {
 func TestContainerApiGetChanges(t *testing.T) {
-	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "rm", "/etc/passwd")
+	name := "changescontainer"
+	runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "rm", "/etc/passwd")
 	out, _, err := runCommandWithOutput(runCmd)
 	out, _, err := runCommandWithOutput(runCmd)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 		t.Fatalf("Error on container creation: %v, output: %q", err, out)
 	}
 	}
 
 
-	testContainerId := stripTrailingCharacters(out)
-
-	body, err := sockRequest("GET", "/containers/"+testContainerId+"/changes")
+	body, err := sockRequest("GET", "/containers/"+name+"/changes")
 	if err != nil {
 	if err != nil {
 		t.Fatalf("GET containers/changes sockRequest failed: %v", err)
 		t.Fatalf("GET containers/changes sockRequest failed: %v", err)
 	}
 	}