aboutsummaryrefslogtreecommitdiff
path: root/lib/model/model_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/model/model_test.go')
-rw-r--r--lib/model/model_test.go94
1 files changed, 47 insertions, 47 deletions
diff --git a/lib/model/model_test.go b/lib/model/model_test.go
index efc0ad4cf..0032790af 100644
--- a/lib/model/model_test.go
+++ b/lib/model/model_test.go
@@ -52,8 +52,8 @@ func newState(t testing.TB, cfg config.Configuration) (*testModel, context.Cance
return m, cancel
}
-func createClusterConfig(remote protocol.DeviceID, ids ...string) protocol.ClusterConfig {
- cc := protocol.ClusterConfig{
+func createClusterConfig(remote protocol.DeviceID, ids ...string) *protocol.ClusterConfig {
+ cc := &protocol.ClusterConfig{
Folders: make([]protocol.Folder, len(ids)),
}
for i, id := range ids {
@@ -65,7 +65,7 @@ func createClusterConfig(remote protocol.DeviceID, ids ...string) protocol.Clust
return addFolderDevicesToClusterConfig(cc, remote)
}
-func addFolderDevicesToClusterConfig(cc protocol.ClusterConfig, remote protocol.DeviceID) protocol.ClusterConfig {
+func addFolderDevicesToClusterConfig(cc *protocol.ClusterConfig, remote protocol.DeviceID) *protocol.ClusterConfig {
for i := range cc.Folders {
cc.Folders[i].Devices = []protocol.Device{
{ID: myID},
@@ -94,7 +94,7 @@ func TestRequest(t *testing.T) {
m.ScanFolder("default")
// Existing, shared file
- res, err := m.Request(device1Conn, "default", "foo", 0, 6, 0, nil, 0, false)
+ res, err := m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "foo", Size: 6})
if err != nil {
t.Fatal(err)
}
@@ -104,35 +104,35 @@ func TestRequest(t *testing.T) {
}
// Existing, nonshared file
- _, err = m.Request(device2Conn, "default", "foo", 0, 6, 0, nil, 0, false)
+ _, err = m.Request(device2Conn, &protocol.Request{Folder: "default", Name: "foo", Size: 6})
if err == nil {
t.Error("Unexpected nil error on insecure file read")
}
// Nonexistent file
- _, err = m.Request(device1Conn, "default", "nonexistent", 0, 6, 0, nil, 0, false)
+ _, err = m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "nonexistent", Size: 6})
if err == nil {
t.Error("Unexpected nil error on insecure file read")
}
// Shared folder, but disallowed file name
- _, err = m.Request(device1Conn, "default", "../walk.go", 0, 6, 0, nil, 0, false)
+ _, err = m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "../walk.go", Size: 6})
if err == nil {
t.Error("Unexpected nil error on insecure file read")
}
- // Negative offset
- _, err = m.Request(device1Conn, "default", "foo", 0, -4, 0, nil, 0, false)
+ // Negative size
+ _, err = m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "foo", Size: -4})
if err == nil {
t.Error("Unexpected nil error on insecure file read")
}
// Larger block than available
- _, err = m.Request(device1Conn, "default", "foo", 0, 42, 0, []byte("hash necessary but not checked"), 0, false)
+ _, err = m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "foo", Size: 42, Hash: []byte("hash necessary but not checked")})
if err == nil {
t.Error("Unexpected nil error on read past end of file")
}
- _, err = m.Request(device1Conn, "default", "foo", 0, 42, 0, nil, 0, false)
+ _, err = m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "foo", Size: 42})
if err != nil {
t.Error("Unexpected error when large read should be permitted")
}
@@ -168,11 +168,11 @@ func benchmarkIndex(b *testing.B, nfiles int) {
defer cleanupModelAndRemoveDir(m, fcfg.Filesystem(nil).URI())
files := genFiles(nfiles)
- must(b, m.Index(device1Conn, fcfg.ID, files))
+ must(b, m.Index(device1Conn, &protocol.Index{Folder: fcfg.ID, Files: files}))
b.ResetTimer()
for i := 0; i < b.N; i++ {
- must(b, m.Index(device1Conn, fcfg.ID, files))
+ must(b, m.Index(device1Conn, &protocol.Index{Folder: fcfg.ID, Files: files}))
}
b.ReportAllocs()
}
@@ -197,11 +197,11 @@ func benchmarkIndexUpdate(b *testing.B, nfiles, nufiles int) {
files := genFiles(nfiles)
ufiles := genFiles(nufiles)
- must(b, m.Index(device1Conn, fcfg.ID, files))
+ must(b, m.Index(device1Conn, &protocol.Index{Folder: fcfg.ID, Files: files}))
b.ResetTimer()
for i := 0; i < b.N; i++ {
- must(b, m.IndexUpdate(device1Conn, fcfg.ID, ufiles))
+ must(b, m.IndexUpdate(device1Conn, &protocol.IndexUpdate{Folder: fcfg.ID, Files: ufiles}))
}
b.ReportAllocs()
}
@@ -218,7 +218,7 @@ func BenchmarkRequestOut(b *testing.B) {
fc.addFile(f.Name, 0o644, protocol.FileInfoTypeFile, []byte("some data to return"))
}
m.AddConnection(fc, protocol.Hello{})
- must(b, m.Index(device1Conn, "default", files))
+ must(b, m.Index(device1Conn, &protocol.Index{Folder: "default", Files: files}))
b.ResetTimer()
for i := 0; i < b.N; i++ {
@@ -247,7 +247,7 @@ func BenchmarkRequestInSingleFile(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
- if _, err := m.Request(device1Conn, "default", "request/for/a/file/in/a/couple/of/dirs/128k", 0, 128<<10, 0, nil, 0, false); err != nil {
+ if _, err := m.Request(device1Conn, &protocol.Request{Folder: "default", Name: "request/for/a/file/in/a/couple/of/dirs/128k", Size: 128 << 10}); err != nil {
b.Error(err)
}
}
@@ -634,7 +634,7 @@ func TestIntroducer(t *testing.T) {
},
},
})
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{})
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{})
if _, ok := m.cfg.Device(device2); ok {
t.Error("device 2 should have been removed")
@@ -686,7 +686,7 @@ func TestIntroducer(t *testing.T) {
},
},
})
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{})
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{})
if _, ok := m.cfg.Device(device2); !ok {
t.Error("device 2 should not have been removed")
@@ -794,7 +794,7 @@ func TestIntroducer(t *testing.T) {
},
},
})
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{})
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{})
if _, ok := m.cfg.Device(device2); !ok {
t.Error("device 2 should not have been removed")
@@ -847,7 +847,7 @@ func TestIntroducer(t *testing.T) {
})
defer cleanupModel(m)
defer cancel()
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{})
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{})
if _, ok := m.cfg.Device(device2); !ok {
t.Error("device 2 should not have been removed")
@@ -1035,10 +1035,10 @@ func TestAutoAcceptNewFolderPremutationsNoPanic(t *testing.T) {
cfg.Folders = append(cfg.Folders, fcfg)
}
m, cancel := newState(t, cfg)
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{
Folders: []protocol.Folder{dev1folder},
})
- m.ClusterConfig(device2Conn, protocol.ClusterConfig{
+ m.ClusterConfig(device2Conn, &protocol.ClusterConfig{
Folders: []protocol.Folder{dev2folder},
})
cleanupModel(m)
@@ -1159,7 +1159,7 @@ func TestAutoAcceptNameConflict(t *testing.T) {
m, cancel := newState(t, defaultAutoAcceptCfg)
defer cleanupModel(m)
defer cancel()
- m.ClusterConfig(device1Conn, protocol.ClusterConfig{
+ m.ClusterConfig(device1Conn, &protocol.ClusterConfig{
Folders: []protocol.Folder{
{
ID: id,
@@ -1179,7 +1179,7 @@ func TestAutoAcceptPrefersLabel(t *testing.T) {
label := srand.String(8)
defer cleanupModel(m)
defer cancel()
- m.ClusterConfig(device1Conn, addFolderDevicesToClusterConfig(protocol.ClusterConfig{
+ m.ClusterConfig(device1Conn, addFolderDevicesToClusterConfig(&protocol.ClusterConfig{
Folders: []protocol.Folder{
{
ID: id,
@@ -1203,7 +1203,7 @@ func TestAutoAcceptFallsBackToID(t *testing.T) {
}
defer cleanupModel(m)
defer cancel()
- m.ClusterConfig(device1Conn, addFolderDevicesToClusterConfig(protocol.ClusterConfig{
+ m.ClusterConfig(device1Conn, addFolderDevicesToClusterConfig(&protocol.ClusterConfig{
Folders: []protocol.Folder{
{
ID: id,
@@ -1325,8 +1325,8 @@ func TestAutoAcceptEnc(t *testing.T) {
defer os.RemoveAll(id)
token := []byte("token")
- basicCC := func() protocol.ClusterConfig {
- return protocol.ClusterConfig{
+ basicCC := func() *protocol.ClusterConfig {
+ return &protocol.ClusterConfig{
Folders: []protocol.Folder{{
ID: id,
Label: id,
@@ -1336,7 +1336,7 @@ func TestAutoAcceptEnc(t *testing.T) {
// Earlier tests might cause the connection to get closed, thus ClusterConfig
// would panic.
- clusterConfig := func(deviceID protocol.DeviceID, cm protocol.ClusterConfig) {
+ clusterConfig := func(deviceID protocol.DeviceID, cm *protocol.ClusterConfig) {
conn := newFakeConnection(deviceID, m)
m.AddConnection(conn, protocol.Hello{})
m.ClusterConfig(conn, cm)
@@ -1808,7 +1808,7 @@ func TestGlobalDirectoryTree(t *testing.T) {
return string(bytes)
}
- must(t, m.Index(conn, "default", testdata))
+ must(t, m.Index(conn, &protocol.Index{Folder: "default", Files: testdata}))
result, _ := m.GlobalDirectoryTree("default", "", -1, false)
@@ -2015,7 +2015,7 @@ func benchmarkTree(b *testing.B, n1, n2 int) {
m.ScanFolder(fcfg.ID)
files := genDeepFiles(n1, n2)
- must(b, m.Index(device1Conn, fcfg.ID, files))
+ must(b, m.Index(device1Conn, &protocol.Index{Folder: fcfg.ID, Files: files}))
b.ResetTimer()
for i := 0; i < b.N; i++ {
@@ -2161,7 +2161,7 @@ func TestSharedWithClearedOnDisconnect(t *testing.T) {
conn2 := newFakeConnection(device2, m)
m.AddConnection(conn2, protocol.Hello{})
- m.ClusterConfig(conn1, protocol.ClusterConfig{
+ m.ClusterConfig(conn1, &protocol.ClusterConfig{
Folders: []protocol.Folder{
{
ID: "default",
@@ -2173,7 +2173,7 @@ func TestSharedWithClearedOnDisconnect(t *testing.T) {
},
},
})
- m.ClusterConfig(conn2, protocol.ClusterConfig{
+ m.ClusterConfig(conn2, &protocol.ClusterConfig{
Folders: []protocol.Folder{
{
ID: "default",
@@ -2426,7 +2426,7 @@ func TestRemoveDirWithContent(t *testing.T) {
file.Deleted = true
file.Version = file.Version.Update(device1.Short()).Update(device1.Short())
- must(t, m.IndexUpdate(conn, fcfg.ID, []protocol.FileInfo{dir, file}))
+ must(t, m.IndexUpdate(conn, &protocol.IndexUpdate{Folder: fcfg.ID, Files: []protocol.FileInfo{dir, file}}))
// Is there something we could trigger on instead of just waiting?
timeout := time.NewTimer(5 * time.Second)
@@ -2925,14 +2925,14 @@ func TestRequestLimit(t *testing.T) {
m.ScanFolder("default")
befReq := time.Now()
- first, err := m.Request(conn, "default", file, 0, 2000, 0, nil, 0, false)
+ first, err := m.Request(conn, &protocol.Request{Folder: "default", Name: file, Size: 2000})
if err != nil {
t.Fatalf("First request failed: %v", err)
}
reqDur := time.Since(befReq)
returned := make(chan struct{})
go func() {
- second, err := m.Request(conn, "default", file, 0, 2000, 0, nil, 0, false)
+ second, err := m.Request(conn, &protocol.Request{Folder: "default", Name: file, Size: 2000})
if err != nil {
t.Errorf("Second request failed: %v", err)
}
@@ -3594,7 +3594,7 @@ func TestScanDeletedROChangedOnSR(t *testing.T) {
}
// A remote must have the file, otherwise the deletion below is
// automatically resolved as not a ro-changed item.
- must(t, m.IndexUpdate(conn, fcfg.ID, []protocol.FileInfo{file}))
+ must(t, m.IndexUpdate(conn, &protocol.IndexUpdate{Folder: fcfg.ID, Files: []protocol.FileInfo{file}}))
must(t, ffs.Remove(name))
m.ScanFolders()
@@ -3708,9 +3708,9 @@ func TestIssue6961(t *testing.T) {
version := protocol.Vector{}.Update(device1.Short())
// Remote, valid and existing file
- must(t, m.Index(conn1, fcfg.ID, []protocol.FileInfo{{Name: name, Version: version, Sequence: 1}}))
+ must(t, m.Index(conn1, &protocol.Index{Folder: fcfg.ID, Files: []protocol.FileInfo{{Name: name, Version: version, Sequence: 1}}}))
// Remote, invalid (receive-only) and existing file
- must(t, m.Index(conn2, fcfg.ID, []protocol.FileInfo{{Name: name, RawInvalid: true, Sequence: 1}}))
+ must(t, m.Index(conn2, &protocol.Index{Folder: fcfg.ID, Files: []protocol.FileInfo{{Name: name, RawInvalid: true, Sequence: 1}}}))
// Create a local file
if fd, err := tfs.OpenFile(name, fs.OptCreate, 0o666); err != nil {
t.Fatal(err)
@@ -3736,7 +3736,7 @@ func TestIssue6961(t *testing.T) {
m.ScanFolders()
// Drop the remote index, add some other file.
- must(t, m.Index(conn2, fcfg.ID, []protocol.FileInfo{{Name: "bar", RawInvalid: true, Sequence: 1}}))
+ must(t, m.Index(conn2, &protocol.Index{Folder: fcfg.ID, Files: []protocol.FileInfo{{Name: "bar", RawInvalid: true, Sequence: 1}}}))
// Pause and unpause folder to create new db.FileSet and thus recalculate everything
pauseFolder(t, wcfg, fcfg.ID, true)
@@ -3759,7 +3759,7 @@ func TestCompletionEmptyGlobal(t *testing.T) {
m.mut.Unlock()
files[0].Deleted = true
files[0].Version = files[0].Version.Update(device1.Short())
- must(t, m.IndexUpdate(conn, fcfg.ID, files))
+ must(t, m.IndexUpdate(conn, &protocol.IndexUpdate{Folder: fcfg.ID, Files: files}))
comp := m.testCompletion(protocol.LocalDeviceID, fcfg.ID)
if comp.CompletionPct != 95 {
t.Error("Expected completion of 95%, got", comp.CompletionPct)
@@ -3780,26 +3780,26 @@ func TestNeedMetaAfterIndexReset(t *testing.T) {
// Start with two remotes having one file, then both deleting it, then
// only one adding it again.
- must(t, m.Index(conn1, fcfg.ID, files))
- must(t, m.Index(conn2, fcfg.ID, files))
+ must(t, m.Index(conn1, &protocol.Index{Folder: fcfg.ID, Files: files}))
+ must(t, m.Index(conn2, &protocol.Index{Folder: fcfg.ID, Files: files}))
seq++
files[0].SetDeleted(device2.Short())
files[0].Sequence = seq
- must(t, m.IndexUpdate(conn1, fcfg.ID, files))
- must(t, m.IndexUpdate(conn2, fcfg.ID, files))
+ must(t, m.IndexUpdate(conn1, &protocol.IndexUpdate{Folder: fcfg.ID, Files: files}))
+ must(t, m.IndexUpdate(conn2, &protocol.IndexUpdate{Folder: fcfg.ID, Files: files}))
seq++
files[0].Deleted = false
files[0].Size = 20
files[0].Version = files[0].Version.Update(device1.Short())
files[0].Sequence = seq
- must(t, m.IndexUpdate(conn1, fcfg.ID, files))
+ must(t, m.IndexUpdate(conn1, &protocol.IndexUpdate{Folder: fcfg.ID, Files: files}))
if comp := m.testCompletion(device2, fcfg.ID); comp.NeedItems != 1 {
t.Error("Expected one needed item for device2, got", comp.NeedItems)
}
// Pretend we had an index reset on device 1
- must(t, m.Index(conn1, fcfg.ID, files))
+ must(t, m.Index(conn1, &protocol.Index{Folder: fcfg.ID, Files: files}))
if comp := m.testCompletion(device2, fcfg.ID); comp.NeedItems != 1 {
t.Error("Expected one needed item for device2, got", comp.NeedItems)
}