tarsum_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package remotecontext // import "github.com/docker/docker/builder/remotecontext"
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. "github.com/docker/docker/builder"
  7. "github.com/docker/docker/pkg/archive"
  8. "github.com/docker/docker/pkg/reexec"
  9. "github.com/pkg/errors"
  10. "gotest.tools/v3/skip"
  11. )
  12. const (
  13. filename = "test"
  14. contents = "contents test"
  15. )
  16. func TestMain(m *testing.M) {
  17. if reexec.Init() {
  18. return
  19. }
  20. os.Exit(m.Run())
  21. }
  22. func TestCloseRootDirectory(t *testing.T) {
  23. contextDir, err := os.MkdirTemp("", "builder-tarsum-test")
  24. defer os.RemoveAll(contextDir)
  25. if err != nil {
  26. t.Fatalf("Error with creating temporary directory: %s", err)
  27. }
  28. src := makeTestArchiveContext(t, contextDir)
  29. err = src.Close()
  30. if err != nil {
  31. t.Fatalf("Error while executing Close: %s", err)
  32. }
  33. _, err = os.Stat(src.Root())
  34. if !errors.Is(err, os.ErrNotExist) {
  35. t.Fatal("Directory should not exist at this point")
  36. }
  37. }
  38. func TestHashFile(t *testing.T) {
  39. contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
  40. defer cleanup()
  41. createTestTempFile(t, contextDir, filename, contents, 0o755)
  42. tarSum := makeTestArchiveContext(t, contextDir)
  43. sum, err := tarSum.Hash(filename)
  44. if err != nil {
  45. t.Fatalf("Error when executing Stat: %s", err)
  46. }
  47. if len(sum) == 0 {
  48. t.Fatalf("Hash returned empty sum")
  49. }
  50. expected := "55dfeb344351ab27f59aa60ebb0ed12025a2f2f4677bf77d26ea7a671274a9ca"
  51. if actual := sum; expected != actual {
  52. t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
  53. }
  54. }
  55. func TestHashSubdir(t *testing.T) {
  56. contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
  57. defer cleanup()
  58. contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir")
  59. err := os.Mkdir(contextSubdir, 0o755)
  60. if err != nil {
  61. t.Fatalf("Failed to make directory: %s", contextSubdir)
  62. }
  63. testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0o755)
  64. tarSum := makeTestArchiveContext(t, contextDir)
  65. relativePath, err := filepath.Rel(contextDir, testFilename)
  66. if err != nil {
  67. t.Fatalf("Error when getting relative path: %s", err)
  68. }
  69. sum, err := tarSum.Hash(relativePath)
  70. if err != nil {
  71. t.Fatalf("Error when executing Stat: %s", err)
  72. }
  73. if len(sum) == 0 {
  74. t.Fatalf("Hash returned empty sum")
  75. }
  76. expected := "74a3326b8e766ce63a8e5232f22e9dd895be647fb3ca7d337e5e0a9b3da8ef28"
  77. if actual := sum; expected != actual {
  78. t.Fatalf("invalid checksum. expected %s, got %s", expected, actual)
  79. }
  80. }
  81. func TestRemoveDirectory(t *testing.T) {
  82. contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test")
  83. defer cleanup()
  84. contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir")
  85. relativePath, err := filepath.Rel(contextDir, contextSubdir)
  86. if err != nil {
  87. t.Fatalf("Error when getting relative path: %s", err)
  88. }
  89. src := makeTestArchiveContext(t, contextDir)
  90. _, err = os.Stat(filepath.Join(src.Root(), relativePath))
  91. if err != nil {
  92. t.Fatalf("Statting %s shouldn't fail: %+v", relativePath, err)
  93. }
  94. tarSum := src.(modifiableContext)
  95. err = tarSum.Remove(relativePath)
  96. if err != nil {
  97. t.Fatalf("Error when executing Remove: %s", err)
  98. }
  99. _, err = os.Stat(filepath.Join(src.Root(), relativePath))
  100. if !errors.Is(err, os.ErrNotExist) {
  101. t.Fatalf("Directory should not exist at this point: %+v ", err)
  102. }
  103. }
  104. func makeTestArchiveContext(t *testing.T, dir string) builder.Source {
  105. skip.If(t, os.Getuid() != 0, "skipping test that requires root")
  106. tarStream, err := archive.Tar(dir, archive.Uncompressed)
  107. if err != nil {
  108. t.Fatalf("error: %s", err)
  109. }
  110. defer tarStream.Close()
  111. tarSum, err := FromArchive(tarStream)
  112. if err != nil {
  113. t.Fatalf("Error when executing FromArchive: %s", err)
  114. }
  115. return tarSum
  116. }