github.com/tendermint/tmlibs@v0.9.0/db/prefix_db_test.go (about) 1 package db 2 3 import "testing" 4 5 func mockDBWithStuff() DB { 6 db := NewMemDB() 7 // Under "key" prefix 8 db.Set(bz("key"), bz("value")) 9 db.Set(bz("key1"), bz("value1")) 10 db.Set(bz("key2"), bz("value2")) 11 db.Set(bz("key3"), bz("value3")) 12 db.Set(bz("something"), bz("else")) 13 db.Set(bz(""), bz("")) 14 db.Set(bz("k"), bz("val")) 15 db.Set(bz("ke"), bz("valu")) 16 db.Set(bz("kee"), bz("valuu")) 17 return db 18 } 19 20 func TestPrefixDBSimple(t *testing.T) { 21 db := mockDBWithStuff() 22 pdb := NewPrefixDB(db, bz("key")) 23 24 checkValue(t, pdb, bz("key"), nil) 25 checkValue(t, pdb, bz(""), bz("value")) 26 checkValue(t, pdb, bz("key1"), nil) 27 checkValue(t, pdb, bz("1"), bz("value1")) 28 checkValue(t, pdb, bz("key2"), nil) 29 checkValue(t, pdb, bz("2"), bz("value2")) 30 checkValue(t, pdb, bz("key3"), nil) 31 checkValue(t, pdb, bz("3"), bz("value3")) 32 checkValue(t, pdb, bz("something"), nil) 33 checkValue(t, pdb, bz("k"), nil) 34 checkValue(t, pdb, bz("ke"), nil) 35 checkValue(t, pdb, bz("kee"), nil) 36 } 37 38 func TestPrefixDBIterator1(t *testing.T) { 39 db := mockDBWithStuff() 40 pdb := NewPrefixDB(db, bz("key")) 41 42 itr := pdb.Iterator(nil, nil) 43 checkDomain(t, itr, nil, nil) 44 checkItem(t, itr, bz(""), bz("value")) 45 checkNext(t, itr, true) 46 checkItem(t, itr, bz("1"), bz("value1")) 47 checkNext(t, itr, true) 48 checkItem(t, itr, bz("2"), bz("value2")) 49 checkNext(t, itr, true) 50 checkItem(t, itr, bz("3"), bz("value3")) 51 checkNext(t, itr, false) 52 checkInvalid(t, itr) 53 itr.Close() 54 } 55 56 func TestPrefixDBIterator2(t *testing.T) { 57 db := mockDBWithStuff() 58 pdb := NewPrefixDB(db, bz("key")) 59 60 itr := pdb.Iterator(nil, bz("")) 61 checkDomain(t, itr, nil, bz("")) 62 checkInvalid(t, itr) 63 itr.Close() 64 } 65 66 func TestPrefixDBIterator3(t *testing.T) { 67 db := mockDBWithStuff() 68 pdb := NewPrefixDB(db, bz("key")) 69 70 itr := pdb.Iterator(bz(""), nil) 71 checkDomain(t, itr, bz(""), nil) 72 checkItem(t, itr, bz(""), bz("value")) 73 checkNext(t, itr, true) 74 checkItem(t, itr, bz("1"), bz("value1")) 75 checkNext(t, itr, true) 76 checkItem(t, itr, bz("2"), bz("value2")) 77 checkNext(t, itr, true) 78 checkItem(t, itr, bz("3"), bz("value3")) 79 checkNext(t, itr, false) 80 checkInvalid(t, itr) 81 itr.Close() 82 } 83 84 func TestPrefixDBIterator4(t *testing.T) { 85 db := mockDBWithStuff() 86 pdb := NewPrefixDB(db, bz("key")) 87 88 itr := pdb.Iterator(bz(""), bz("")) 89 checkDomain(t, itr, bz(""), bz("")) 90 checkInvalid(t, itr) 91 itr.Close() 92 } 93 94 func TestPrefixDBReverseIterator1(t *testing.T) { 95 db := mockDBWithStuff() 96 pdb := NewPrefixDB(db, bz("key")) 97 98 itr := pdb.ReverseIterator(nil, nil) 99 checkDomain(t, itr, nil, nil) 100 checkItem(t, itr, bz("3"), bz("value3")) 101 checkNext(t, itr, true) 102 checkItem(t, itr, bz("2"), bz("value2")) 103 checkNext(t, itr, true) 104 checkItem(t, itr, bz("1"), bz("value1")) 105 checkNext(t, itr, true) 106 checkItem(t, itr, bz(""), bz("value")) 107 checkNext(t, itr, false) 108 checkInvalid(t, itr) 109 itr.Close() 110 } 111 112 func TestPrefixDBReverseIterator2(t *testing.T) { 113 db := mockDBWithStuff() 114 pdb := NewPrefixDB(db, bz("key")) 115 116 itr := pdb.ReverseIterator(nil, bz("")) 117 checkDomain(t, itr, nil, bz("")) 118 checkItem(t, itr, bz("3"), bz("value3")) 119 checkNext(t, itr, true) 120 checkItem(t, itr, bz("2"), bz("value2")) 121 checkNext(t, itr, true) 122 checkItem(t, itr, bz("1"), bz("value1")) 123 checkNext(t, itr, false) 124 checkInvalid(t, itr) 125 itr.Close() 126 } 127 128 func TestPrefixDBReverseIterator3(t *testing.T) { 129 db := mockDBWithStuff() 130 pdb := NewPrefixDB(db, bz("key")) 131 132 itr := pdb.ReverseIterator(bz(""), nil) 133 checkDomain(t, itr, bz(""), nil) 134 checkItem(t, itr, bz(""), bz("value")) 135 checkNext(t, itr, false) 136 checkInvalid(t, itr) 137 itr.Close() 138 } 139 140 func TestPrefixDBReverseIterator4(t *testing.T) { 141 db := mockDBWithStuff() 142 pdb := NewPrefixDB(db, bz("key")) 143 144 itr := pdb.ReverseIterator(bz(""), bz("")) 145 checkInvalid(t, itr) 146 itr.Close() 147 }