dockerignore_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package builder
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. "sort"
  7. "testing"
  8. )
  9. const shouldStayFilename = "should_stay"
  10. func extractFilenames(files []os.FileInfo) []string {
  11. filenames := make([]string, len(files), len(files))
  12. for i, file := range files {
  13. filenames[i] = file.Name()
  14. }
  15. return filenames
  16. }
  17. func checkDirectory(t *testing.T, dir string, expectedFiles []string) {
  18. files, err := ioutil.ReadDir(dir)
  19. if err != nil {
  20. t.Fatalf("Could not read directory: %s", err)
  21. }
  22. if len(files) != len(expectedFiles) {
  23. log.Fatalf("Directory should contain exactly %d file(s), got %d", len(expectedFiles), len(files))
  24. }
  25. filenames := extractFilenames(files)
  26. sort.Strings(filenames)
  27. sort.Strings(expectedFiles)
  28. for i, filename := range filenames {
  29. if filename != expectedFiles[i] {
  30. t.Fatalf("File %s should be in the directory, got: %s", expectedFiles[i], filename)
  31. }
  32. }
  33. }
  34. func executeProcess(t *testing.T, contextDir string) {
  35. modifiableCtx := &tarSumContext{root: contextDir}
  36. ctx := DockerIgnoreContext{ModifiableContext: modifiableCtx}
  37. err := ctx.Process([]string{DefaultDockerfileName})
  38. if err != nil {
  39. t.Fatalf("Error when executing Process: %s", err)
  40. }
  41. }
  42. func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) {
  43. contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
  44. defer cleanup()
  45. createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
  46. createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0777)
  47. createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777)
  48. executeProcess(t, contextDir)
  49. checkDirectory(t, contextDir, []string{shouldStayFilename})
  50. }
  51. func TestProcessNoDockerignore(t *testing.T) {
  52. contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
  53. defer cleanup()
  54. createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
  55. createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777)
  56. executeProcess(t, contextDir)
  57. checkDirectory(t, contextDir, []string{shouldStayFilename, DefaultDockerfileName})
  58. }
  59. func TestProcessShouldLeaveAllFiles(t *testing.T) {
  60. contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
  61. defer cleanup()
  62. createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
  63. createTestTempFile(t, contextDir, DefaultDockerfileName, dockerfileContents, 0777)
  64. createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0777)
  65. executeProcess(t, contextDir)
  66. checkDirectory(t, contextDir, []string{shouldStayFilename, DefaultDockerfileName, dockerignoreFilename})
  67. }