فهرست منبع

Merge pull request #6773 from fabiofalci/restart_tests_to_cli

Move `docker restart` tests to integration cli
Michael Crosby 11 سال پیش
والد
کامیت
f91a97256b
2فایلهای تغییر یافته به همراه122 افزوده شده و 75 حذف شده
  1. 122 0
      integration-cli/docker_cli_restart_test.go
  2. 0 75
      integration/container_test.go

+ 122 - 0
integration-cli/docker_cli_restart_test.go

@@ -0,0 +1,122 @@
+package main
+
+import (
+	"os/exec"
+	"strings"
+	"testing"
+)
+
+func TestDockerRestartStoppedContainer(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "echo", "foobar")
+	out, _, err := runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	cleanedContainerID := stripTrailingCharacters(out)
+
+	runCmd = exec.Command(dockerBinary, "wait", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	runCmd = exec.Command(dockerBinary, "logs", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out != "foobar\n" {
+		t.Errorf("container should've printed 'foobar'")
+	}
+
+	runCmd = exec.Command(dockerBinary, "restart", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	runCmd = exec.Command(dockerBinary, "logs", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out != "foobar\nfoobar\n" {
+		t.Errorf("container should've printed 'foobar' twice")
+	}
+
+	deleteAllContainers()
+
+	logDone("restart - echo foobar for stopped container")
+}
+
+func TestDockerRestartRunningContainer(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "sh", "-c", "echo foobar && sleep 30 && echo 'should not print this'")
+	out, _, err := runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	cleanedContainerID := stripTrailingCharacters(out)
+
+	runCmd = exec.Command(dockerBinary, "logs", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out != "foobar\n" {
+		t.Errorf("container should've printed 'foobar'")
+	}
+
+	runCmd = exec.Command(dockerBinary, "restart", "-t", "1", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	runCmd = exec.Command(dockerBinary, "logs", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out != "foobar\nfoobar\n" {
+		t.Errorf("container should've printed 'foobar' twice")
+	}
+
+	deleteAllContainers()
+
+	logDone("restart - echo foobar for running container")
+}
+
+// Test that restarting a container with a volume does not create a new volume on restart. Regression test for #819.
+func TestDockerRestartWithVolumes(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "-d", "-v", "/test", "busybox", "top")
+	out, _, err := runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	cleanedContainerID := stripTrailingCharacters(out)
+
+	runCmd = exec.Command(dockerBinary, "inspect", "--format", "{{ len .Volumes }}", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out = strings.Trim(out, " \n\r"); out != "1" {
+		t.Errorf("expect 1 volume received %s", out)
+	}
+
+	runCmd = exec.Command(dockerBinary, "inspect", "--format", "{{ .Volumes }}", cleanedContainerID)
+	volumes, _, err := runCommandWithOutput(runCmd)
+	errorOut(err, t, volumes)
+
+	runCmd = exec.Command(dockerBinary, "restart", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	runCmd = exec.Command(dockerBinary, "inspect", "--format", "{{ len .Volumes }}", cleanedContainerID)
+	out, _, err = runCommandWithOutput(runCmd)
+	errorOut(err, t, out)
+
+	if out = strings.Trim(out, " \n\r"); out != "1" {
+		t.Errorf("expect 1 volume after restart received %s", out)
+	}
+
+	runCmd = exec.Command(dockerBinary, "inspect", "--format", "{{ .Volumes }}", cleanedContainerID)
+	volumesAfterRestart, _, err := runCommandWithOutput(runCmd)
+	errorOut(err, t, volumesAfterRestart)
+
+	if volumes != volumesAfterRestart {
+		volumes = strings.Trim(volumes, " \n\r")
+		volumesAfterRestart = strings.Trim(volumesAfterRestart, " \n\r")
+		t.Errorf("expected volume path: %s Actual path: %s", volumes, volumesAfterRestart)
+	}
+
+	deleteAllContainers()
+
+	logDone("restart - does not create a new volume on restart")
+}

+ 0 - 75
integration/container_test.go

@@ -71,37 +71,6 @@ func TestKillDifferentUser(t *testing.T) {
 	}
 }
 
-func TestRestart(t *testing.T) {
-	daemon := mkDaemon(t)
-	defer nuke(daemon)
-	container, _, err := daemon.Create(&runconfig.Config{
-		Image: GetTestImage(daemon).ID,
-		Cmd:   []string{"echo", "-n", "foobar"},
-	},
-		"",
-	)
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer daemon.Destroy(container)
-	output, err := container.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-	if string(output) != "foobar" {
-		t.Error(string(output))
-	}
-
-	// Run the container again and check the output
-	output, err = container.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-	if string(output) != "foobar" {
-		t.Error(string(output))
-	}
-}
-
 func TestRestartStdin(t *testing.T) {
 	daemon := mkDaemon(t)
 	defer nuke(daemon)
@@ -526,47 +495,3 @@ func TestBindMounts(t *testing.T) {
 		t.Fatal("Container failed to write to bind mount file")
 	}
 }
-
-// Test that restarting a container with a volume does not create a new volume on restart. Regression test for #819.
-func TestRestartWithVolumes(t *testing.T) {
-	daemon := mkDaemon(t)
-	defer nuke(daemon)
-
-	container, _, err := daemon.Create(&runconfig.Config{
-		Image:   GetTestImage(daemon).ID,
-		Cmd:     []string{"echo", "-n", "foobar"},
-		Volumes: map[string]struct{}{"/test": {}},
-	},
-		"",
-	)
-	if err != nil {
-		t.Fatal(err)
-	}
-	defer daemon.Destroy(container)
-
-	for key := range container.Config.Volumes {
-		if key != "/test" {
-			t.Fail()
-		}
-	}
-
-	_, err = container.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	expected := container.Volumes["/test"]
-	if expected == "" {
-		t.Fail()
-	}
-	// Run the container again to verify the volume path persists
-	_, err = container.Output()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	actual := container.Volumes["/test"]
-	if expected != actual {
-		t.Fatalf("Expected volume path: %s Actual path: %s", expected, actual)
-	}
-}