github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/utils/dbutil/compactdb/key_test.go (about)

     1  package compactdb
     2  
     3  import (
     4  	"io/ioutil"
     5  	"path"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  	"github.com/syndtr/goleveldb/leveldb/opt"
    10  	"github.com/unicornultrafoundation/go-helios/u2udb"
    11  	"github.com/unicornultrafoundation/go-helios/u2udb/leveldb"
    12  	"github.com/unicornultrafoundation/go-helios/u2udb/memorydb"
    13  	"github.com/unicornultrafoundation/go-helios/u2udb/pebble"
    14  )
    15  
    16  func tmpDir(name string) string {
    17  	dir, err := ioutil.TempDir("", name)
    18  	if err != nil {
    19  		panic(err)
    20  	}
    21  	return dir
    22  }
    23  
    24  func TestLastKey(t *testing.T) {
    25  	testLastKey(t, memorydb.New())
    26  	dir := tmpDir("test-last-key")
    27  	ldb, err := leveldb.New(path.Join(dir, "ldb"), 16*opt.MiB, 64, nil, nil)
    28  	require.NoError(t, err)
    29  	defer ldb.Close()
    30  	testLastKey(t, ldb)
    31  	pbl, err := pebble.New(path.Join(dir, "pbl"), 16*opt.MiB, 64, nil, nil)
    32  	require.NoError(t, err)
    33  	defer pbl.Close()
    34  	testLastKey(t, pbl)
    35  }
    36  
    37  func testLastKey(t *testing.T, db u2udb.Store) {
    38  	require.Nil(t, lastKey(db))
    39  
    40  	db.Put([]byte{0}, []byte{0})
    41  	require.Equal(t, []byte{0}, lastKey(db))
    42  
    43  	db.Put([]byte{1}, []byte{0})
    44  	require.Equal(t, []byte{1}, lastKey(db))
    45  
    46  	db.Put([]byte{2}, []byte{0})
    47  	require.Equal(t, []byte{2}, lastKey(db))
    48  
    49  	db.Put([]byte{1, 0}, []byte{0})
    50  	require.Equal(t, []byte{2}, lastKey(db))
    51  
    52  	db.Put([]byte{3}, []byte{0})
    53  	require.Equal(t, []byte{3}, lastKey(db))
    54  
    55  	db.Put([]byte{3, 0}, []byte{0})
    56  	require.Equal(t, []byte{3, 0}, lastKey(db))
    57  
    58  	db.Put([]byte{3, 1}, []byte{0})
    59  	require.Equal(t, []byte{3, 1}, lastKey(db))
    60  
    61  	db.Put([]byte{4}, []byte{0})
    62  	require.Equal(t, []byte{4}, lastKey(db))
    63  
    64  	db.Put([]byte{4, 0, 0, 0}, []byte{0})
    65  	require.Equal(t, []byte{4, 0, 0, 0}, lastKey(db))
    66  
    67  	db.Put([]byte{4, 0, 1, 0}, []byte{0})
    68  	require.Equal(t, []byte{4, 0, 1, 0}, lastKey(db))
    69  }
    70  
    71  func TestTrimAfterDiff(t *testing.T) {
    72  	a, b := trimAfterDiff([]byte{}, []byte{}, 1)
    73  	require.Equal(t, []byte{}, a)
    74  	require.Equal(t, []byte{}, b)
    75  
    76  	a, b = trimAfterDiff([]byte{1, 2}, []byte{1, 3}, 1)
    77  	require.Equal(t, []byte{1, 2}, a)
    78  	require.Equal(t, []byte{1, 3}, b)
    79  
    80  	a, b = trimAfterDiff([]byte{1, 2, 4}, []byte{1, 3, 4}, 1)
    81  	require.Equal(t, []byte{1, 2}, a)
    82  	require.Equal(t, []byte{1, 3}, b)
    83  
    84  	a, b = trimAfterDiff([]byte{1, 2, 4, 5}, []byte{1, 3, 4, 6}, 1)
    85  	require.Equal(t, []byte{1, 2}, a)
    86  	require.Equal(t, []byte{1, 3}, b)
    87  
    88  	a, b = trimAfterDiff([]byte{1, 2, 4, 5}, []byte{1, 3, 4, 6}, 2)
    89  	require.Equal(t, []byte{1, 2, 4, 5}, a)
    90  	require.Equal(t, []byte{1, 3, 4, 6}, b)
    91  
    92  	a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4, 6}, 2)
    93  	require.Equal(t, []byte{1, 2, 4, 5}, a)
    94  	require.Equal(t, []byte{1, 3, 4, 6}, b)
    95  
    96  	a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4, 6, 7}, 2)
    97  	require.Equal(t, []byte{1, 2, 4, 5}, a)
    98  	require.Equal(t, []byte{1, 3, 4, 6}, b)
    99  
   100  	a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4}, 2)
   101  	require.Equal(t, []byte{1, 2, 4}, a)
   102  	require.Equal(t, []byte{1, 3, 4}, b)
   103  }