|
@@ -92,8 +92,8 @@ func createFile(t *testing.T, name string, fs fs.Filesystem) protocol.FileInfo {
|
|
|
}
|
|
|
|
|
|
// Sets up a folder and model, but makes sure the services aren't actually running.
|
|
|
-func setupSendReceiveFolder(t testing.TB, files ...protocol.FileInfo) (*testModel, *sendReceiveFolder) {
|
|
|
- w, fcfg := tmpDefaultWrapper()
|
|
|
+func setupSendReceiveFolder(t testing.TB, files ...protocol.FileInfo) (*testModel, *sendReceiveFolder, context.CancelFunc) {
|
|
|
+ w, fcfg, wCancel := tmpDefaultWrapper()
|
|
|
// Initialise model and stop immediately.
|
|
|
model := setupModel(t, w)
|
|
|
model.cancel()
|
|
@@ -107,10 +107,11 @@ func setupSendReceiveFolder(t testing.TB, files ...protocol.FileInfo) (*testMode
|
|
|
f.updateLocalsFromScanning(files)
|
|
|
}
|
|
|
|
|
|
- return model, f
|
|
|
+ return model, f, wCancel
|
|
|
}
|
|
|
|
|
|
-func cleanupSRFolder(f *sendReceiveFolder, m *testModel) {
|
|
|
+func cleanupSRFolder(f *sendReceiveFolder, m *testModel, wrapperCancel context.CancelFunc) {
|
|
|
+ wrapperCancel()
|
|
|
os.Remove(m.cfg.ConfigPath())
|
|
|
os.RemoveAll(f.Filesystem().URI())
|
|
|
}
|
|
@@ -130,8 +131,8 @@ func TestHandleFile(t *testing.T) {
|
|
|
requiredFile := existingFile
|
|
|
requiredFile.Blocks = blocks[1:]
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t, existingFile)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t, existingFile)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
copyChan := make(chan copyBlocksState, 1)
|
|
|
|
|
@@ -172,8 +173,8 @@ func TestHandleFileWithTemp(t *testing.T) {
|
|
|
requiredFile := existingFile
|
|
|
requiredFile.Blocks = blocks[1:]
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t, existingFile)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t, existingFile)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
if _, err := prepareTmpFile(f.Filesystem()); err != nil {
|
|
|
t.Fatal(err)
|
|
@@ -228,10 +229,10 @@ func TestCopierFinder(t *testing.T) {
|
|
|
requiredFile.Blocks = blocks[1:]
|
|
|
requiredFile.Name = "file2"
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t, existingFile)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t, existingFile)
|
|
|
f.CopyRangeMethod = method
|
|
|
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
if _, err := prepareTmpFile(f.Filesystem()); err != nil {
|
|
|
t.Fatal(err)
|
|
@@ -309,8 +310,8 @@ func TestCopierFinder(t *testing.T) {
|
|
|
|
|
|
func TestWeakHash(t *testing.T) {
|
|
|
// Setup the model/pull environment
|
|
|
- model, fo := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(fo, model)
|
|
|
+ model, fo, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(fo, model, wcfgCancel)
|
|
|
ffs := fo.Filesystem()
|
|
|
|
|
|
tempFile := fs.TempName("weakhash")
|
|
@@ -438,8 +439,8 @@ func TestCopierCleanup(t *testing.T) {
|
|
|
// Create a file
|
|
|
file := setupFile("test", []int{0})
|
|
|
file.Size = 1
|
|
|
- m, f := setupSendReceiveFolder(t, file)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t, file)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
file.Blocks = []protocol.BlockInfo{blocks[1]}
|
|
|
file.Version = file.Version.Update(myID.Short())
|
|
@@ -471,8 +472,8 @@ func TestCopierCleanup(t *testing.T) {
|
|
|
func TestDeregisterOnFailInCopy(t *testing.T) {
|
|
|
file := setupFile("filex", []int{0, 2, 0, 0, 5, 0, 0, 8})
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
// Set up our evet subscription early
|
|
|
s := m.evLogger.Subscribe(events.ItemFinished)
|
|
@@ -571,8 +572,8 @@ func TestDeregisterOnFailInCopy(t *testing.T) {
|
|
|
func TestDeregisterOnFailInPull(t *testing.T) {
|
|
|
file := setupFile("filex", []int{0, 2, 0, 0, 5, 0, 0, 8})
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
// Set up our evet subscription early
|
|
|
s := m.evLogger.Subscribe(events.ItemFinished)
|
|
@@ -674,8 +675,8 @@ func TestDeregisterOnFailInPull(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestIssue3164(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
tmpDir := ffs.URI()
|
|
|
|
|
@@ -765,8 +766,8 @@ func TestDiffEmpty(t *testing.T) {
|
|
|
// option is true and the permissions do not match between the file on disk and
|
|
|
// in the db.
|
|
|
func TestDeleteIgnorePerms(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
f.IgnorePerms = true
|
|
|
|
|
@@ -803,8 +804,8 @@ func TestCopyOwner(t *testing.T) {
|
|
|
// Set up a folder with the CopyParentOwner bit and backed by a fake
|
|
|
// filesystem.
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
f.folder.FolderConfiguration = config.NewFolderConfiguration(m.id, f.ID, f.Label, fs.FilesystemTypeFake, "/TestCopyOwner")
|
|
|
f.folder.FolderConfiguration.CopyOwnershipFromParent = true
|
|
|
|
|
@@ -906,8 +907,8 @@ func TestCopyOwner(t *testing.T) {
|
|
|
// TestSRConflictReplaceFileByDir checks that a conflict is created when an existing file
|
|
|
// is replaced with a directory and versions are conflicting
|
|
|
func TestSRConflictReplaceFileByDir(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
name := "foo"
|
|
@@ -938,8 +939,8 @@ func TestSRConflictReplaceFileByDir(t *testing.T) {
|
|
|
// TestSRConflictReplaceFileByLink checks that a conflict is created when an existing file
|
|
|
// is replaced with a link and versions are conflicting
|
|
|
func TestSRConflictReplaceFileByLink(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
name := "foo"
|
|
@@ -971,8 +972,8 @@ func TestSRConflictReplaceFileByLink(t *testing.T) {
|
|
|
// TestDeleteBehindSymlink checks that we don't delete or schedule a scan
|
|
|
// when trying to delete a file behind a symlink.
|
|
|
func TestDeleteBehindSymlink(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
destDir := createTmpDir()
|
|
@@ -1022,8 +1023,8 @@ func TestDeleteBehindSymlink(t *testing.T) {
|
|
|
|
|
|
// Reproduces https://github.com/syncthing/syncthing/issues/6559
|
|
|
func TestPullCtxCancel(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
pullChan := make(chan pullBlockState)
|
|
|
finisherChan := make(chan *sharedPullerState)
|
|
@@ -1064,8 +1065,8 @@ func TestPullCtxCancel(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestPullDeleteUnscannedDir(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
dir := "foobar"
|
|
@@ -1093,8 +1094,8 @@ func TestPullDeleteUnscannedDir(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestPullCaseOnlyPerformFinish(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
name := "foo"
|
|
@@ -1154,8 +1155,8 @@ func TestPullCaseOnlySymlink(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func testPullCaseOnlyDirOrSymlink(t *testing.T, dir bool) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
ffs := f.Filesystem()
|
|
|
|
|
|
name := "foo"
|
|
@@ -1209,8 +1210,8 @@ func testPullCaseOnlyDirOrSymlink(t *testing.T, dir bool) {
|
|
|
}
|
|
|
|
|
|
func TestPullTempFileCaseConflict(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
copyChan := make(chan copyBlocksState, 1)
|
|
|
|
|
@@ -1235,8 +1236,8 @@ func TestPullTempFileCaseConflict(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestPullCaseOnlyRename(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
// tempNameConfl := fs.TempName(confl)
|
|
|
|
|
@@ -1278,8 +1279,8 @@ func TestPullSymlinkOverExistingWindows(t *testing.T) {
|
|
|
t.Skip()
|
|
|
}
|
|
|
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
name := "foo"
|
|
|
if fd, err := f.mtimefs.Create(name); err != nil {
|
|
@@ -1318,8 +1319,8 @@ func TestPullSymlinkOverExistingWindows(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestPullDeleteCaseConflict(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
name := "foo"
|
|
|
fi := protocol.FileInfo{Name: "Foo"}
|
|
@@ -1352,8 +1353,8 @@ func TestPullDeleteCaseConflict(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestPullDeleteIgnoreChildDir(t *testing.T) {
|
|
|
- m, f := setupSendReceiveFolder(t)
|
|
|
- defer cleanupSRFolder(f, m)
|
|
|
+ m, f, wcfgCancel := setupSendReceiveFolder(t)
|
|
|
+ defer cleanupSRFolder(f, m, wcfgCancel)
|
|
|
|
|
|
parent := "parent"
|
|
|
del := "ignored"
|