github.com/evdatsion/aphelion-dpos-bft@v0.32.1/libs/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(bz(""), nil) 117 checkDomain(t, itr, bz(""), nil) 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, true) 124 checkItem(t, itr, bz(""), bz("value")) 125 checkNext(t, itr, false) 126 checkInvalid(t, itr) 127 itr.Close() 128 } 129 130 func TestPrefixDBReverseIterator3(t *testing.T) { 131 db := mockDBWithStuff() 132 pdb := NewPrefixDB(db, bz("key")) 133 134 itr := pdb.ReverseIterator(nil, bz("")) 135 checkDomain(t, itr, nil, bz("")) 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 checkDomain(t, itr, bz(""), bz("")) 146 checkInvalid(t, itr) 147 itr.Close() 148 } 149 150 func TestPrefixDBReverseIterator5(t *testing.T) { 151 db := mockDBWithStuff() 152 pdb := NewPrefixDB(db, bz("key")) 153 154 itr := pdb.ReverseIterator(bz("1"), nil) 155 checkDomain(t, itr, bz("1"), nil) 156 checkItem(t, itr, bz("3"), bz("value3")) 157 checkNext(t, itr, true) 158 checkItem(t, itr, bz("2"), bz("value2")) 159 checkNext(t, itr, true) 160 checkItem(t, itr, bz("1"), bz("value1")) 161 checkNext(t, itr, false) 162 checkInvalid(t, itr) 163 itr.Close() 164 } 165 166 func TestPrefixDBReverseIterator6(t *testing.T) { 167 db := mockDBWithStuff() 168 pdb := NewPrefixDB(db, bz("key")) 169 170 itr := pdb.ReverseIterator(bz("2"), nil) 171 checkDomain(t, itr, bz("2"), nil) 172 checkItem(t, itr, bz("3"), bz("value3")) 173 checkNext(t, itr, true) 174 checkItem(t, itr, bz("2"), bz("value2")) 175 checkNext(t, itr, false) 176 checkInvalid(t, itr) 177 itr.Close() 178 } 179 180 func TestPrefixDBReverseIterator7(t *testing.T) { 181 db := mockDBWithStuff() 182 pdb := NewPrefixDB(db, bz("key")) 183 184 itr := pdb.ReverseIterator(nil, bz("2")) 185 checkDomain(t, itr, nil, bz("2")) 186 checkItem(t, itr, bz("1"), bz("value1")) 187 checkNext(t, itr, true) 188 checkItem(t, itr, bz(""), bz("value")) 189 checkNext(t, itr, false) 190 checkInvalid(t, itr) 191 itr.Close() 192 }