mirror of
https://github.com/rclone/rclone.git
synced 2025-12-21 18:53:34 +00:00
Warn about duplicate files when syncing - fixes #1506
Error about unsorted directories and test thoroughly
This commit is contained in:
129
fs/sync_internal_test.go
Normal file
129
fs/sync_internal_test.go
Normal file
@@ -0,0 +1,129 @@
|
||||
// Internal tests for sync/copy/move
|
||||
|
||||
package fs
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestMatchListings(t *testing.T) {
|
||||
var (
|
||||
a = mockObject("a")
|
||||
b = mockObject("b")
|
||||
c = mockObject("c")
|
||||
d = mockObject("d")
|
||||
)
|
||||
|
||||
for _, test := range []struct {
|
||||
what string
|
||||
input DirEntries // pairs of input src, dst
|
||||
srcOnly DirEntries
|
||||
dstOnly DirEntries
|
||||
matches []matchPair // pairs of output
|
||||
}{
|
||||
{
|
||||
what: "only src or dst",
|
||||
input: DirEntries{
|
||||
a, nil,
|
||||
b, nil,
|
||||
c, nil,
|
||||
d, nil,
|
||||
},
|
||||
srcOnly: DirEntries{
|
||||
a, b, c, d,
|
||||
},
|
||||
},
|
||||
{
|
||||
what: "typical sync #1",
|
||||
input: DirEntries{
|
||||
a, nil,
|
||||
b, b,
|
||||
nil, c,
|
||||
nil, d,
|
||||
},
|
||||
srcOnly: DirEntries{
|
||||
a,
|
||||
},
|
||||
dstOnly: DirEntries{
|
||||
c, d,
|
||||
},
|
||||
matches: []matchPair{
|
||||
{b, b},
|
||||
},
|
||||
},
|
||||
{
|
||||
what: "typical sync #2",
|
||||
input: DirEntries{
|
||||
a, a,
|
||||
b, b,
|
||||
nil, c,
|
||||
d, d,
|
||||
},
|
||||
dstOnly: DirEntries{
|
||||
c,
|
||||
},
|
||||
matches: []matchPair{
|
||||
{a, a},
|
||||
{b, b},
|
||||
{d, d},
|
||||
},
|
||||
},
|
||||
{
|
||||
what: "One duplicate",
|
||||
input: DirEntries{
|
||||
a, a,
|
||||
a, nil,
|
||||
},
|
||||
matches: []matchPair{
|
||||
{a, a},
|
||||
},
|
||||
},
|
||||
{
|
||||
what: "Two duplicates",
|
||||
input: DirEntries{
|
||||
a, a,
|
||||
a, a,
|
||||
a, nil,
|
||||
},
|
||||
matches: []matchPair{
|
||||
{a, a},
|
||||
},
|
||||
},
|
||||
{
|
||||
what: "Out of order",
|
||||
input: DirEntries{
|
||||
c, nil,
|
||||
b, b,
|
||||
a, nil,
|
||||
},
|
||||
srcOnly: DirEntries{
|
||||
c,
|
||||
},
|
||||
dstOnly: DirEntries{
|
||||
b,
|
||||
},
|
||||
},
|
||||
} {
|
||||
var srcList, dstList DirEntries
|
||||
for i := 0; i < len(test.input); i += 2 {
|
||||
src, dst := test.input[i], test.input[i+1]
|
||||
if src != nil {
|
||||
srcList = append(srcList, src)
|
||||
}
|
||||
if dst != nil {
|
||||
dstList = append(dstList, dst)
|
||||
}
|
||||
}
|
||||
srcOnly, dstOnly, matches := matchListings(srcList, dstList)
|
||||
assert.Equal(t, test.srcOnly, srcOnly, test.what)
|
||||
assert.Equal(t, test.dstOnly, dstOnly, test.what)
|
||||
assert.Equal(t, test.matches, matches, test.what)
|
||||
// now swap src and dst
|
||||
dstOnly, srcOnly, matches = matchListings(dstList, srcList)
|
||||
assert.Equal(t, test.srcOnly, srcOnly, test.what)
|
||||
assert.Equal(t, test.dstOnly, dstOnly, test.what)
|
||||
assert.Equal(t, test.matches, matches, test.what)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user