github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/builder/dockerignore_test.go (about) 1 package builder 2 3 import ( 4 "io/ioutil" 5 "log" 6 "os" 7 "path/filepath" 8 "testing" 9 ) 10 11 func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) { 12 contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test") 13 14 if err != nil { 15 t.Fatalf("Error with creating temporary directory: %s", err) 16 } 17 18 defer os.RemoveAll(contextDir) 19 20 testFilename := filepath.Join(contextDir, "should_stay") 21 testContent := "test" 22 err = ioutil.WriteFile(testFilename, []byte(testContent), 0777) 23 24 if err != nil { 25 t.Fatalf("Error when creating should_stay file: %s", err) 26 } 27 28 dockerignoreFilename := filepath.Join(contextDir, ".dockerignore") 29 dockerignoreContent := "Dockerfile\n.dockerignore" 30 err = ioutil.WriteFile(dockerignoreFilename, []byte(dockerignoreContent), 0777) 31 32 if err != nil { 33 t.Fatalf("Error when creating .dockerignore file: %s", err) 34 } 35 36 dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName) 37 dockerfileContent := "FROM busybox" 38 err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777) 39 40 if err != nil { 41 t.Fatalf("Error when creating Dockerfile file: %s", err) 42 } 43 44 modifiableCtx := &tarSumContext{root: contextDir} 45 ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx} 46 47 err = ctx.Process([]string{DefaultDockerfileName}) 48 49 if err != nil { 50 t.Fatalf("Error when executing Process: %s", err) 51 } 52 53 files, err := ioutil.ReadDir(contextDir) 54 55 if err != nil { 56 t.Fatalf("Could not read directory: %s", err) 57 } 58 59 if len(files) != 1 { 60 log.Fatal("Directory should contain exactly one file") 61 } 62 63 for _, file := range files { 64 if "should_stay" != file.Name() { 65 log.Fatalf("File %s should not be in the directory", file.Name()) 66 } 67 } 68 69 } 70 71 func TestProcessNoDockerignore(t *testing.T) { 72 contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test") 73 74 if err != nil { 75 t.Fatalf("Error with creating temporary directory: %s", err) 76 } 77 78 defer os.RemoveAll(contextDir) 79 80 testFilename := filepath.Join(contextDir, "should_stay") 81 testContent := "test" 82 err = ioutil.WriteFile(testFilename, []byte(testContent), 0777) 83 84 if err != nil { 85 t.Fatalf("Error when creating should_stay file: %s", err) 86 } 87 88 dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName) 89 dockerfileContent := "FROM busybox" 90 err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777) 91 92 if err != nil { 93 t.Fatalf("Error when creating Dockerfile file: %s", err) 94 } 95 96 modifiableCtx := &tarSumContext{root: contextDir} 97 ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx} 98 99 ctx.Process([]string{DefaultDockerfileName}) 100 101 files, err := ioutil.ReadDir(contextDir) 102 103 if err != nil { 104 t.Fatalf("Could not read directory: %s", err) 105 } 106 107 if len(files) != 2 { 108 log.Fatal("Directory should contain exactly two files") 109 } 110 111 for _, file := range files { 112 if "should_stay" != file.Name() && DefaultDockerfileName != file.Name() { 113 log.Fatalf("File %s should not be in the directory", file.Name()) 114 } 115 } 116 117 } 118 119 func TestProcessShouldLeaveAllFiles(t *testing.T) { 120 contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test") 121 122 if err != nil { 123 t.Fatalf("Error with creating temporary directory: %s", err) 124 } 125 126 defer os.RemoveAll(contextDir) 127 128 testFilename := filepath.Join(contextDir, "should_stay") 129 testContent := "test" 130 err = ioutil.WriteFile(testFilename, []byte(testContent), 0777) 131 132 if err != nil { 133 t.Fatalf("Error when creating should_stay file: %s", err) 134 } 135 136 dockerignoreFilename := filepath.Join(contextDir, ".dockerignore") 137 dockerignoreContent := "input1\ninput2" 138 err = ioutil.WriteFile(dockerignoreFilename, []byte(dockerignoreContent), 0777) 139 140 if err != nil { 141 t.Fatalf("Error when creating .dockerignore file: %s", err) 142 } 143 144 dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName) 145 dockerfileContent := "FROM busybox" 146 err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777) 147 148 if err != nil { 149 t.Fatalf("Error when creating Dockerfile file: %s", err) 150 } 151 152 modifiableCtx := &tarSumContext{root: contextDir} 153 ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx} 154 155 err = ctx.Process([]string{DefaultDockerfileName}) 156 157 if err != nil { 158 t.Fatalf("Error when executing Process: %s", err) 159 } 160 161 files, err := ioutil.ReadDir(contextDir) 162 163 if err != nil { 164 t.Fatalf("Could not read directory: %s", err) 165 } 166 167 if len(files) != 3 { 168 log.Fatal("Directory should contain exactly three files") 169 } 170 171 for _, file := range files { 172 if "should_stay" != file.Name() && DefaultDockerfileName != file.Name() && ".dockerignore" != file.Name() { 173 log.Fatalf("File %s should not be in the directory", file.Name()) 174 } 175 } 176 177 }