directory_test.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package directory
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path/filepath"
  6. "reflect"
  7. "sort"
  8. "testing"
  9. )
  10. // Size of an empty directory should be 0
  11. func TestSizeEmpty(t *testing.T) {
  12. var dir string
  13. var err error
  14. if dir, err = ioutil.TempDir(os.TempDir(), "testSizeEmptyDirectory"); err != nil {
  15. t.Fatalf("failed to create directory: %s", err)
  16. }
  17. var size int64
  18. if size, _ = Size(dir); size != 0 {
  19. t.Fatalf("empty directory has size: %d", size)
  20. }
  21. }
  22. // Size of a directory with one empty file should be 0
  23. func TestSizeEmptyFile(t *testing.T) {
  24. var dir string
  25. var err error
  26. if dir, err = ioutil.TempDir(os.TempDir(), "testSizeEmptyFile"); err != nil {
  27. t.Fatalf("failed to create directory: %s", err)
  28. }
  29. var file *os.File
  30. if file, err = ioutil.TempFile(dir, "file"); err != nil {
  31. t.Fatalf("failed to create file: %s", err)
  32. }
  33. var size int64
  34. if size, _ = Size(file.Name()); size != 0 {
  35. t.Fatalf("directory with one file has size: %d", size)
  36. }
  37. }
  38. // Size of a directory with one 5-byte file should be 5
  39. func TestSizeNonemptyFile(t *testing.T) {
  40. var dir string
  41. var err error
  42. if dir, err = ioutil.TempDir(os.TempDir(), "testSizeNonemptyFile"); err != nil {
  43. t.Fatalf("failed to create directory: %s", err)
  44. }
  45. var file *os.File
  46. if file, err = ioutil.TempFile(dir, "file"); err != nil {
  47. t.Fatalf("failed to create file: %s", err)
  48. }
  49. d := []byte{97, 98, 99, 100, 101}
  50. file.Write(d)
  51. var size int64
  52. if size, _ = Size(file.Name()); size != 5 {
  53. t.Fatalf("directory with one 5-byte file has size: %d", size)
  54. }
  55. }
  56. // Size of a directory with one empty directory should be 0
  57. func TestSizeNestedDirectoryEmpty(t *testing.T) {
  58. var dir string
  59. var err error
  60. if dir, err = ioutil.TempDir(os.TempDir(), "testSizeNestedDirectoryEmpty"); err != nil {
  61. t.Fatalf("failed to create directory: %s", err)
  62. }
  63. if dir, err = ioutil.TempDir(dir, "nested"); err != nil {
  64. t.Fatalf("failed to create nested directory: %s", err)
  65. }
  66. var size int64
  67. if size, _ = Size(dir); size != 0 {
  68. t.Fatalf("directory with one empty directory has size: %d", size)
  69. }
  70. }
  71. // Test directory with 1 file and 1 empty directory
  72. func TestSizeFileAndNestedDirectoryEmpty(t *testing.T) {
  73. var dir string
  74. var err error
  75. if dir, err = ioutil.TempDir(os.TempDir(), "testSizeFileAndNestedDirectoryEmpty"); err != nil {
  76. t.Fatalf("failed to create directory: %s", err)
  77. }
  78. if dir, err = ioutil.TempDir(dir, "nested"); err != nil {
  79. t.Fatalf("failed to create nested directory: %s", err)
  80. }
  81. var file *os.File
  82. if file, err = ioutil.TempFile(dir, "file"); err != nil {
  83. t.Fatalf("failed to create file: %s", err)
  84. }
  85. d := []byte{100, 111, 99, 107, 101, 114}
  86. file.Write(d)
  87. var size int64
  88. if size, _ = Size(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 = ioutil.TempDir(os.TempDir(), "TestSizeFileAndNestedDirectoryNonempty"); err != nil {
  97. t.Fatalf("failed to create directory: %s", err)
  98. }
  99. if dirNested, err = ioutil.TempDir(dir, "nested"); err != nil {
  100. t.Fatalf("failed to create nested directory: %s", err)
  101. }
  102. var file *os.File
  103. if file, err = ioutil.TempFile(dir, "file"); err != nil {
  104. t.Fatalf("failed to create file: %s", err)
  105. }
  106. data := []byte{100, 111, 99, 107, 101, 114}
  107. file.Write(data)
  108. var nestedFile *os.File
  109. if nestedFile, err = ioutil.TempFile(dirNested, "file"); err != nil {
  110. t.Fatalf("failed to create file in nested directory: %s", err)
  111. }
  112. nestedData := []byte{100, 111, 99, 107, 101, 114}
  113. nestedFile.Write(nestedData)
  114. var size int64
  115. if size, _ = Size(dir); size != 12 {
  116. t.Fatalf("directory with 6-byte file and nested directory with 6-byte file has size: %d", size)
  117. }
  118. }
  119. // Test migration of directory to a subdir underneath itself
  120. func TestMoveToSubdir(t *testing.T) {
  121. var outerDir, subDir string
  122. var err error
  123. if outerDir, err = ioutil.TempDir(os.TempDir(), "TestMoveToSubdir"); err != nil {
  124. t.Fatalf("failed to create directory: %v", err)
  125. }
  126. if subDir, err = ioutil.TempDir(outerDir, "testSub"); err != nil {
  127. t.Fatalf("failed to create subdirectory: %v", err)
  128. }
  129. // write 4 temp files in the outer dir to get moved
  130. filesList := []string{"a", "b", "c", "d"}
  131. for _, fName := range filesList {
  132. if file, err := os.Create(filepath.Join(outerDir, fName)); err != nil {
  133. t.Fatalf("couldn't create temp file %q: %v", fName, err)
  134. } else {
  135. file.WriteString(fName)
  136. file.Close()
  137. }
  138. }
  139. if err = MoveToSubdir(outerDir, filepath.Base(subDir)); err != nil {
  140. t.Fatalf("Error during migration of content to subdirectory: %v", err)
  141. }
  142. // validate that the files were moved to the subdirectory
  143. infos, err := ioutil.ReadDir(subDir)
  144. if err != nil {
  145. t.Fatal(err)
  146. }
  147. if len(infos) != 4 {
  148. t.Fatalf("Should be four files in the subdir after the migration: actual length: %d", len(infos))
  149. }
  150. var results []string
  151. for _, info := range infos {
  152. results = append(results, info.Name())
  153. }
  154. sort.Sort(sort.StringSlice(results))
  155. if !reflect.DeepEqual(filesList, results) {
  156. t.Fatalf("Results after migration do not equal list of files: expected: %v, got: %v", filesList, results)
  157. }
  158. }
  159. // Test a non-existing directory
  160. func TestSizeNonExistingDirectory(t *testing.T) {
  161. if _, err := Size("/thisdirectoryshouldnotexist/TestSizeNonExistingDirectory"); err == nil {
  162. t.Fatalf("error is expected")
  163. }
  164. }