scan_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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 http://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 TestSubScan(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. log.Println("Syncing...")
  38. rc.AwaitSync("default", sender, receiver)
  39. // Delay scans for the moment
  40. if err := sender.RescanDelay("default", 86400); err != nil {
  41. t.Fatal(err)
  42. }
  43. log.Println("Comparing directories...")
  44. err = compareDirectories("s1", "s2")
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. // 1
  49. log.Println("Creating new file...")
  50. if fd, err := os.Create("s1/file1.txt"); err != nil {
  51. t.Fatal(err)
  52. } else {
  53. fd.Close()
  54. }
  55. if err := sender.RescanSub("default", "file1.txt", 86400); err != nil {
  56. t.Fatal(err)
  57. }
  58. log.Println("Syncing...")
  59. rc.AwaitSync("default", sender, receiver)
  60. log.Println("Comparing directories...")
  61. err = compareDirectories("s1", "s2")
  62. if err != nil {
  63. t.Fatal(err)
  64. }
  65. // 2
  66. log.Println("Creating a file in an unknown directory")
  67. os.MkdirAll("s1/filetest", 0755)
  68. if fd, err := os.Create("s1/filetest/file1.txt"); err != nil {
  69. t.Fatal(err)
  70. } else {
  71. fd.Close()
  72. }
  73. if err := sender.RescanSub("default", "filetest/file1.txt", 86400); err != nil {
  74. t.Fatal(err)
  75. }
  76. log.Println("Syncing...")
  77. rc.AwaitSync("default", sender, receiver)
  78. log.Println("Comparing directories...")
  79. err = compareDirectories("s1", "s2")
  80. if err != nil {
  81. t.Fatal(err)
  82. }
  83. // 3
  84. log.Println("Creating a file in an unknown deep directory")
  85. os.MkdirAll("s1/filetest/1/2/3/4/5/6/7", 0755)
  86. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file1.txt"); err != nil {
  87. t.Fatal(err)
  88. } else {
  89. fd.Close()
  90. }
  91. if err := sender.RescanSub("default", "filetest/1/2/3/4/5/6/7/file1.txt", 86400); err != nil {
  92. t.Fatal(err)
  93. }
  94. log.Println("Syncing...")
  95. rc.AwaitSync("default", sender, receiver)
  96. log.Println("Comparing directories...")
  97. err = compareDirectories("s1", "s2")
  98. if err != nil {
  99. t.Fatal(err)
  100. }
  101. // 4
  102. log.Println("Creating a directory in an unknown directory")
  103. err = os.MkdirAll("s1/dirtest/1/2/3/4/5/6/7", 0755)
  104. if err != nil {
  105. t.Fatal(err)
  106. }
  107. if err := sender.RescanSub("default", "dirtest/1/2/3/4/5/6/7", 86400); err != nil {
  108. t.Fatal(err)
  109. }
  110. log.Println("Syncing...")
  111. rc.AwaitSync("default", sender, receiver)
  112. log.Println("Comparing directories...")
  113. err = compareDirectories("s1", "s2")
  114. if err != nil {
  115. t.Fatal(err)
  116. }
  117. // 5
  118. log.Println("Scan a deleted file in a known directory")
  119. if err := os.Remove("s1/filetest/file1.txt"); err != nil {
  120. t.Fatal(err)
  121. }
  122. if err := sender.RescanSub("default", "filetest/file1.txt", 86400); err != nil {
  123. t.Fatal(err)
  124. }
  125. log.Println("Syncing...")
  126. rc.AwaitSync("default", sender, receiver)
  127. log.Println("Comparing directories...")
  128. err = compareDirectories("s1", "s2")
  129. if err != nil {
  130. t.Fatal(err)
  131. }
  132. // 6
  133. log.Println("Scan a deleted file in an unknown directory")
  134. if err := sender.RescanSub("default", "rmdirtest/1/2/3/4/5/6/7", 86400); err != nil {
  135. t.Fatal(err)
  136. }
  137. log.Println("Syncing...")
  138. rc.AwaitSync("default", sender, receiver)
  139. log.Println("Comparing directories...")
  140. err = compareDirectories("s1", "s2")
  141. if err != nil {
  142. t.Fatal(err)
  143. }
  144. // 7
  145. log.Println("'Accidentally' forget to scan 1 of the 2 files")
  146. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file2.txt"); err != nil {
  147. t.Fatal(err)
  148. } else {
  149. fd.Close()
  150. }
  151. if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file3.txt"); err != nil {
  152. t.Fatal(err)
  153. } else {
  154. fd.Close()
  155. }
  156. if err := sender.RescanSub("default", "filetest/1/2/3/4/5/6/7/file2.txt", 86400); err != nil {
  157. t.Fatal(err)
  158. }
  159. log.Println("Syncing...")
  160. rc.AwaitSync("default", sender, receiver)
  161. log.Println("Comparing directories...")
  162. err = compareDirectories("s1", "s2")
  163. if err == nil {
  164. t.Fatal("filetest/1/2/3/4/5/6/7/file3.txt should not be synced")
  165. }
  166. os.Remove("s1/filetest/1/2/3/4/5/6/7/file3.txt")
  167. err = compareDirectories("s1", "s2")
  168. if err != nil {
  169. t.Fatal(err)
  170. }
  171. }