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  }