diff --git a/lib/model/requests_test.go b/lib/model/requests_test.go index 97cc8bcdf..86a6ffd7e 100644 --- a/lib/model/requests_test.go +++ b/lib/model/requests_test.go @@ -40,7 +40,7 @@ func TestRequestSimple(t *testing.T) { fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { case <-done: - t.Fatalf("More than one index update sent") + t.Error("More than one index update sent") default: } for _, f := range fs { @@ -82,7 +82,7 @@ func TestSymlinkTraversalRead(t *testing.T) { fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { case <-done: - t.Fatalf("More than one index update sent") + t.Error("More than one index update sent") default: } for _, f := range fs { @@ -188,7 +188,8 @@ func TestRequestCreateTmpSymlink(t *testing.T) { if f.IsInvalid() { goodIdx <- struct{}{} } else { - t.Fatal("Received index with non-invalid temporary file") + t.Error("Received index with non-invalid temporary file") + close(goodIdx) } return } @@ -372,7 +373,8 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) { secondIndex = true for _, f := range fs { if _, ok := expected[f.Name]; !ok { - t.Fatalf("Unexpected file %v was updated in index", f.Name) + t.Errorf("Unexpected file %v was updated in index", f.Name) + continue } if f.IsInvalid() { t.Errorf("File %v is still marked as invalid", f.Name) @@ -395,7 +397,7 @@ func pullInvalidIgnored(t *testing.T, ft config.FolderType) { if len(expected) == 0 { close(done) } else if secondIndex { - t.Fatal("Didn't receive index updates for all existing files, missing", expected) + t.Error("Didn't receive index updates for all existing files, missing", expected) } } // Make sure pulling doesn't interfere, as index updates are racy and @@ -420,18 +422,22 @@ func TestIssue4841(t *testing.T) { m, fc, fcfg := setupModelWithConnection() defer cleanupModelAndRemoveDir(m, fcfg.Filesystem().URI()) - received := make(chan protocol.FileInfo) + received := make(chan []protocol.FileInfo) fc.mut.Lock() - fc.indexFn = func(folder string, fs []protocol.FileInfo) { + fc.indexFn = func(_ string, fs []protocol.FileInfo) { + received <- fs + } + fc.mut.Unlock() + checkReceived := func(fs []protocol.FileInfo) protocol.FileInfo { + t.Helper() if len(fs) != 1 { t.Fatalf("Sent index with %d files, should be 1", len(fs)) } if fs[0].Name != "foo" { t.Fatalf(`Sent index with file %v, should be "foo"`, fs[0].Name) } - received <- fs[0] + return fs[0] } - fc.mut.Unlock() // Setup file from remote that was ignored locally folder := m.folderRunners[defaultFolderConfig.ID].(*sendReceiveFolder) @@ -441,14 +447,16 @@ func TestIssue4841(t *testing.T) { LocalFlags: protocol.FlagLocalIgnored, Version: protocol.Vector{}.Update(device1.Short()), }}) - <-received + + checkReceived(<-received) // Scan without ignore patterns with "foo" not existing locally if err := m.ScanFolder("default"); err != nil { t.Fatal("Failed scanning:", err) } - f := <-received + f := checkReceived(<-received) + if expected := (protocol.Vector{}.Update(myID.Short())); !f.Version.Equal(expected) { t.Errorf("Got Version == %v, expected %v", f.Version, expected) } @@ -463,25 +471,29 @@ func TestRescanIfHaveInvalidContent(t *testing.T) { must(t, ioutil.WriteFile(filepath.Join(tmpDir, "foo"), payload, 0777)) - received := make(chan protocol.FileInfo) + received := make(chan []protocol.FileInfo) fc.mut.Lock() - fc.indexFn = func(folder string, fs []protocol.FileInfo) { + fc.indexFn = func(_ string, fs []protocol.FileInfo) { + received <- fs + } + fc.mut.Unlock() + checkReceived := func(fs []protocol.FileInfo) protocol.FileInfo { + t.Helper() if len(fs) != 1 { t.Fatalf("Sent index with %d files, should be 1", len(fs)) } if fs[0].Name != "foo" { t.Fatalf(`Sent index with file %v, should be "foo"`, fs[0].Name) } - received <- fs[0] + return fs[0] } - fc.mut.Unlock() // Scan without ignore patterns with "foo" not existing locally if err := m.ScanFolder("default"); err != nil { t.Fatal("Failed scanning:", err) } - f := <-received + f := checkReceived(<-received) if f.Blocks[0].WeakHash != 103547413 { t.Fatalf("unexpected weak hash: %d != 103547413", f.Blocks[0].WeakHash) } @@ -506,7 +518,8 @@ func TestRescanIfHaveInvalidContent(t *testing.T) { } select { - case f := <-received: + case fs := <-received: + f := checkReceived(fs) if f.Blocks[0].WeakHash != 41943361 { t.Fatalf("unexpected weak hash: %d != 41943361", f.Blocks[0].WeakHash) } @@ -598,14 +611,24 @@ func TestRequestSymlinkWindows(t *testing.T) { m, fc, fcfg := setupModelWithConnection() defer cleanupModelAndRemoveDir(m, fcfg.Filesystem().URI()) - done := make(chan struct{}) + received := make(chan []protocol.FileInfo) fc.mut.Lock() fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { - case <-done: - t.Fatalf("More than one index update sent") + case <-received: + t.Error("More than one index update sent") default: } + received <- fs + } + fc.mut.Unlock() + + fc.addFile("link", 0644, protocol.FileInfoTypeSymlink, nil) + fc.sendIndexUpdate() + + select { + case fs := <-received: + close(received) // expected first index if len(fs) != 1 { t.Fatalf("Expected just one file in index, got %v", fs) @@ -617,15 +640,6 @@ func TestRequestSymlinkWindows(t *testing.T) { if !f.IsInvalid() { t.Errorf(`File info was not marked as invalid`) } - close(done) - } - fc.mut.Unlock() - - fc.addFile("link", 0644, protocol.FileInfoTypeSymlink, nil) - fc.sendIndexUpdate() - - select { - case <-done: case <-time.After(time.Second): t.Fatalf("timed out before pull was finished") } @@ -667,18 +681,15 @@ func TestRequestRemoteRenameChanged(t *testing.T) { tmpDir := tfs.URI() defer cleanupModelAndRemoveDir(m, tfs.URI()) - done := make(chan struct{}) + received := make(chan []protocol.FileInfo) fc.mut.Lock() fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { - case <-done: - t.Fatalf("More than one index update sent") + case <-received: + t.Error("More than one index update sent") default: } - if len(fs) != 2 { - t.Fatalf("Received index with %v indexes instead of 2", len(fs)) - } - close(done) + received <- fs } fc.mut.Unlock() @@ -694,7 +705,11 @@ func TestRequestRemoteRenameChanged(t *testing.T) { } fc.sendIndexUpdate() select { - case <-done: + case fs := <-received: + close(received) + if len(fs) != 2 { + t.Fatalf("Received index with %v indexes instead of 2", len(fs)) + } case <-time.After(10 * time.Second): t.Fatal("timed out") } @@ -706,12 +721,13 @@ func TestRequestRemoteRenameChanged(t *testing.T) { var gotA, gotB, gotConfl bool bIntermediateVersion := protocol.Vector{}.Update(fc.id.Short()).Update(myID.Short()) bFinalVersion := bIntermediateVersion.Copy().Update(fc.id.Short()) - done = make(chan struct{}) + done := make(chan struct{}) fc.mut.Lock() fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { case <-done: - t.Fatalf("Received more index updates than expected") + t.Error("Received more index updates than expected") + return default: } for _, f := range fs { @@ -901,7 +917,7 @@ func TestRequestDeleteChanged(t *testing.T) { fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { case <-done: - t.Fatalf("More than one index update sent") + t.Error("More than one index update sent") default: } close(done) @@ -924,7 +940,7 @@ func TestRequestDeleteChanged(t *testing.T) { fc.indexFn = func(folder string, fs []protocol.FileInfo) { select { case <-done: - t.Fatalf("More than one index update sent") + t.Error("More than one index update sent") default: } close(done)