123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package remotecontext // import "github.com/docker/docker/builder/remotecontext"
- import (
- "errors"
- "log"
- "os"
- "path/filepath"
- "sort"
- "testing"
- "github.com/docker/docker/builder"
- )
- const (
- dockerfileContents = "FROM busybox"
- dockerignoreFilename = ".dockerignore"
- testfileContents = "test"
- )
- const shouldStayFilename = "should_stay"
- func extractFilenames(files []os.DirEntry) []string {
- filenames := make([]string, len(files))
- for i, file := range files {
- filenames[i] = file.Name()
- }
- return filenames
- }
- func checkDirectory(t *testing.T, dir string, expectedFiles []string) {
- files, err := os.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 := &stubRemote{root: contextDir}
- err := removeDockerfile(modifiableCtx, builder.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, 0o777)
- createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0o777)
- createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777)
- 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, 0o777)
- createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777)
- executeProcess(t, contextDir)
- checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName})
- }
- func TestProcessShouldLeaveAllFiles(t *testing.T) {
- contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
- defer cleanup()
- createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0o777)
- createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777)
- createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0o777)
- executeProcess(t, contextDir)
- checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName, dockerignoreFilename})
- }
- // TODO: remove after moving to a separate pkg
- type stubRemote struct {
- root string
- }
- func (r *stubRemote) Hash(path string) (string, error) {
- return "", errors.New("not implemented")
- }
- func (r *stubRemote) Root() string {
- return r.root
- }
- func (r *stubRemote) Close() error {
- return errors.New("not implemented")
- }
- func (r *stubRemote) Remove(p string) error {
- return os.Remove(filepath.Join(r.root, p))
- }
|