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