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) } } */