directory_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package directory // import "github.com/docker/docker/pkg/directory"
  2. import (
  3. "context"
  4. "os"
  5. "testing"
  6. )
  7. // Size of an empty directory should be 0
  8. func TestSizeEmpty(t *testing.T) {
  9. var dir string
  10. var err error
  11. if dir, err = os.MkdirTemp(os.TempDir(), "testSizeEmptyDirectory"); err != nil {
  12. t.Fatalf("failed to create directory: %s", err)
  13. }
  14. var size int64
  15. if size, _ = Size(context.Background(), dir); size != 0 {
  16. t.Fatalf("empty directory has size: %d", size)
  17. }
  18. }
  19. // Size of a directory with one empty file should be 0
  20. func TestSizeEmptyFile(t *testing.T) {
  21. var dir string
  22. var err error
  23. if dir, err = os.MkdirTemp(os.TempDir(), "testSizeEmptyFile"); err != nil {
  24. t.Fatalf("failed to create directory: %s", err)
  25. }
  26. var file *os.File
  27. if file, err = os.CreateTemp(dir, "file"); err != nil {
  28. t.Fatalf("failed to create file: %s", err)
  29. }
  30. defer file.Close()
  31. var size int64
  32. if size, _ = Size(context.Background(), file.Name()); size != 0 {
  33. t.Fatalf("directory with one file has size: %d", size)
  34. }
  35. }
  36. // Size of a directory with one 5-byte file should be 5
  37. func TestSizeNonemptyFile(t *testing.T) {
  38. var dir string
  39. var err error
  40. if dir, err = os.MkdirTemp(os.TempDir(), "testSizeNonemptyFile"); err != nil {
  41. t.Fatalf("failed to create directory: %s", err)
  42. }
  43. var file *os.File
  44. if file, err = os.CreateTemp(dir, "file"); err != nil {
  45. t.Fatalf("failed to create file: %s", err)
  46. }
  47. defer file.Close()
  48. d := []byte{97, 98, 99, 100, 101}
  49. file.Write(d)
  50. var size int64
  51. if size, _ = Size(context.Background(), file.Name()); size != 5 {
  52. t.Fatalf("directory with one 5-byte file has size: %d", size)
  53. }
  54. }
  55. // Size of a directory with one empty directory should be 0
  56. func TestSizeNestedDirectoryEmpty(t *testing.T) {
  57. var dir string
  58. var err error
  59. if dir, err = os.MkdirTemp(os.TempDir(), "testSizeNestedDirectoryEmpty"); err != nil {
  60. t.Fatalf("failed to create directory: %s", err)
  61. }
  62. if dir, err = os.MkdirTemp(dir, "nested"); err != nil {
  63. t.Fatalf("failed to create nested directory: %s", err)
  64. }
  65. var size int64
  66. if size, _ = Size(context.Background(), dir); size != 0 {
  67. t.Fatalf("directory with one empty directory has size: %d", size)
  68. }
  69. }
  70. // Test directory with 1 file and 1 empty directory
  71. func TestSizeFileAndNestedDirectoryEmpty(t *testing.T) {
  72. var dir string
  73. var err error
  74. if dir, err = os.MkdirTemp(os.TempDir(), "testSizeFileAndNestedDirectoryEmpty"); err != nil {
  75. t.Fatalf("failed to create directory: %s", err)
  76. }
  77. if dir, err = os.MkdirTemp(dir, "nested"); err != nil {
  78. t.Fatalf("failed to create nested directory: %s", err)
  79. }
  80. var file *os.File
  81. if file, err = os.CreateTemp(dir, "file"); err != nil {
  82. t.Fatalf("failed to create file: %s", err)
  83. }
  84. defer file.Close()
  85. d := []byte{100, 111, 99, 107, 101, 114}
  86. file.Write(d)
  87. var size int64
  88. if size, _ = Size(context.Background(), dir); size != 6 {
  89. t.Fatalf("directory with 6-byte file and empty directory has size: %d", size)
  90. }
  91. }
  92. // Test directory with 1 file and 1 non-empty directory
  93. func TestSizeFileAndNestedDirectoryNonempty(t *testing.T) {
  94. var dir, dirNested string
  95. var err error
  96. if dir, err = os.MkdirTemp(os.TempDir(), "TestSizeFileAndNestedDirectoryNonempty"); err != nil {
  97. t.Fatalf("failed to create directory: %s", err)
  98. }
  99. if dirNested, err = os.MkdirTemp(dir, "nested"); err != nil {
  100. t.Fatalf("failed to create nested directory: %s", err)
  101. }
  102. var file *os.File
  103. if file, err = os.CreateTemp(dir, "file"); err != nil {
  104. t.Fatalf("failed to create file: %s", err)
  105. }
  106. defer file.Close()
  107. data := []byte{100, 111, 99, 107, 101, 114}
  108. file.Write(data)
  109. var nestedFile *os.File
  110. if nestedFile, err = os.CreateTemp(dirNested, "file"); err != nil {
  111. t.Fatalf("failed to create file in nested directory: %s", err)
  112. }
  113. defer nestedFile.Close()
  114. nestedData := []byte{100, 111, 99, 107, 101, 114}
  115. nestedFile.Write(nestedData)
  116. var size int64
  117. if size, _ = Size(context.Background(), dir); size != 12 {
  118. t.Fatalf("directory with 6-byte file and nested directory with 6-byte file has size: %d", size)
  119. }
  120. }
  121. // Test a non-existing directory
  122. func TestSizeNonExistingDirectory(t *testing.T) {
  123. if _, err := Size(context.Background(), "/thisdirectoryshouldnotexist/TestSizeNonExistingDirectory"); err == nil {
  124. t.Fatalf("error is expected")
  125. }
  126. }