lib/model: Consider case conflicts when checking to be deleted items (#6986)

This commit is contained in:
Simon Frei
2020-09-12 07:45:50 +02:00
committed by GitHub
parent 3e24d82513
commit 8210466b03
2 changed files with 49 additions and 24 deletions
+36 -12
View File
@@ -781,18 +781,8 @@ func TestDeleteIgnorePerms(t *testing.T) {
fi, err := scanner.CreateFileInfo(stat, name, ffs)
must(t, err)
ffs.Chmod(name, 0600)
scanChan := make(chan string)
dbUpdateChan := make(chan dbUpdateJob)
finished := make(chan struct{})
go func() {
err = f.checkToBeDeleted(fi, fi, true, dbUpdateDeleteFile, dbUpdateChan, scanChan)
close(finished)
}()
select {
case <-scanChan:
<-finished
case <-finished:
}
scanChan := make(chan string, 1)
err = f.checkToBeDeleted(fi, fi, true, scanChan)
must(t, err)
}
@@ -1325,6 +1315,40 @@ func TestPullSymlinkOverExistingWindows(t *testing.T) {
}
}
func TestPullDeleteCaseConflict(t *testing.T) {
m, f := setupSendReceiveFolder()
defer cleanupSRFolder(f, m)
name := "foo"
fi := protocol.FileInfo{Name: "Foo"}
dbUpdateChan := make(chan dbUpdateJob, 1)
scanChan := make(chan string)
if fd, err := f.fs.Create(name); err != nil {
t.Fatal(err)
} else {
if _, err := fd.Write([]byte("data")); err != nil {
t.Fatal(err)
}
fd.Close()
}
f.deleteFileWithCurrent(fi, protocol.FileInfo{}, false, dbUpdateChan, scanChan)
select {
case <-dbUpdateChan:
default:
t.Error("Missing db update for file")
}
snap := f.fset.Snapshot()
defer snap.Release()
f.deleteDir(fi, snap, dbUpdateChan, scanChan)
select {
case <-dbUpdateChan:
default:
t.Error("Missing db update for dir")
}
}
func cleanupSharedPullerState(s *sharedPullerState) {
s.mut.Lock()
defer s.mut.Unlock()