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)
This commit is contained in:
Bryan Murphy 2014-05-02 19:16:46 +00:00 committed by Bryan Murphy
parent 63fe64c471
commit e827c8ff61
3 changed files with 71 additions and 1 deletions

View File

@ -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"

View File

@ -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")
}

View File

@ -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)
}