|
@@ -0,0 +1,177 @@
|
|
|
+package builder
|
|
|
+
|
|
|
+import (
|
|
|
+ "io/ioutil"
|
|
|
+ "log"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, "should_stay")
|
|
|
+ testContent := "test"
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(testContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating should_stay file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ dockerignoreFilename := filepath.Join(contextDir, ".dockerignore")
|
|
|
+ dockerignoreContent := "Dockerfile\n.dockerignore"
|
|
|
+ err = ioutil.WriteFile(dockerignoreFilename, []byte(dockerignoreContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating .dockerignore file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName)
|
|
|
+ dockerfileContent := "FROM busybox"
|
|
|
+ err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating Dockerfile file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ modifiableCtx := &tarSumContext{root: contextDir}
|
|
|
+ ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx}
|
|
|
+
|
|
|
+ err = ctx.Process([]string{DefaultDockerfileName})
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Process: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ files, err := ioutil.ReadDir(contextDir)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Could not read directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(files) != 1 {
|
|
|
+ log.Fatal("Directory should contain exactly one file")
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, file := range files {
|
|
|
+ if "should_stay" != file.Name() {
|
|
|
+ log.Fatalf("File %s should not be in the directory", file.Name())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func TestProcessNoDockerignore(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, "should_stay")
|
|
|
+ testContent := "test"
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(testContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating should_stay file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName)
|
|
|
+ dockerfileContent := "FROM busybox"
|
|
|
+ err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating Dockerfile file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ modifiableCtx := &tarSumContext{root: contextDir}
|
|
|
+ ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx}
|
|
|
+
|
|
|
+ ctx.Process([]string{DefaultDockerfileName})
|
|
|
+
|
|
|
+ files, err := ioutil.ReadDir(contextDir)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Could not read directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(files) != 2 {
|
|
|
+ log.Fatal("Directory should contain exactly two files")
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, file := range files {
|
|
|
+ if "should_stay" != file.Name() && DefaultDockerfileName != file.Name() {
|
|
|
+ log.Fatalf("File %s should not be in the directory", file.Name())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func TestProcessShouldLeaveAllFiles(t *testing.T) {
|
|
|
+ contextDir, err := ioutil.TempDir("", "builder-dockerignore-process-test")
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error with creating temporary directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ defer os.RemoveAll(contextDir)
|
|
|
+
|
|
|
+ testFilename := filepath.Join(contextDir, "should_stay")
|
|
|
+ testContent := "test"
|
|
|
+ err = ioutil.WriteFile(testFilename, []byte(testContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating should_stay file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ dockerignoreFilename := filepath.Join(contextDir, ".dockerignore")
|
|
|
+ dockerignoreContent := "input1\ninput2"
|
|
|
+ err = ioutil.WriteFile(dockerignoreFilename, []byte(dockerignoreContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating .dockerignore file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ dockerfileFilename := filepath.Join(contextDir, DefaultDockerfileName)
|
|
|
+ dockerfileContent := "FROM busybox"
|
|
|
+ err = ioutil.WriteFile(dockerfileFilename, []byte(dockerfileContent), 0777)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when creating Dockerfile file: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ modifiableCtx := &tarSumContext{root: contextDir}
|
|
|
+ ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx}
|
|
|
+
|
|
|
+ err = ctx.Process([]string{DefaultDockerfileName})
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error when executing Process: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ files, err := ioutil.ReadDir(contextDir)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Could not read directory: %s", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(files) != 3 {
|
|
|
+ log.Fatal("Directory should contain exactly three files")
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, file := range files {
|
|
|
+ if "should_stay" != file.Name() && DefaultDockerfileName != file.Name() && ".dockerignore" != file.Name() {
|
|
|
+ log.Fatalf("File %s should not be in the directory", file.Name())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|