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") logDone("history - build history") } func TestHistoryExistentImage(t *testing.T) { historyCmd := exec.Command(dockerBinary, "history", "busybox") _, exitCode, err := runCommandWithOutput(historyCmd) if err != nil || exitCode != 0 { t.Fatal("failed to get image history") } logDone("history - history on existent image must not fail") } func TestHistoryNonExistentImage(t *testing.T) { historyCmd := exec.Command(dockerBinary, "history", "testHistoryNonExistentImage") _, exitCode, err := runCommandWithOutput(historyCmd) if err == nil || exitCode == 0 { t.Fatal("history on a non-existent image didn't result in a non-zero exit status") } logDone("history - history on non-existent image must fail") }