diff --git a/lib/model/folder_sendrecv_test.go b/lib/model/folder_sendrecv_test.go index c4dfff6de..a8f08f4f6 100644 --- a/lib/model/folder_sendrecv_test.go +++ b/lib/model/folder_sendrecv_test.go @@ -253,8 +253,22 @@ func TestCopierFinder(t *testing.T) { f.handleFile(requiredFile, copyChan, dbUpdateChan) - pulls := []pullBlockState{<-pullChan, <-pullChan, <-pullChan, <-pullChan} - finish := <-finisherChan + timeout := time.After(10 * time.Second) + pulls := make([]pullBlockState, 4) + for i := 0; i < 4; i++ { + select { + case pulls[i] = <-pullChan: + case <-timeout: + t.Fatalf("Timed out before receiving all 4 states on pullChan (already got %v)", i) + } + } + var finish *sharedPullerState + select { + case finish = <-finisherChan: + case <-timeout: + t.Fatal("Timed out before receiving 4 states on pullChan") + } + defer cleanupSharedPullerState(finish) select { diff --git a/lib/model/model_test.go b/lib/model/model_test.go index 77a767747..76002aa20 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -3224,7 +3224,7 @@ func TestRequestLimit(t *testing.T) { go func() { second, err := m.Request(device1, "default", file, 2000, 0, nil, 0, false) if err != nil { - t.Fatalf("Second request failed: %v", err) + t.Errorf("Second request failed: %v", err) } close(returned) second.Close() diff --git a/lib/model/requests_test.go b/lib/model/requests_test.go index 93992ecff..f83650620 100644 --- a/lib/model/requests_test.go +++ b/lib/model/requests_test.go @@ -244,31 +244,37 @@ func TestRequestVersioningSymlinkAttack(t *testing.T) { } fc.mut.Unlock() + waitForIdx := func() { + select { + case c := <-idx: + if c == 0 { + t.Fatal("Got empty index update") + } + case <-time.After(5 * time.Second): + t.Fatal("timed out before receiving index update") + } + } + // Send an update for the test file, wait for it to sync and be reported back. fc.addFile("foo", 0644, protocol.FileInfoTypeSymlink, []byte(tmpdir)) fc.sendIndexUpdate() - - for updates := 0; updates < 1; updates += <-idx { - } + waitForIdx() // Delete the symlink, hoping for it to get versioned fc.deleteFile("foo") fc.sendIndexUpdate() - for updates := 0; updates < 1; updates += <-idx { - } + waitForIdx() // Recreate foo and a file in it with some data fc.updateFile("foo", 0755, protocol.FileInfoTypeDirectory, nil) fc.addFile("foo/test", 0644, protocol.FileInfoTypeFile, []byte("testtesttest")) fc.sendIndexUpdate() - for updates := 0; updates < 1; updates += <-idx { - } + waitForIdx() // Remove the test file and see if it escaped fc.deleteFile("foo/test") fc.sendIndexUpdate() - for updates := 0; updates < 1; updates += <-idx { - } + waitForIdx() path := filepath.Join(tmpdir, "test") if _, err := os.Lstat(path); !os.IsNotExist(err) {