github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/builder/remotecontext/detect_test.go (about) 1 package remotecontext // import "github.com/Prakhar-Agarwal-byte/moby/builder/remotecontext" 2 3 import ( 4 "errors" 5 "log" 6 "os" 7 "path/filepath" 8 "sort" 9 "testing" 10 11 "github.com/Prakhar-Agarwal-byte/moby/builder" 12 ) 13 14 const ( 15 dockerfileContents = "FROM busybox" 16 dockerignoreFilename = ".dockerignore" 17 testfileContents = "test" 18 ) 19 20 const shouldStayFilename = "should_stay" 21 22 func extractFilenames(files []os.DirEntry) []string { 23 filenames := make([]string, len(files)) 24 25 for i, file := range files { 26 filenames[i] = file.Name() 27 } 28 29 return filenames 30 } 31 32 func checkDirectory(t *testing.T, dir string, expectedFiles []string) { 33 files, err := os.ReadDir(dir) 34 if err != nil { 35 t.Fatalf("Could not read directory: %s", err) 36 } 37 38 if len(files) != len(expectedFiles) { 39 log.Fatalf("Directory should contain exactly %d file(s), got %d", len(expectedFiles), len(files)) 40 } 41 42 filenames := extractFilenames(files) 43 sort.Strings(filenames) 44 sort.Strings(expectedFiles) 45 46 for i, filename := range filenames { 47 if filename != expectedFiles[i] { 48 t.Fatalf("File %s should be in the directory, got: %s", expectedFiles[i], filename) 49 } 50 } 51 } 52 53 func executeProcess(t *testing.T, contextDir string) { 54 modifiableCtx := &stubRemote{root: contextDir} 55 56 err := removeDockerfile(modifiableCtx, builder.DefaultDockerfileName) 57 if err != nil { 58 t.Fatalf("Error when executing Process: %s", err) 59 } 60 } 61 62 func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) { 63 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") 64 defer cleanup() 65 66 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0o777) 67 createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0o777) 68 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777) 69 70 executeProcess(t, contextDir) 71 72 checkDirectory(t, contextDir, []string{shouldStayFilename}) 73 } 74 75 func TestProcessNoDockerignore(t *testing.T) { 76 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") 77 defer cleanup() 78 79 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0o777) 80 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777) 81 82 executeProcess(t, contextDir) 83 84 checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName}) 85 } 86 87 func TestProcessShouldLeaveAllFiles(t *testing.T) { 88 contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test") 89 defer cleanup() 90 91 createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0o777) 92 createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0o777) 93 createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0o777) 94 95 executeProcess(t, contextDir) 96 97 checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName, dockerignoreFilename}) 98 } 99 100 // TODO: remove after moving to a separate pkg 101 type stubRemote struct { 102 root string 103 } 104 105 func (r *stubRemote) Hash(path string) (string, error) { 106 return "", errors.New("not implemented") 107 } 108 109 func (r *stubRemote) Root() string { 110 return r.root 111 } 112 113 func (r *stubRemote) Close() error { 114 return errors.New("not implemented") 115 } 116 117 func (r *stubRemote) Remove(p string) error { 118 return os.Remove(filepath.Join(r.root, p)) 119 }