lib/model: Consider case conflicts when checking to be deleted items (#6986)
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user