scan_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. // Copyright (C) 2014 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. // +build integration
  7. package integration
  8. import (
  9. "log"
  10. "os"
  11. "testing"
  12. "github.com/syncthing/syncthing/lib/rc"
  13. )
  14. func TestScanSubdir(t *testing.T) {
  15. log.Println("Cleaning...")
  16. err := removeAll("s1", "s2", "h1/index*", "h2/index*")
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. log.Println("Generating files...")
  21. err = generateFiles("s1", 10, 10, "../LICENSE")
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. // 1. Scan a single file in a known directory "file1.txt"
  26. // 2. Scan a single file in an unknown directory "filetest/file1.txt"
  27. // 3. Scan a single file in a deep unknown directory "filetest/1/2/3/4/5/6/7/file1.txt"
  28. // 4. Scan a directory in a deep unknown directory "dirtest/1/2/3/4/5/6/7"
  29. // 5. Scan a deleted file in a known directory "filetest/file1.txt"
  30. // 6. Scan a deleted file in a deep unknown directory "rmdirtest/1/2/3/4/5/6/7"
  31. // 7. 'Accidentally' forget to scan 1 of the 2 files in a known directory
  32. // Verify that the files and directories sync to the other side
  33. sender := startInstance(t, 1)
  34. defer checkedStop(t, sender)
  35. receiver := startInstance(t, 2)
  36. defer checkedStop(t, receiver)
  37. sender.ResumeAll()
  38. receiver.ResumeAll()
  39. log.Println("Syncing...")
  40. rc.AwaitSync("default", sender, receiver)
  41. // Delay scans for the moment
  42. if err := sender.RescanDelay("default", 86400); err != nil {
  43. t.Fatal(err)
  44. }
  45. log.Println("Comparing directories...")
  46. err = compareDirectories("s1", "s2")
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. // 1
  51. log.Println("Creating new file...")
  52. if fd, err := os.Create("s1/file1.txt"); err != nil {
  53. t.Fatal(err)
  54. } else {
  55. fd.Close()
  56. }
  57. if err := sender.RescanSub("default", "file1.txt", 86400); err != nil {
  58. t.Fatal(err)
  59. }
  60. log.Println("Syncing...")
  61. rc.AwaitSync("default", sender, receiver)
  62. log.Println("Comparing directories...")
  63. err = compareDirectories("s1", "s2")
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. // 2
  68. log.Println("Creating a file in an unknown directory")
  69. os.MkdirAll("s1/filetest", 0755)
  70. if fd, err := os.Create("s1/filetest/file1.txt"); err != nil {
  71. t.Fatal(err)
  72. } else {
  73. fd.Close()
  74. }
  75. if err := sender.RescanSub("default", "filetest/file1.txt", 86400); err != nil {
  76. t.Fatal(err)
  77. }
  78. log.Println("Syncing...")
  79. rc.AwaitSync("default", sender, receiver)
  80. log.Println("Comparing directories...")
  81. err = compareDirectories("s1", "s2")
  82. if err != nil {
  83. t.Fatal(err)
  84. }
  85. // 3
  86. log.Println("Creating a file in an unknown deep directory")
  87. os.MkdirAll("s1/filetest/1/2/3/4/5/6/7", 0755)
  88. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file1.txt"); err != nil {
  89. t.Fatal(err)
  90. } else {
  91. fd.Close()
  92. }
  93. if err := sender.RescanSub("default", "filetest/1/2/3/4/5/6/7/file1.txt", 86400); err != nil {
  94. t.Fatal(err)
  95. }
  96. log.Println("Syncing...")
  97. rc.AwaitSync("default", sender, receiver)
  98. log.Println("Comparing directories...")
  99. err = compareDirectories("s1", "s2")
  100. if err != nil {
  101. t.Fatal(err)
  102. }
  103. // 4
  104. log.Println("Creating a directory in an unknown directory")
  105. err = os.MkdirAll("s1/dirtest/1/2/3/4/5/6/7", 0755)
  106. if err != nil {
  107. t.Fatal(err)
  108. }
  109. if err := sender.RescanSub("default", "dirtest/1/2/3/4/5/6/7", 86400); err != nil {
  110. t.Fatal(err)
  111. }
  112. log.Println("Syncing...")
  113. rc.AwaitSync("default", sender, receiver)
  114. log.Println("Comparing directories...")
  115. err = compareDirectories("s1", "s2")
  116. if err != nil {
  117. t.Fatal(err)
  118. }
  119. // 5
  120. log.Println("Scan a deleted file in a known directory")
  121. if err := os.Remove("s1/filetest/file1.txt"); err != nil {
  122. t.Fatal(err)
  123. }
  124. if err := sender.RescanSub("default", "filetest/file1.txt", 86400); err != nil {
  125. t.Fatal(err)
  126. }
  127. log.Println("Syncing...")
  128. rc.AwaitSync("default", sender, receiver)
  129. log.Println("Comparing directories...")
  130. err = compareDirectories("s1", "s2")
  131. if err != nil {
  132. t.Fatal(err)
  133. }
  134. // 6
  135. log.Println("Scan a deleted file in an unknown directory")
  136. if err := sender.RescanSub("default", "rmdirtest/1/2/3/4/5/6/7", 86400); err != nil {
  137. t.Fatal(err)
  138. }
  139. log.Println("Syncing...")
  140. rc.AwaitSync("default", sender, receiver)
  141. log.Println("Comparing directories...")
  142. err = compareDirectories("s1", "s2")
  143. if err != nil {
  144. t.Fatal(err)
  145. }
  146. // 7
  147. log.Println("'Accidentally' forget to scan 1 of the 2 files")
  148. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file2.txt"); err != nil {
  149. t.Fatal(err)
  150. } else {
  151. fd.Close()
  152. }
  153. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file3.txt"); err != nil {
  154. t.Fatal(err)
  155. } else {
  156. fd.Close()
  157. }
  158. if err := sender.RescanSub("default", "filetest/1/2/3/4/5/6/7/file2.txt", 86400); err != nil {
  159. t.Fatal(err)
  160. }
  161. log.Println("Syncing...")
  162. rc.AwaitSync("default", sender, receiver)
  163. log.Println("Comparing directories...")
  164. err = compareDirectories("s1", "s2")
  165. if err == nil {
  166. t.Fatal("filetest/1/2/3/4/5/6/7/file3.txt should not be synced")
  167. }
  168. os.Remove("s1/filetest/1/2/3/4/5/6/7/file3.txt")
  169. err = compareDirectories("s1", "s2")
  170. if err != nil {
  171. t.Fatal(err)
  172. }
  173. }