tarsum_test.go 3.6 KB

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