Explorar el Código

Add integration test for history command and fix bug where history
would occasionally be returned in the incorrect order if sequential
layers had the same created time.

Docker-DCO-1.1-Signed-off-by: Bryan Murphy <bmurphy1976@gmail.com> (github: bmurphy1976)

Bryan Murphy hace 11 años
padre
commit
e827c8ff61

+ 28 - 0
integration-cli/build_tests/TestBuildHistory/Dockerfile

@@ -0,0 +1,28 @@
+FROM busybox
+
+RUN echo "A"
+RUN echo "B"
+RUN echo "C"
+RUN echo "D"
+RUN echo "E"
+RUN echo "F"
+RUN echo "G"
+RUN echo "H"
+RUN echo "I"
+RUN echo "J"
+RUN echo "K"
+RUN echo "L"
+RUN echo "M"
+RUN echo "N"
+RUN echo "O"
+RUN echo "P"
+RUN echo "Q"
+RUN echo "R"
+RUN echo "S"
+RUN echo "T"
+RUN echo "U"
+RUN echo "V"
+RUN echo "W"
+RUN echo "X"
+RUN echo "Y"
+RUN echo "Z"

+ 43 - 0
integration-cli/docker_cli_history_test.go

@@ -0,0 +1,43 @@
+package main
+
+import (
+	"fmt"
+	"os/exec"
+	"path/filepath"
+	"strings"
+	"testing"
+)
+
+// This is a heisen-test.  Because the created timestamp of images and the behavior of
+// sort is not predictable it doesn't always fail.
+func TestBuildHistory(t *testing.T) {
+	buildDirectory := filepath.Join(workingDirectory, "build_tests", "TestBuildHistory")
+	buildCmd := exec.Command(dockerBinary, "build", "-t", "testbuildhistory", ".")
+
+	buildCmd.Dir = buildDirectory
+	out, exitCode, err := runCommandWithOutput(buildCmd)
+	errorOut(err, t, fmt.Sprintf("build failed to complete: %v %v", out, err))
+	if err != nil || exitCode != 0 {
+		t.Fatal("failed to build the image")
+	}
+
+	out, exitCode, err = runCommandWithOutput(exec.Command(dockerBinary, "history", "testbuildhistory"))
+	errorOut(err, t, fmt.Sprintf("image history failed: %v %v", out, err))
+	if err != nil || exitCode != 0 {
+		t.Fatal("failed to get image history")
+	}
+
+	actual_values := strings.Split(out, "\n")[1:27]
+	expected_values := [26]string{"Z", "Y", "X", "W", "V", "U", "T", "S", "R", "Q", "P", "O", "N", "M", "L", "K", "J", "I", "H", "G", "F", "E", "D", "C", "B", "A"}
+
+	for i := 0; i < 26; i++ {
+		echo_value := fmt.Sprintf("echo \"%s\"", expected_values[i])
+		actual_value := actual_values[i]
+
+		if !strings.Contains(actual_value, echo_value) {
+			t.Fatalf("Expected layer \"%s\", but was: %s", expected_values[i], actual_value)
+		}
+	}
+
+	deleteImages("testbuildhistory")
+}

+ 0 - 1
server/server.go

@@ -840,7 +840,6 @@ func (srv *Server) ImageHistory(job *engine.Job) engine.Status {
 		outs.Add(out)
 		return nil
 	})
-	outs.ReverseSort()
 	if _, err := outs.WriteListTo(job.Stdout); err != nil {
 		return job.Error(err)
 	}