Explorar o código

Merge pull request #8573 from estesp/integration-test-migrate

Migrate container GET API tests from integration to integration-cli
Victor Vieux %!s(int64=10) %!d(string=hai) anos
pai
achega
a10876d355
Modificáronse 2 ficheiros con 122 adicións e 134 borrados
  1. 122 0
      integration-cli/docker_api_containers_test.go
  2. 0 134
      integration/api_test.go

+ 122 - 0
integration-cli/docker_api_containers_test.go

@@ -0,0 +1,122 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"io"
+	"os/exec"
+	"testing"
+
+	"github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar"
+)
+
+func TestContainerApiGetAll(t *testing.T) {
+	startCount, err := getContainerCount()
+	if err != nil {
+		t.Fatalf("Cannot query container count: %v", err)
+	}
+
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
+	out, _, err := runCommandWithOutput(runCmd)
+	if err != nil {
+		t.Fatalf("Error on container creation: %v, output: %q", err, out)
+	}
+
+	testContainerId := stripTrailingCharacters(out)
+
+	body, err := sockRequest("GET", "/containers/json?all=1")
+	if err != nil {
+		t.Fatalf("GET all containers sockRequest failed: %v", err)
+	}
+
+	var inspectJSON []map[string]interface{}
+	if err = json.Unmarshal(body, &inspectJSON); err != nil {
+		t.Fatalf("unable to unmarshal response body: %v", err)
+	}
+
+	if len(inspectJSON) != startCount+1 {
+		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)
+	}
+
+	deleteAllContainers()
+
+	logDone("container REST API - check GET json/all=1")
+}
+
+func TestContainerApiGetExport(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "touch", "/test")
+	out, _, err := runCommandWithOutput(runCmd)
+	if err != nil {
+		t.Fatalf("Error on container creation: %v, output: %q", err, out)
+	}
+
+	testContainerId := stripTrailingCharacters(out)
+
+	body, err := sockRequest("GET", "/containers/"+testContainerId+"/export")
+	if err != nil {
+		t.Fatalf("GET containers/export sockRequest failed: %v", err)
+	}
+
+	found := false
+	for tarReader := tar.NewReader(bytes.NewReader(body)); ; {
+		h, err := tarReader.Next()
+		if err != nil {
+			if err == io.EOF {
+				break
+			}
+			t.Fatal(err)
+		}
+		if h.Name == "test" {
+			found = true
+			break
+		}
+	}
+
+	if !found {
+		t.Fatalf("The created test file has not been found in the exported image")
+	}
+	deleteAllContainers()
+
+	logDone("container REST API - check GET containers/export")
+}
+
+func TestContainerApiGetChanges(t *testing.T) {
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "rm", "/etc/passwd")
+	out, _, err := runCommandWithOutput(runCmd)
+	if err != nil {
+		t.Fatalf("Error on container creation: %v, output: %q", err, out)
+	}
+
+	testContainerId := stripTrailingCharacters(out)
+
+	body, err := sockRequest("GET", "/containers/"+testContainerId+"/changes")
+	if err != nil {
+		t.Fatalf("GET containers/changes sockRequest failed: %v", err)
+	}
+
+	changes := []struct {
+		Kind int
+		Path string
+	}{}
+	if err = json.Unmarshal(body, &changes); err != nil {
+		t.Fatalf("unable to unmarshal response body: %v", err)
+	}
+
+	// Check the changelog for removal of /etc/passwd
+	success := false
+	for _, elem := range changes {
+		if elem.Path == "/etc/passwd" && elem.Kind == 2 {
+			success = true
+		}
+	}
+	if !success {
+		t.Fatalf("/etc/passwd has been removed but is not present in the diff")
+	}
+
+	deleteAllContainers()
+
+	logDone("container REST API - check GET containers/changes")
+}

+ 0 - 134
integration/api_test.go

@@ -21,100 +21,6 @@ import (
 	"github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar"
 )
 
-func TestGetContainersJSON(t *testing.T) {
-	eng := NewTestEngine(t)
-	defer mkDaemonFromEngine(eng, t).Nuke()
-
-	job := eng.Job("containers")
-	job.SetenvBool("all", true)
-	outs, err := job.Stdout.AddTable()
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := job.Run(); err != nil {
-		t.Fatal(err)
-	}
-	beginLen := len(outs.Data)
-
-	containerID := createTestContainer(eng, &runconfig.Config{
-		Image: unitTestImageID,
-		Cmd:   []string{"echo", "test"},
-	}, t)
-
-	if containerID == "" {
-		t.Fatalf("Received empty container ID")
-	}
-
-	req, err := http.NewRequest("GET", "/containers/json?all=1", nil)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	r := httptest.NewRecorder()
-	if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil {
-		t.Fatal(err)
-	}
-	assertHttpNotError(r, t)
-	containers := engine.NewTable("", 0)
-	if _, err := containers.ReadListFrom(r.Body.Bytes()); err != nil {
-		t.Fatal(err)
-	}
-	if len(containers.Data) != beginLen+1 {
-		t.Fatalf("Expected %d container, %d found (started with: %d)", beginLen+1, len(containers.Data), beginLen)
-	}
-	if id := containers.Data[0].Get("Id"); id != containerID {
-		t.Fatalf("Container ID mismatch. Expected: %s, received: %s\n", containerID, id)
-	}
-}
-
-func TestGetContainersExport(t *testing.T) {
-	eng := NewTestEngine(t)
-	defer mkDaemonFromEngine(eng, t).Nuke()
-
-	// Create a container and remove a file
-	containerID := createTestContainer(eng,
-		&runconfig.Config{
-			Image: unitTestImageID,
-			Cmd:   []string{"touch", "/test"},
-		},
-		t,
-	)
-	containerRun(eng, containerID, t)
-
-	r := httptest.NewRecorder()
-
-	req, err := http.NewRequest("GET", "/containers/"+containerID+"/export", nil)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil {
-		t.Fatal(err)
-	}
-	assertHttpNotError(r, t)
-
-	if r.Code != http.StatusOK {
-		t.Fatalf("%d OK expected, received %d\n", http.StatusOK, r.Code)
-	}
-
-	found := false
-	for tarReader := tar.NewReader(r.Body); ; {
-		h, err := tarReader.Next()
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			t.Fatal(err)
-		}
-		if h.Name == "test" {
-			found = true
-			break
-		}
-	}
-	if !found {
-		t.Fatalf("The created test file has not been found in the exported image")
-	}
-}
-
 func TestSaveImageAndThenLoad(t *testing.T) {
 	eng := NewTestEngine(t)
 	defer mkDaemonFromEngine(eng, t).Nuke()
@@ -186,46 +92,6 @@ func TestSaveImageAndThenLoad(t *testing.T) {
 	}
 }
 
-func TestGetContainersChanges(t *testing.T) {
-	eng := NewTestEngine(t)
-	defer mkDaemonFromEngine(eng, t).Nuke()
-
-	// Create a container and remove a file
-	containerID := createTestContainer(eng,
-		&runconfig.Config{
-			Image: unitTestImageID,
-			Cmd:   []string{"/bin/rm", "/etc/passwd"},
-		},
-		t,
-	)
-	containerRun(eng, containerID, t)
-
-	r := httptest.NewRecorder()
-	req, err := http.NewRequest("GET", "/containers/"+containerID+"/changes", nil)
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil {
-		t.Fatal(err)
-	}
-	assertHttpNotError(r, t)
-	outs := engine.NewTable("", 0)
-	if _, err := outs.ReadListFrom(r.Body.Bytes()); err != nil {
-		t.Fatal(err)
-	}
-
-	// Check the changelog
-	success := false
-	for _, elem := range outs.Data {
-		if elem.Get("Path") == "/etc/passwd" && elem.GetInt("Kind") == 2 {
-			success = true
-		}
-	}
-	if !success {
-		t.Fatalf("/etc/passwd as been removed but is not present in the diff")
-	}
-}
-
 func TestGetContainersTop(t *testing.T) {
 	eng := NewTestEngine(t)
 	defer mkDaemonFromEngine(eng, t).Nuke()