| package builder |
| |
| import ( |
| "io/ioutil" |
| "log" |
| "os" |
| "sort" |
| "testing" |
| ) |
| |
| const shouldStayFilename = "should_stay" |
| |
| func extractFilenames(files []os.FileInfo) []string { |
| filenames := make([]string, len(files), len(files)) |
| |
| for i, file := range files { |
| filenames[i] = file.Name() |
| } |
| |
| return filenames |
| } |
| |
| func checkDirectory(t *testing.T, dir string, expectedFiles []string) { |
| files, err := ioutil.ReadDir(dir) |
| |
| if err != nil { |
| t.Fatalf("Could not read directory: %s", err) |
| } |
| |
| if len(files) != len(expectedFiles) { |
| log.Fatalf("Directory should contain exactly %d file(s), got %d", len(expectedFiles), len(files)) |
| } |
| |
| filenames := extractFilenames(files) |
| sort.Strings(filenames) |
| sort.Strings(expectedFiles) |
| |
| for i, filename := range filenames { |
| if filename != expectedFiles[i] { |
| t.Fatalf("File %s should be in the directory, got: %s", expectedFiles[i], filename) |
| } |
| } |
| } |
| |
| func executeProcess(t *testing.T, contextDir string) { |
| modifiableCtx := &tarSumContext{root: contextDir} |
| ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx} |
| |
| err := ctx.Process([]string{DefaultDockerfileName}) |
| |
| if err != nil { |
| t.Fatalf("Error when executing Process: %s", err) |
| } |
| } |
| |
| func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) { |
| contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") |
| defer cleanup() |
| |
| createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777) |
| createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0777) |
| createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777) |
| |
| executeProcess(t, contextDir) |
| |
| checkDirectory(t, contextDir, []string{shouldStayFilename}) |
| |
| } |
| |
| func TestProcessNoDockerignore(t *testing.T) { |
| contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") |
| defer cleanup() |
| |
| createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777) |
| createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777) |
| |
| executeProcess(t, contextDir) |
| |
| checkDirectory(t, contextDir, []string{shouldStayFilename, DefaultDockerfileName}) |
| |
| } |
| |
| func TestProcessShouldLeaveAllFiles(t *testing.T) { |
| contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") |
| defer cleanup() |
| |
| createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777) |
| createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777) |
| createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0777) |
| |
| executeProcess(t, contextDir) |
| |
| checkDirectory(t, contextDir, []string{shouldStayFilename, DefaultDockerfileName, dockerignoreFilename}) |
| |
| } |