12 "github.com/docker/docker/builder"
16 dockerfileContents = "FROM busybox"
17 dockerignoreFilename = ".dockerignore"
18 testfileContents = "test"
21 const shouldStayFilename = "should_stay"
23 func extractFilenames(files []os.FileInfo) []string {
24 filenames := make([]string, len(files), len(files))
26 for i, file := range files {
27 filenames[i] = file.Name()
33 func checkDirectory(t *testing.T, dir string, expectedFiles []string) {
34 files, err := ioutil.ReadDir(dir)
37 t.Fatalf("Could not read directory: %s", err)
40 if len(files) != len(expectedFiles) {
41 log.Fatalf("Directory should contain exactly %d file(s), got %d", len(expectedFiles), len(files))
44 filenames := extractFilenames(files)
45 sort.Strings(filenames)
46 sort.Strings(expectedFiles)
48 for i, filename := range filenames {
49 if filename != expectedFiles[i] {
50 t.Fatalf("File %s should be in the directory, got: %s", expectedFiles[i], filename)
55 func executeProcess(t *testing.T, contextDir string) {
56 modifiableCtx := &stubRemote{root: contextDir}
58 err := removeDockerfile(modifiableCtx, builder.DefaultDockerfileName)
61 t.Fatalf("Error when executing Process: %s", err)
65 func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) {
66 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
69 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
70 createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0777)
71 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
73 executeProcess(t, contextDir)
75 checkDirectory(t, contextDir, []string{shouldStayFilename})
79 func TestProcessNoDockerignore(t *testing.T) {
80 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
83 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
84 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
86 executeProcess(t, contextDir)
88 checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName})
92 func TestProcessShouldLeaveAllFiles(t *testing.T) {
93 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
96 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
97 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
98 createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0777)
100 executeProcess(t, contextDir)
102 checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName, dockerignoreFilename})
106 // TODO: remove after moving to a separate pkg
107 type stubRemote struct {
111 func (r *stubRemote) Hash(path string) (string, error) {
112 return "", errors.New("not implemented")
115 func (r *stubRemote) Root() string {
118 func (r *stubRemote) Close() error {
119 return errors.New("not implemented")
121 func (r *stubRemote) Remove(p string) error {
122 return os.Remove(filepath.Join(r.root, p))