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  }