delay_scan_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. "io/ioutil"
  10. "log"
  11. "sync"
  12. "testing"
  13. "time"
  14. )
  15. func TestDelayScan(t *testing.T) {
  16. log.Println("Cleaning...")
  17. err := removeAll("s1", "h1/index*")
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. log.Println("Generating files...")
  22. err = generateFiles("s1", 50, 18, "../LICENSE")
  23. if err != nil {
  24. t.Fatal(err)
  25. }
  26. log.Println("Generating .stignore...")
  27. err = ioutil.WriteFile("s1/.stignore", []byte("some ignore data\n"), 0644)
  28. if err != nil {
  29. t.Fatal(err)
  30. }
  31. log.Println("Starting up...")
  32. st := syncthingProcess{ // id1
  33. instance: "1",
  34. argv: []string{"-home", "h1"},
  35. port: 8081,
  36. apiKey: apiKey,
  37. }
  38. err = st.start()
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. // Wait for one scan to succeed, or up to 20 seconds...
  43. // This is to let startup, UPnP etc complete.
  44. for i := 0; i < 20; i++ {
  45. err := st.rescan("default")
  46. if err != nil {
  47. time.Sleep(time.Second)
  48. continue
  49. }
  50. break
  51. }
  52. // Wait for UPnP and stuff
  53. time.Sleep(10 * time.Second)
  54. var wg sync.WaitGroup
  55. log.Println("Starting scans...")
  56. for j := 0; j < 20; j++ {
  57. j := j
  58. wg.Add(1)
  59. go func() {
  60. defer wg.Done()
  61. err := st.rescanNext("default", time.Duration(1)*time.Second)
  62. log.Println(j)
  63. if err != nil {
  64. log.Println(err)
  65. t.Fatal(err)
  66. }
  67. }()
  68. }
  69. wg.Wait()
  70. log.Println("Scans done")
  71. time.Sleep(2 * time.Second)
  72. // This is where the real test is currently, since stop() checks for data
  73. // race output in the log.
  74. log.Println("Stopping...")
  75. _, err = st.stop()
  76. if err != nil {
  77. t.Fatal(err)
  78. }
  79. }