moby--moby/builder/dockerignore_test.go

178 lines
4.5 KiB
Go

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())
}
}
}