lib/model: Don't call t.Fatal in goroutines (fixes #5901) (#5903)

This commit is contained in:
Simon Frei 2019-07-30 17:50:51 +02:00 committed by Jakob Borg
parent d681ac11fe
commit df522576ac
1 changed files with 57 additions and 41 deletions

View File

@ -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)