aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJakob Borg <jakob@kastelo.net>2017-11-17 12:11:45 +0000
committerAudrius Butkevicius <audrius.butkevicius@gmail.com>2017-11-17 12:11:45 +0000
commit5f4ed66aa1b0cd22f96503cf91279b64f9f9ffdc (patch)
treefd8375e05859ce4d4601167cbf66ed4e2d7e7fbe /test
parentee5d0dd43fe13788ef6ac86faf12f42029f455ea (diff)
downloadsyncthing-5f4ed66aa1b0cd22f96503cf91279b64f9f9ffdc.tar.gz
syncthing-5f4ed66aa1b0cd22f96503cf91279b64f9f9ffdc.zip
lib/model: Properly schedule pull on reconnect (fixes #4504)
We need to reset prevSeq so that we force a full check when someone reconnects - the sequence number may not have changed due to the reconnect. (This is a regression; we did this before f6ea2a7.) Also add an optimization: we schedule a pull after scanning, but there is no need to do so if no changes were detected. This matters now because the scheduled pull actually traverses the database which is expensive. This, however, makes the pull not happen on initial scan if there were no changes during the initial scan. Compensate by always scheduling a pull after initial scan in the rwfolder itself. GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4508 LGTM: imsodin, AudriusButkevicius
Diffstat (limited to 'test')
-rw-r--r--test/reconnect_test.go64
-rw-r--r--test/reset_test.go24
-rw-r--r--test/sync_test.go4
3 files changed, 29 insertions, 63 deletions
diff --git a/test/reconnect_test.go b/test/reconnect_test.go
index 12f3afd91..25f499f38 100644
--- a/test/reconnect_test.go
+++ b/test/reconnect_test.go
@@ -10,27 +10,19 @@ package integration
import (
"log"
- "sync"
"testing"
"time"
)
func TestReconnectReceiverDuringTransfer(t *testing.T) {
- testReconnectDuringTransfer(t, false, true, 0, 0)
+ testReconnectDuringTransfer(t, false, true)
}
func TestReconnectSenderDuringTransfer(t *testing.T) {
- testReconnectDuringTransfer(t, true, false, 0, 0)
+ testReconnectDuringTransfer(t, true, false)
}
-func TestReconnectSenderAndReceiverDuringTransfer(t *testing.T) {
- // Give the receiver some time to rot with needed files but
- // without any peer. This triggers
- // https://github.com/syncthing/syncthing/issues/463
- testReconnectDuringTransfer(t, true, true, 10*time.Second, 0)
-}
-
-func testReconnectDuringTransfer(t *testing.T, ReconnectSender, ReconnectReceiver bool, senderDelay, receiverDelay time.Duration) {
+func testReconnectDuringTransfer(t *testing.T, restartSender, restartReceiver bool) {
log.Println("Cleaning...")
err := removeAll("s1", "s2", "h1/index*", "h2/index*")
if err != nil {
@@ -38,7 +30,7 @@ func testReconnectDuringTransfer(t *testing.T, ReconnectSender, ReconnectReceive
}
log.Println("Generating files...")
- err = generateFiles("s1", 2500, 20, "../LICENSE")
+ err = generateFiles("s1", 250, 20, "../LICENSE")
if err != nil {
t.Fatal(err)
}
@@ -63,8 +55,9 @@ func testReconnectDuringTransfer(t *testing.T, ReconnectSender, ReconnectReceive
if err != nil {
t.Fatal(err)
}
- cfg.Options.MaxRecvKbps = 100
- cfg.Options.MaxSendKbps = 100
+ cfg.Options.MaxRecvKbps = 750
+ cfg.Options.MaxSendKbps = 750
+ cfg.Options.LimitBandwidthInLan = true
if err := receiver.PostConfig(cfg); err != nil {
t.Fatal(err)
}
@@ -86,42 +79,22 @@ func testReconnectDuringTransfer(t *testing.T, ReconnectSender, ReconnectReceive
// Receiver has made progress
prevBytes = recv.InSyncBytes
- if ReconnectReceiver {
- log.Printf("Pausing receiver...")
- receiver.PauseAll()
- }
-
- if ReconnectSender {
- log.Printf("Pausing sender...")
- sender.PauseAll()
+ if restartReceiver {
+ log.Printf("Stopping receiver...")
+ receiver.Stop()
+ receiver = startInstance(t, 2)
+ receiver.ResumeAll()
}
- var wg sync.WaitGroup
-
- if ReconnectReceiver {
- wg.Add(1)
- go func() {
- time.Sleep(receiverDelay)
- log.Printf("Resuming receiver...")
- receiver.ResumeAll()
- wg.Done()
- }()
- }
-
- if ReconnectSender {
- wg.Add(1)
- go func() {
- time.Sleep(senderDelay)
- log.Printf("Resuming sender...")
- sender.ResumeAll()
- wg.Done()
- }()
+ if restartSender {
+ log.Printf("Stopping sender...")
+ sender.Stop()
+ sender = startInstance(t, 1)
+ sender.ResumeAll()
}
-
- wg.Wait()
}
- time.Sleep(time.Second)
+ time.Sleep(250 * time.Millisecond)
}
// Reset rate limits
@@ -131,6 +104,7 @@ func testReconnectDuringTransfer(t *testing.T, ReconnectSender, ReconnectReceive
}
cfg.Options.MaxRecvKbps = 0
cfg.Options.MaxSendKbps = 0
+ cfg.Options.LimitBandwidthInLan = false
if err := receiver.PostConfig(cfg); err != nil {
t.Fatal(err)
}
diff --git a/test/reset_test.go b/test/reset_test.go
index e0b1c2029..bb9711fe4 100644
--- a/test/reset_test.go
+++ b/test/reset_test.go
@@ -10,7 +10,9 @@ package integration
import (
"bytes"
+ "fmt"
"io"
+ "io/ioutil"
"log"
"os"
"path/filepath"
@@ -128,25 +130,15 @@ func TestReset(t *testing.T) {
}
func createFiles(t *testing.T) int {
- // Create eight empty files and directories
- files := []string{"f1", "f2", "f3", "f4", "f11", "f12", "f13", "f14"}
- dirs := []string{"d1", "d2", "d3", "d4", "d11", "d12", "d13", "d14"}
- all := append(files, dirs...)
-
- for _, file := range files {
- fd, err := os.Create(filepath.Join("s1", file))
- if err != nil {
- t.Fatal(err)
- }
- fd.Close()
- }
+ // Create a few files
- for _, dir := range dirs {
- err := os.Mkdir(filepath.Join("s1", dir), 0755)
- if err != nil {
+ const n = 8
+ for i := 0; i < n; i++ {
+ file := fmt.Sprintf("f%d", i)
+ if err := ioutil.WriteFile(filepath.Join("s1", file), []byte("data"), 0644); err != nil {
t.Fatal(err)
}
}
- return len(all)
+ return n
}
diff --git a/test/sync_test.go b/test/sync_test.go
index 600dcd3c1..ad5d1388c 100644
--- a/test/sync_test.go
+++ b/test/sync_test.go
@@ -20,8 +20,8 @@ import (
)
const (
- longTimeLimit = 5 * time.Minute
- shortTimeLimit = 45 * time.Second
+ longTimeLimit = 1 * time.Minute
+ shortTimeLimit = 25 * time.Second
s12Folder = `¯\_(ツ)_/¯ Räksmörgås 动作 Адрес` // This was renamed to ensure arbitrary folder IDs are fine.
)