tarsum_test.go 3.5 KB

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