mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-09 14:50:56 +00:00
208 lines
4.0 KiB
Go
208 lines
4.0 KiB
Go
|
package fileset
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestGlobalSet(t *testing.T) {
|
||
|
m := NewSet()
|
||
|
|
||
|
local := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1000}, 0, 0, nil},
|
||
|
File{Key{"c", 1000}, 0, 0, nil},
|
||
|
File{Key{"d", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
remote := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1001}, 0, 0, nil},
|
||
|
File{Key{"c", 1002}, 0, 0, nil},
|
||
|
File{Key{"e", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
expectedGlobal := map[string]Key{
|
||
|
"a": local[0].Key,
|
||
|
"b": remote[1].Key,
|
||
|
"c": remote[2].Key,
|
||
|
"d": local[3].Key,
|
||
|
"e": remote[3].Key,
|
||
|
}
|
||
|
|
||
|
m.SetLocal(local)
|
||
|
m.SetRemote(1, remote)
|
||
|
|
||
|
if !reflect.DeepEqual(m.globalKey, expectedGlobal) {
|
||
|
t.Errorf("Global incorrect;\n%v !=\n%v", m.globalKey, expectedGlobal)
|
||
|
}
|
||
|
|
||
|
if lb := len(m.files); lb != 7 {
|
||
|
t.Errorf("Num files incorrect %d != 7\n%v", lb, m.files)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkSetLocal10k(b *testing.B) {
|
||
|
m := NewSet()
|
||
|
|
||
|
var local []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
local = append(local, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
var remote []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
remote = append(remote, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
m.SetRemote(1, remote)
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
m.SetLocal(local)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkSetLocal10(b *testing.B) {
|
||
|
m := NewSet()
|
||
|
|
||
|
var local []File
|
||
|
for i := 0; i < 10; i++ {
|
||
|
local = append(local, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
var remote []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
remote = append(remote, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
m.SetRemote(1, remote)
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
m.SetLocal(local)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkAddLocal10k(b *testing.B) {
|
||
|
m := NewSet()
|
||
|
|
||
|
var local []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
local = append(local, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
var remote []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
remote = append(remote, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
m.SetRemote(1, remote)
|
||
|
m.SetLocal(local)
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
b.StopTimer()
|
||
|
for j := range local {
|
||
|
local[j].Key.Version++
|
||
|
}
|
||
|
b.StartTimer()
|
||
|
m.AddLocal(local)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func BenchmarkAddLocal10(b *testing.B) {
|
||
|
m := NewSet()
|
||
|
|
||
|
var local []File
|
||
|
for i := 0; i < 10; i++ {
|
||
|
local = append(local, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
var remote []File
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
remote = append(remote, File{Key{fmt.Sprintf("file%d"), 1000}, 0, 0, nil})
|
||
|
}
|
||
|
|
||
|
m.SetRemote(1, remote)
|
||
|
m.SetLocal(local)
|
||
|
|
||
|
b.ResetTimer()
|
||
|
for i := 0; i < b.N; i++ {
|
||
|
for j := range local {
|
||
|
local[j].Key.Version++
|
||
|
}
|
||
|
m.AddLocal(local)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGlobalReset(t *testing.T) {
|
||
|
m := NewSet()
|
||
|
|
||
|
local := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1000}, 0, 0, nil},
|
||
|
File{Key{"c", 1000}, 0, 0, nil},
|
||
|
File{Key{"d", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
remote := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1001}, 0, 0, nil},
|
||
|
File{Key{"c", 1002}, 0, 0, nil},
|
||
|
File{Key{"e", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
expectedGlobalKey := map[string]Key{
|
||
|
"a": local[0].Key,
|
||
|
"b": local[1].Key,
|
||
|
"c": local[2].Key,
|
||
|
"d": local[3].Key,
|
||
|
}
|
||
|
|
||
|
m.SetLocal(local)
|
||
|
m.SetRemote(1, remote)
|
||
|
m.SetRemote(1, nil)
|
||
|
|
||
|
if !reflect.DeepEqual(m.globalKey, expectedGlobalKey) {
|
||
|
t.Errorf("Global incorrect;\n%v !=\n%v", m.globalKey, expectedGlobalKey)
|
||
|
}
|
||
|
|
||
|
if lb := len(m.files); lb != 4 {
|
||
|
t.Errorf("Num files incorrect %d != 4\n%v", lb, m.files)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestNeed(t *testing.T) {
|
||
|
m := NewSet()
|
||
|
|
||
|
local := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1000}, 0, 0, nil},
|
||
|
File{Key{"c", 1000}, 0, 0, nil},
|
||
|
File{Key{"d", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
remote := []File{
|
||
|
File{Key{"a", 1000}, 0, 0, nil},
|
||
|
File{Key{"b", 1001}, 0, 0, nil},
|
||
|
File{Key{"c", 1002}, 0, 0, nil},
|
||
|
File{Key{"e", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
shouldNeed := []File{
|
||
|
File{Key{"b", 1001}, 0, 0, nil},
|
||
|
File{Key{"c", 1002}, 0, 0, nil},
|
||
|
File{Key{"e", 1000}, 0, 0, nil},
|
||
|
}
|
||
|
|
||
|
m.SetLocal(local)
|
||
|
m.SetRemote(1, remote)
|
||
|
|
||
|
need := m.Need(0)
|
||
|
if !reflect.DeepEqual(need, shouldNeed) {
|
||
|
t.Errorf("Need incorrect;\n%v !=\n%v", need, shouldNeed)
|
||
|
}
|
||
|
}
|