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