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  }