diff --git a/cmd/bisync/bisync_test.go b/cmd/bisync/bisync_test.go index ac4e34429..ef3430109 100644 --- a/cmd/bisync/bisync_test.go +++ b/cmd/bisync/bisync_test.go @@ -66,7 +66,7 @@ var initDate = time.Date(2000, time.January, 1, 0, 0, 0, 0, bisync.TZ) // go test ./cmd/bisync -remote local -golden // go test ./cmd/bisync -remote local -case extended_filenames // go run ./fstest/test_all -run '^TestBisync.*$' -timeout 3h -verbose -maxtries 5 -// go run ./fstest/test_all -remotes local,TestCrypt:,TestDrive:,TestOneDrive:,TestOneDriveBusiness:,TestDropbox:,TestCryptDrive:,TestOpenDrive:,TestChunker:,:memory:,TestCryptNoEncryption:,TestCombine:DirA,TestFTPRclone:,TestWebdavRclone:,TestS3Rclone:,TestSFTPRclone:,TestSFTPRcloneSSH: -run '^TestBisync.*$' -timeout 3h -verbose -maxtries 5 +// go run ./fstest/test_all -remotes local,TestCrypt:,TestDrive:,TestOneDrive:,TestOneDriveBusiness:,TestDropbox:,TestCryptDrive:,TestOpenDrive:,TestChunker:,:memory:,TestCryptNoEncryption:,TestCombine:DirA,TestFTPRclone:,TestWebdavRclone:,TestS3Rclone:,TestSFTPRclone:,TestSFTPRcloneSSH:,TestNextcloud:,TestChunkerNometaLocal:,TestChunkerChunk3bLocal:,TestChunkerLocal:,TestChunkerChunk3bNometaLocal:,TestChunkerCompatLocal: -run '^TestBisync.*$' -timeout 3h -verbose -maxtries 5 // go test -timeout 3h -run '^TestBisync.*$' github.com/rclone/rclone/cmd/bisync -remote TestDrive:Bisync -v // go test -timeout 3h -run '^TestBisyncRemoteRemote/basic$' github.com/rclone/rclone/cmd/bisync -remote TestDropbox:Bisync -v @@ -93,6 +93,8 @@ var logReplacements = []string{ `^INFO : .*?: Crypt detected! Using cryptcheck instead of check. \(Use --size-only or --ignore-checksum to disable\)$`, dropMe, // ignore drive info messages `^NOTICE:.*?Files of unknown size \(such as Google Docs\) do not sync reliably with --checksum or --size-only\. Consider using modtime instead \(the default\) or --drive-skip-gdocs.*?$`, dropMe, + // ignore cache backend cache expired messages + `^INFO : .*cache expired.*$`, dropMe, // ignore differences in backend features `^.*?"HashType1":.*?$`, dropMe, `^.*?"HashType2":.*?$`, dropMe, @@ -254,7 +256,7 @@ func testBisync(t *testing.T, path1, path2 string) { baseDir, err := os.Getwd() require.NoError(t, err, "get current directory") - randName := "bisync." + time.Now().Format("150405-") + random.String(5) + randName := "bisync-" + time.Now().Format("150405-") + random.String(5) // AzureBlob doesn't like dots tempDir := filepath.Join(os.TempDir(), randName) workDir := filepath.Join(tempDir, "workdir") @@ -319,7 +321,8 @@ func testBisync(t *testing.T, path1, path2 string) { testCase = strings.ReplaceAll(testCase, "-", "_") testCase = strings.TrimPrefix(testCase, "test_") t.Run(testCase, func(childTest *testing.T) { - b.runTestCase(ctx, childTest, testCase) + bCopy := *b + bCopy.runTestCase(ctx, childTest, testCase) }) } } @@ -366,13 +369,58 @@ func (b *bisyncTest) runTestCase(ctx context.Context, t *testing.T, testCase str }) require.NoError(b.t, err, "jamming initial dates") + // copy to a new unique initdir and datadir so concurrent tests don't interfere with each other + ctxNoDsStore, _ := ctxNoDsStore(ctx, b.t) + makeUnique := func(label, oldPath string) (newPath string) { + newPath = oldPath + info, err := os.Stat(oldPath) + if err == nil && info.IsDir() { // datadir is optional + oldFs, err := cache.Get(ctx, oldPath) + require.NoError(b.t, err) + newPath = b.tempDir + "/" + label + "/" + "test_" + b.testCase + "-" + random.String(8) + newFs, err := cache.Get(ctx, newPath) + require.NoError(b.t, err) + require.NoError(b.t, sync.CopyDir(ctxNoDsStore, newFs, oldFs, true), "setting up "+label) + } + return newPath + } + b.initDir = makeUnique("initdir", b.initDir) + b.dataDir = makeUnique("datadir", b.dataDir) + // Prepare initial content b.cleanupCase(ctx) + fstest.CheckListingWithPrecision(b.t, b.fs1, []fstest.Item{}, []string{}, b.fs1.Precision()) // verify starting from empty + fstest.CheckListingWithPrecision(b.t, b.fs2, []fstest.Item{}, []string{}, b.fs2.Precision()) initFs, err := cache.Get(ctx, b.initDir) require.NoError(b.t, err) - ctxNoDsStore, _ := ctxNoDsStore(ctx, b.t) + + // verify pre-test equality (garbage in, garbage out!) + srcObjs, srcDirs, err := walk.GetAll(ctxNoDsStore, initFs, "", false, -1) + assert.NoError(b.t, err) + items := []fstest.Item{} + for _, obj := range srcObjs { + require.False(b.t, strings.Contains(obj.Remote(), ".partial")) + rc, err := operations.Open(ctxNoDsStore, obj) + assert.NoError(b.t, err) + bytes := make([]byte, obj.Size()) + _, err = rc.Read(bytes) + assert.NoError(b.t, err) + assert.NoError(b.t, rc.Close()) + item := fstest.NewItem(norm.NFC.String(obj.Remote()), string(bytes), obj.ModTime(ctxNoDsStore)) + items = append(items, item) + } + dirs := []string{} + for _, dir := range srcDirs { + dirs = append(dirs, norm.NFC.String(dir.Remote())) + } + log.Printf("checking initFs %s", initFs) + fstest.CheckListingWithPrecision(b.t, initFs, items, dirs, initFs.Precision()) require.NoError(b.t, sync.CopyDir(ctxNoDsStore, b.fs1, initFs, true), "setting up path1") + log.Printf("checking Path1 %s", b.fs1) + fstest.CheckListingWithPrecision(b.t, b.fs1, items, dirs, b.fs1.Precision()) require.NoError(b.t, sync.CopyDir(ctxNoDsStore, b.fs2, initFs, true), "setting up path2") + log.Printf("checking path2 %s", b.fs2) + fstest.CheckListingWithPrecision(b.t, b.fs2, items, dirs, b.fs2.Precision()) // Create log file b.mkdir(b.workDir) @@ -885,9 +933,11 @@ func (b *bisyncTest) checkPreReqs(ctx context.Context, opt *bisync.Options) (con if b.testCase == "normalization" || b.testCase == "extended_char_paths" || b.testCase == "extended_filenames" { // test whether remote is capable of running test - const chars = "ě_{chr:81}{chr:fe}{spc}áñhࢺ_測試Русский_ěáñ👸🏼🧝🏾‍♀️💆🏿‍♂️🐨🤙🏼🤮🧑🏻‍🔧🧑‍🔬éö" + const chars = "ě{chr:81}{chr:fe}{spc}áñhࢺ_測試Рускийěáñ👸🏼🧝🏾‍♀️💆🏿‍♂️🐨🤙🏼🤮🧑🏻‍🔧🧑‍🔬éö" testfilename1 := splitLine(norm.NFD.String(norm.NFC.String(chars)))[0] testfilename2 := splitLine(norm.NFC.String(norm.NFD.String(chars)))[0] + tempDir, err := cache.Get(ctx, b.tempDir) + require.NoError(b.t, err) preTest := func(f fs.Fs, testfilename string) string { in := bytes.NewBufferString(testfilename) objinfo := object.NewStaticObjectInfo(testfilename, initDate, int64(len(testfilename)), true, nil, nil) @@ -902,8 +952,21 @@ func (b *bisyncTest) checkPreReqs(ctx context.Context, opt *bisync.Options) (con // we can still deal with this as long as both remotes auto-convert the same way. b.t.Logf("Warning: this remote seems to auto-convert special characters (testcase: %s) (expected: \n%s (%s) actual: \n%s (%s))\n (fs: %s) \n%v", b.testCase, testfilename, detectEncoding(testfilename), entries[0].Remote(), detectEncoding(entries[0].Remote()), f, diffStr) } - err = obj.Remove(ctx) + // test whether we can fix-case + ctxFixCase, ci := fs.AddConfig(ctx) + ci.FixCase = true + transformedName := strings.ToLower(obj.Remote()) + src, err := tempDir.Put(ctx, in, object.NewStaticObjectInfo(transformedName, initDate, int64(len(transformedName)), true, nil, nil)) // local require.NoError(b.t, err) + upperObj, err := operations.Copy(ctxFixCase, f, nil, transformedName, src) + if err != nil || upperObj.Remote() != transformedName { + b.t.Skipf("Fs is incapable of running test as can't fix-case, skipping: %s (expected: \n%s (%s) actual: \n%s (%v))\n (fs: %s) \n", b.testCase, transformedName, detectEncoding(transformedName), upperObj.Remote(), err, f) + } + require.NoError(b.t, src.Remove(ctx)) + require.NoError(b.t, obj.Remove(ctx)) + if obj != nil { + require.NoError(b.t, upperObj.Remove(ctx)) + } return entries[0].Remote() } got1 := preTest(b.fs1, testfilename1) @@ -1444,6 +1507,9 @@ func (b *bisyncTest) mangleResult(dir, file string, golden bool) string { lines := strings.Split(s, eol) pathReplacer := b.newReplacer(true) + if b.fs1.Hashes() == hash.Set(hash.None) || b.fs2.Hashes() == hash.Set(hash.None) { + logReplacements = append(logReplacements, `^.*{hashtype} differ.*$`, dropMe) + } rep := logReplacements if b.testCase == "dry_run" { rep = append(rep, dryrunReplacements...) @@ -1799,6 +1865,8 @@ func ctxNoDsStore(ctx context.Context, t *testing.T) (context.Context, *filter.F ctxNoDsStore, fi := filter.AddConfig(ctx) err := fi.AddRule("- .DS_Store") require.NoError(t, err) + err = fi.AddRule("- *.partial") + require.NoError(t, err) err = fi.AddRule("+ **") require.NoError(t, err) return ctxNoDsStore, fi diff --git a/cmd/bisync/resolve.go b/cmd/bisync/resolve.go index e9c57a7d0..534c81db7 100644 --- a/cmd/bisync/resolve.go +++ b/cmd/bisync/resolve.go @@ -120,14 +120,16 @@ func (b *bisyncRun) setResolveDefaults(ctx context.Context) error { return nil } -type renames map[string]renamesInfo // [originalName]newName (remember the originalName may have an alias) -// the newName may be the same as the old name (if winner), but should not be blank, unless we're deleting. -// the oldNames may not match each other, if we're normalizing case or unicode -// all names should be "remotes" (relative names, without base path) -type renamesInfo struct { - path1 namePair - path2 namePair -} +type ( + renames map[string]renamesInfo // [originalName]newName (remember the originalName may have an alias) + // the newName may be the same as the old name (if winner), but should not be blank, unless we're deleting. + // the oldNames may not match each other, if we're normalizing case or unicode + // all names should be "remotes" (relative names, without base path) + renamesInfo struct { + path1 namePair + path2 namePair + } +) type namePair struct { oldName string newName string @@ -395,26 +397,26 @@ func (b *bisyncRun) resolveNewerOlder(t1, t2 time.Time, remote1, remote2 string, } if t1.After(t2) { if prefer == PreferNewer { - fs.Infof(remote1, "Path1 is newer. Path1: %v, Path2: %v, Difference: %s", t1, t2, t1.Sub(t2)) + fs.Infof(remote1, "Path1 is newer. Path1: %v, Path2: %v, Difference: %s", t1.Local(), t2.Local(), t1.Sub(t2)) return 1 } else if prefer == PreferOlder { - fs.Infof(remote1, "Path2 is older. Path1: %v, Path2: %v, Difference: %s", t1, t2, t1.Sub(t2)) + fs.Infof(remote1, "Path2 is older. Path1: %v, Path2: %v, Difference: %s", t1.Local(), t2.Local(), t1.Sub(t2)) return 2 } } else if t1.Before(t2) { if prefer == PreferNewer { - fs.Infof(remote1, "Path2 is newer. Path1: %v, Path2: %v, Difference: %s", t1, t2, t2.Sub(t1)) + fs.Infof(remote1, "Path2 is newer. Path1: %v, Path2: %v, Difference: %s", t1.Local(), t2.Local(), t2.Sub(t1)) return 2 } else if prefer == PreferOlder { - fs.Infof(remote1, "Path1 is older. Path1: %v, Path2: %v, Difference: %s", t1, t2, t2.Sub(t1)) + fs.Infof(remote1, "Path1 is older. Path1: %v, Path2: %v, Difference: %s", t1.Local(), t2.Local(), t2.Sub(t1)) return 1 } } if t1.Equal(t2) { - fs.Infof(remote1, "Winner cannot be determined as times are equal. Path1: %v, Path2: %v, Difference: %s", t1, t2, t2.Sub(t1)) + fs.Infof(remote1, "Winner cannot be determined as times are equal. Path1: %v, Path2: %v, Difference: %s", t1.Local(), t2.Local(), t2.Sub(t1)) return 0 } - fs.Errorf(remote1, "Winner cannot be determined. Path1: %v, Path2: %v", t1, t2) // shouldn't happen unless prefer is of wrong type + fs.Errorf(remote1, "Winner cannot be determined. Path1: %v, Path2: %v", t1.Local(), t2.Local()) // shouldn't happen unless prefer is of wrong type return 0 } diff --git a/cmd/bisync/testdata/bisync_vscode_debuggers_launch.json b/cmd/bisync/testdata/bisync_vscode_debuggers_launch.json index 8cd1eb198..cdf9c83ba 100644 --- a/cmd/bisync/testdata/bisync_vscode_debuggers_launch.json +++ b/cmd/bisync/testdata/bisync_vscode_debuggers_launch.json @@ -58537,6 +58537,654 @@ "program": "./cmd/bisync", "args": ["-remote", "TestQuatrix:", "-remote2", "TestQuatrix:", "-case", "test_volatile", "-no-cleanup"] }, + { + "name": "Test TestUlozto: test_all_changed LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_all_changed", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_all_changed RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_all_changed", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_all_changed RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_all_changed", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_backupdir LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_backupdir", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_backupdir RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_backupdir", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_backupdir RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_backupdir", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_basic LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_basic", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_basic RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_basic", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_basic RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_basic", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_changes LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_changes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_changes RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_changes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_changes RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_changes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_check_access", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_check_access", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_check_access", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access_filters LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_check_access_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access_filters RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_check_access_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_access_filters RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_check_access_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_filename LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_check_filename", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_filename RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_check_filename", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_filename RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_check_filename", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_sync LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_check_sync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_sync RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_check_sync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_check_sync RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_check_sync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_compare_all LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_compare_all", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_compare_all RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_compare_all", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_compare_all RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_compare_all", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_createemptysrcdirs LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_createemptysrcdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_createemptysrcdirs RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_createemptysrcdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_createemptysrcdirs RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_createemptysrcdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_dry_run LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_dry_run", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_dry_run RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_dry_run", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_dry_run RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_dry_run", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_equal LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_equal", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_equal RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_equal", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_equal RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_equal", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_char_paths LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_extended_char_paths", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_char_paths RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_extended_char_paths", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_char_paths RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_extended_char_paths", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_filenames LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_extended_filenames", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_filenames RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_extended_filenames", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_extended_filenames RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_extended_filenames", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filters LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filters RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filters RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_filters", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filtersfile_checks LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_filtersfile_checks", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filtersfile_checks RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_filtersfile_checks", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_filtersfile_checks RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_filtersfile_checks", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_ignorelistingchecksum LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_ignorelistingchecksum", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_ignorelistingchecksum RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_ignorelistingchecksum", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_ignorelistingchecksum RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_ignorelistingchecksum", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path1 LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_max_delete_path1", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path1 RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_max_delete_path1", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path1 RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_max_delete_path1", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path2_force LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_max_delete_path2_force", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path2_force RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_max_delete_path2_force", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_max_delete_path2_force RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_max_delete_path2_force", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_nomodtime LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_nomodtime", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_nomodtime RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_nomodtime", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_nomodtime RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_nomodtime", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_normalization LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_normalization", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_normalization RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_normalization", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_normalization RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_normalization", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rclone_args LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_rclone_args", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rclone_args RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_rclone_args", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rclone_args RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_rclone_args", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resolve LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_resolve", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resolve RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_resolve", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resolve RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_resolve", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_resync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_resync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_resync", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync_modes LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_resync_modes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync_modes RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_resync_modes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_resync_modes RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_resync_modes", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rmdirs LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_rmdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rmdirs RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_rmdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_rmdirs RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_rmdirs", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_volatile LocalRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "local", "-remote2", "TestUlozto:", "-case", "test_volatile", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_volatile RemoteLocal", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "local", "-case", "test_volatile", "-no-cleanup"] + }, + { + "name": "Test TestUlozto: test_volatile RemoteRemote", + "type": "go", + "request": "launch", + "mode": "test", + "program": "./cmd/bisync", + "args": ["-remote", "TestUlozto:", "-remote2", "TestUlozto:", "-case", "test_volatile", "-no-cleanup"] + }, ] } \ No newline at end of file