arnaucube
arnaucube/arboPublic Self-hosted repository
arbo/db/prefixeddb/prefixeddb_test.go
db/prefixeddb/prefixeddb_test.goRaw
 1package prefixeddb
 2
 3import (
 4	"testing"
 5
 6	"github.com/arnaucube/arbo/db/metadb"
 7	qt "github.com/frankban/quicktest"
 8)
 9
10func TestPrefixed(t *testing.T) {
11	database := metadb.NewTest(t)
12
13	prefix1 := []byte("one")
14	prefix2 := []byte("two")
15
16	db1 := NewPrefixedDatabase(database, prefix1)
17	db2 := NewPrefixedDatabase(database, prefix2)
18
19	keys1, values1 := [][]byte{[]byte("a"), []byte("b")}, [][]byte{[]byte("1"), []byte("2")}
20	keys2, values2 := [][]byte{[]byte("c"), []byte("d")}, [][]byte{[]byte("3"), []byte("4")}
21
22	// Insert at prefix "one" with WriteTx from PrefixedDatabase
23	wTx1 := db1.WriteTx()
24	qt.Assert(t, wTx1.Set(keys1[0], values1[0]), qt.IsNil)
25	qt.Assert(t, wTx1.Set(keys1[1], values1[1]), qt.IsNil)
26	qt.Assert(t, wTx1.Commit(), qt.IsNil)
27
28	// Insert at prefix "two" with PrefixedWriteTx from Database.WriteTx()
29	wTx2 := NewPrefixedWriteTx(database.WriteTx(), prefix2)
30	qt.Assert(t, wTx2.Set(keys2[0], values2[0]), qt.IsNil)
31	qt.Assert(t, wTx2.Set(keys2[1], values2[1]), qt.IsNil)
32	qt.Assert(t, wTx2.Commit(), qt.IsNil)
33
34	// Check key-values in PrefixedDatabase "one"
35	i := 0
36	err := db1.Iterate(nil, func(key, value []byte) bool {
37		qt.Assert(t, key, qt.DeepEquals, keys1[i])
38		qt.Assert(t, value, qt.DeepEquals, values1[i])
39		i++
40		return true
41	})
42	qt.Assert(t, err, qt.IsNil)
43
44	// Check key-values in PrefixedDatabase "two"
45	v0, err := db2.Get(keys2[0])
46	qt.Assert(t, err, qt.IsNil)
47	qt.Assert(t, v0, qt.DeepEquals, values2[0])
48	v1, err := db2.Get(keys2[1])
49	qt.Assert(t, err, qt.IsNil)
50	qt.Assert(t, v1, qt.DeepEquals, values2[1])
51
52	// Check all key-values with prefixes in parent Database
53	prefixes := [][]byte{prefix1, prefix1, prefix2, prefix2}
54	keys := append(keys1, keys2...)
55	values := append(values1, values2...)
56	i = 0
57	err = database.Iterate(nil, func(key, value []byte) bool {
58		qt.Assert(t, key, qt.DeepEquals, append(prefixes[i], keys[i]...))
59		qt.Assert(t, value, qt.DeepEquals, values[i])
60		i++
61		return true
62	})
63	qt.Assert(t, err, qt.IsNil)
64}