builder/remotecontext/detect_test.go
d1faf3df
 package remotecontext
555d8cb2
 
 import (
d1faf3df
 	"errors"
555d8cb2
 	"io/ioutil"
 	"log"
 	"os"
ab2baf08
 	"sort"
555d8cb2
 	"testing"
d1faf3df
 
 	"github.com/docker/docker/builder"
7a7357da
 	"github.com/docker/docker/pkg/containerfs"
d1faf3df
 )
 
 const (
 	dockerfileContents   = "FROM busybox"
 	dockerignoreFilename = ".dockerignore"
 	testfileContents     = "test"
555d8cb2
 )
 
ab2baf08
 const shouldStayFilename = "should_stay"
555d8cb2
 
ab2baf08
 func extractFilenames(files []os.FileInfo) []string {
f7f101d5
 	filenames := make([]string, len(files))
ab2baf08
 
 	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) {
7a7357da
 	modifiableCtx := &stubRemote{root: containerfs.NewLocalContainerFS(contextDir)}
555d8cb2
 
d1faf3df
 	err := removeDockerfile(modifiableCtx, builder.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)
d1faf3df
 	createTestTempFile(t, contextDir, builder.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)
d1faf3df
 	createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
555d8cb2
 
ab2baf08
 	executeProcess(t, contextDir)
555d8cb2
 
d1faf3df
 	checkDirectory(t, contextDir, []string{shouldStayFilename, builder.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)
d1faf3df
 	createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
ab2baf08
 	createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0777)
555d8cb2
 
ab2baf08
 	executeProcess(t, contextDir)
555d8cb2
 
d1faf3df
 	checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName, dockerignoreFilename})
555d8cb2
 
 }
d1faf3df
 
 // TODO: remove after moving to a separate pkg
 type stubRemote struct {
7a7357da
 	root containerfs.ContainerFS
d1faf3df
 }
 
 func (r *stubRemote) Hash(path string) (string, error) {
 	return "", errors.New("not implemented")
 }
 
7a7357da
 func (r *stubRemote) Root() containerfs.ContainerFS {
d1faf3df
 	return r.root
 }
 func (r *stubRemote) Close() error {
 	return errors.New("not implemented")
 }
 func (r *stubRemote) Remove(p string) error {
7a7357da
 	return r.root.Remove(r.root.Join(r.root.Path(), p))
d1faf3df
 }