core, ethdb, tests, trie: introduce database snapshot (#24486)
This commit is contained in:
@ -313,6 +313,68 @@ func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Snapshot", func(t *testing.T) {
|
||||
db := New()
|
||||
defer db.Close()
|
||||
|
||||
initial := map[string]string{
|
||||
"k1": "v1", "k2": "v2", "k3": "", "k4": "",
|
||||
}
|
||||
for k, v := range initial {
|
||||
db.Put([]byte(k), []byte(v))
|
||||
}
|
||||
snapshot, err := db.NewSnapshot()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for k, v := range initial {
|
||||
got, err := snapshot.Get([]byte(k))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, []byte(v)) {
|
||||
t.Fatalf("Unexpected value want: %v, got %v", v, got)
|
||||
}
|
||||
}
|
||||
|
||||
// Flush more modifications into the database, ensure the snapshot
|
||||
// isn't affected.
|
||||
var (
|
||||
update = map[string]string{"k1": "v1-b", "k3": "v3-b"}
|
||||
insert = map[string]string{"k5": "v5-b"}
|
||||
delete = map[string]string{"k2": ""}
|
||||
)
|
||||
for k, v := range update {
|
||||
db.Put([]byte(k), []byte(v))
|
||||
}
|
||||
for k, v := range insert {
|
||||
db.Put([]byte(k), []byte(v))
|
||||
}
|
||||
for k := range delete {
|
||||
db.Delete([]byte(k))
|
||||
}
|
||||
for k, v := range initial {
|
||||
got, err := snapshot.Get([]byte(k))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, []byte(v)) {
|
||||
t.Fatalf("Unexpected value want: %v, got %v", v, got)
|
||||
}
|
||||
}
|
||||
for k := range insert {
|
||||
got, err := snapshot.Get([]byte(k))
|
||||
if err == nil || len(got) != 0 {
|
||||
t.Fatal("Unexpected value")
|
||||
}
|
||||
}
|
||||
for k := range delete {
|
||||
got, err := snapshot.Get([]byte(k))
|
||||
if err != nil || len(got) == 0 {
|
||||
t.Fatal("Unexpected deletion")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func iterateKeys(it ethdb.Iterator) []string {
|
||||
|
Reference in New Issue
Block a user