package db import "testing" func mockDBWithStuff() DB { db := NewMemDB() // Under "key" prefix db.Set(bz("key"), bz("value")) db.Set(bz("key1"), bz("value1")) db.Set(bz("key2"), bz("value2")) db.Set(bz("key3"), bz("value3")) db.Set(bz("something"), bz("else")) db.Set(bz(""), bz("")) db.Set(bz("k"), bz("val")) db.Set(bz("ke"), bz("valu")) db.Set(bz("kee"), bz("valuu")) return db } func TestPrefixDBSimple(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) checkValue(t, pdb, bz("key"), nil) checkValue(t, pdb, bz(""), bz("value")) checkValue(t, pdb, bz("key1"), nil) checkValue(t, pdb, bz("1"), bz("value1")) checkValue(t, pdb, bz("key2"), nil) checkValue(t, pdb, bz("2"), bz("value2")) checkValue(t, pdb, bz("key3"), nil) checkValue(t, pdb, bz("3"), bz("value3")) checkValue(t, pdb, bz("something"), nil) checkValue(t, pdb, bz("k"), nil) checkValue(t, pdb, bz("ke"), nil) checkValue(t, pdb, bz("kee"), nil) } func TestPrefixDBIterator1(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.Iterator(nil, nil) checkDomain(t, itr, nil, nil) checkItem(t, itr, bz(""), bz("value")) checkNext(t, itr, true) checkItem(t, itr, bz("1"), bz("value1")) checkNext(t, itr, true) checkItem(t, itr, bz("2"), bz("value2")) checkNext(t, itr, true) checkItem(t, itr, bz("3"), bz("value3")) checkNext(t, itr, false) checkInvalid(t, itr) itr.Close() } func TestPrefixDBIterator2(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.Iterator(nil, bz("")) checkDomain(t, itr, nil, bz("")) checkInvalid(t, itr) itr.Close() } func TestPrefixDBIterator3(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.Iterator(bz(""), nil) checkDomain(t, itr, bz(""), nil) checkItem(t, itr, bz(""), bz("value")) checkNext(t, itr, true) checkItem(t, itr, bz("1"), bz("value1")) checkNext(t, itr, true) checkItem(t, itr, bz("2"), bz("value2")) checkNext(t, itr, true) checkItem(t, itr, bz("3"), bz("value3")) checkNext(t, itr, false) checkInvalid(t, itr) itr.Close() } func TestPrefixDBIterator4(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.Iterator(bz(""), bz("")) checkDomain(t, itr, bz(""), bz("")) checkInvalid(t, itr) itr.Close() } func TestPrefixDBReverseIterator1(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.ReverseIterator(nil, nil) checkDomain(t, itr, nil, nil) checkItem(t, itr, bz("3"), bz("value3")) checkNext(t, itr, true) checkItem(t, itr, bz("2"), bz("value2")) checkNext(t, itr, true) checkItem(t, itr, bz("1"), bz("value1")) checkNext(t, itr, true) checkItem(t, itr, bz(""), bz("value")) checkNext(t, itr, false) checkInvalid(t, itr) itr.Close() } func TestPrefixDBReverseIterator2(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.ReverseIterator(nil, bz("")) checkDomain(t, itr, nil, bz("")) checkItem(t, itr, bz("3"), bz("value3")) checkNext(t, itr, true) checkItem(t, itr, bz("2"), bz("value2")) checkNext(t, itr, true) checkItem(t, itr, bz("1"), bz("value1")) checkNext(t, itr, false) checkInvalid(t, itr) itr.Close() } func TestPrefixDBReverseIterator3(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.ReverseIterator(bz(""), nil) checkDomain(t, itr, bz(""), nil) checkItem(t, itr, bz(""), bz("value")) checkNext(t, itr, false) checkInvalid(t, itr) itr.Close() } func TestPrefixDBReverseIterator4(t *testing.T) { db := mockDBWithStuff() pdb := NewPrefixDB(db, bz("key")) itr := pdb.ReverseIterator(bz(""), bz("")) checkInvalid(t, itr) itr.Close() }