77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package mdb
|
|
|
|
/*
|
|
func TestLogShip(t *testing.T) {
|
|
type Item struct {
|
|
ID uint64
|
|
Name string
|
|
}
|
|
|
|
newDB := func(root string, primary bool) (*Database, *Collection[Item]) {
|
|
var db *Database
|
|
if primary {
|
|
db = NewPrimary(root)
|
|
} else {
|
|
db = NewSecondary(root)
|
|
}
|
|
c := NewCollection(db, "collection", func(i *Item) uint64 { return i.ID })
|
|
NewBTreeIndex(c,
|
|
func(i, j *Item) bool { return i.Name < j.Name },
|
|
func(i *Item) bool { return i.Name != "" })
|
|
return db, c
|
|
}
|
|
|
|
root1 := filepath.Join(os.TempDir(), randString())
|
|
root2 := filepath.Join(os.TempDir(), randString())
|
|
//log.Print(root1, " --> ", root2)
|
|
defer os.RemoveAll(root1)
|
|
defer os.RemoveAll(root2)
|
|
|
|
dbLeader, colLeader := newDB(root1, true)
|
|
dbLeader.Start()
|
|
defer dbLeader.Close()
|
|
|
|
dbFollower, _ := newDB(root2, false)
|
|
dbFollower.Start()
|
|
defer dbFollower.Close()
|
|
|
|
c1, c2 := net.Pipe()
|
|
go dbLeader.SyncSend(c1)
|
|
go dbFollower.SyncRecv(c2)
|
|
|
|
item1 := Item{1, "one"}
|
|
item2 := Item{2, ""}
|
|
item3 := Item{3, "three"}
|
|
item4 := Item{4, ""}
|
|
item5 := Item{5, "five"}
|
|
|
|
item1, _ = colLeader.Insert(item1)
|
|
item2, _ = colLeader.Insert(item2)
|
|
item3, _ = colLeader.Insert(item3)
|
|
item4, _ = colLeader.Insert(item4)
|
|
item5, _ = colLeader.Insert(item5)
|
|
colLeader.Delete(item2.ID)
|
|
|
|
colLeader.Update(item4.ID, func(old Item) (Item, error) {
|
|
old.Name = "UPDATED"
|
|
return old, nil
|
|
})
|
|
|
|
dbLeader.waitForWAL()
|
|
dbFollower.waitForWAL()
|
|
|
|
dbLeader, colLeader = newDB(root1, true)
|
|
dbLeader.Start()
|
|
dbFollower, colFollower := newDB(root2, false)
|
|
dbFollower.Start()
|
|
|
|
m1 := colLeader.items.m
|
|
m2 := colFollower.items.m
|
|
|
|
if len(m1) != len(m2) {
|
|
t.Fatal(m1, m2)
|
|
}
|
|
|
|
}
|
|
*/
|