parallell_scan_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 TestParallellScan(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", 5000, 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. resp, err := st.post("/rest/scan?folder=default", nil)
  46. if err != nil {
  47. time.Sleep(time.Second)
  48. continue
  49. }
  50. if resp.StatusCode != 200 {
  51. resp.Body.Close()
  52. time.Sleep(time.Second)
  53. continue
  54. }
  55. break
  56. }
  57. // Wait for UPnP and stuff
  58. time.Sleep(10 * time.Second)
  59. var wg sync.WaitGroup
  60. log.Println("Starting scans...")
  61. for j := 0; j < 20; j++ {
  62. j := j
  63. wg.Add(1)
  64. go func() {
  65. defer wg.Done()
  66. resp, err := st.post("/rest/scan?folder=default", nil)
  67. log.Println(j)
  68. if err != nil {
  69. log.Println(err)
  70. t.Fatal(err)
  71. }
  72. if resp.StatusCode != 200 {
  73. t.Fatalf("%d != 200", resp.StatusCode)
  74. }
  75. resp.Body.Close()
  76. }()
  77. }
  78. wg.Wait()
  79. log.Println("Scans done")
  80. time.Sleep(2 * time.Second)
  81. // This is where the real test is currently, since stop() checks for data
  82. // race output in the log.
  83. log.Println("Stopping...")
  84. err = st.stop()
  85. if err != nil {
  86. t.Fatal(err)
  87. }
  88. }