github.com/Finschia/finschia-sdk@v0.49.1/store/dbadapter/store_test.go (about)

     1  package dbadapter_test
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/golang/mock/gomock"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/Finschia/finschia-sdk/store/cachekv"
    12  	"github.com/Finschia/finschia-sdk/store/dbadapter"
    13  	"github.com/Finschia/finschia-sdk/store/types"
    14  	"github.com/Finschia/finschia-sdk/tests/mocks"
    15  )
    16  
    17  var errFoo = errors.New("dummy")
    18  
    19  func TestAccessors(t *testing.T) {
    20  	mockCtrl := gomock.NewController(t)
    21  	defer mockCtrl.Finish()
    22  
    23  	mockDB := mocks.NewMockDB(mockCtrl)
    24  	store := dbadapter.Store{mockDB}
    25  	key := []byte("test")
    26  	value := []byte("testvalue")
    27  
    28  	require.Panics(t, func() { store.Set(nil, []byte("value")) }, "setting a nil key should panic")
    29  	require.Panics(t, func() { store.Set([]byte(""), []byte("value")) }, "setting an empty key should panic")
    30  
    31  	require.Equal(t, types.StoreTypeDB, store.GetStoreType())
    32  	store.GetStoreType()
    33  
    34  	retFoo := []byte("xxx")
    35  	mockDB.EXPECT().Get(gomock.Eq(key)).Times(1).Return(retFoo, nil)
    36  	require.True(t, bytes.Equal(retFoo, store.Get(key)))
    37  
    38  	mockDB.EXPECT().Get(gomock.Eq(key)).Times(1).Return(nil, errFoo)
    39  	require.Panics(t, func() { store.Get(key) })
    40  
    41  	mockDB.EXPECT().Has(gomock.Eq(key)).Times(1).Return(true, nil)
    42  	require.True(t, store.Has(key))
    43  
    44  	mockDB.EXPECT().Has(gomock.Eq(key)).Times(1).Return(false, nil)
    45  	require.False(t, store.Has(key))
    46  
    47  	mockDB.EXPECT().Has(gomock.Eq(key)).Times(1).Return(false, errFoo)
    48  	require.Panics(t, func() { store.Has(key) })
    49  
    50  	mockDB.EXPECT().Set(gomock.Eq(key), gomock.Eq(value)).Times(1).Return(nil)
    51  	require.NotPanics(t, func() { store.Set(key, value) })
    52  
    53  	mockDB.EXPECT().Set(gomock.Eq(key), gomock.Eq(value)).Times(1).Return(errFoo)
    54  	require.Panics(t, func() { store.Set(key, value) })
    55  
    56  	mockDB.EXPECT().Delete(gomock.Eq(key)).Times(1).Return(nil)
    57  	require.NotPanics(t, func() { store.Delete(key) })
    58  
    59  	mockDB.EXPECT().Delete(gomock.Eq(key)).Times(1).Return(errFoo)
    60  	require.Panics(t, func() { store.Delete(key) })
    61  
    62  	start, end := []byte("start"), []byte("end")
    63  	mockDB.EXPECT().Iterator(gomock.Eq(start), gomock.Eq(end)).Times(1).Return(nil, nil)
    64  	require.NotPanics(t, func() { store.Iterator(start, end) })
    65  
    66  	mockDB.EXPECT().Iterator(gomock.Eq(start), gomock.Eq(end)).Times(1).Return(nil, errFoo)
    67  	require.Panics(t, func() { store.Iterator(start, end) })
    68  
    69  	mockDB.EXPECT().ReverseIterator(gomock.Eq(start), gomock.Eq(end)).Times(1).Return(nil, nil)
    70  	require.NotPanics(t, func() { store.ReverseIterator(start, end) })
    71  
    72  	mockDB.EXPECT().ReverseIterator(gomock.Eq(start), gomock.Eq(end)).Times(1).Return(nil, errFoo)
    73  	require.Panics(t, func() { store.ReverseIterator(start, end) })
    74  }
    75  
    76  func TestCacheWraps(t *testing.T) {
    77  	mockCtrl := gomock.NewController(t)
    78  	mockDB := mocks.NewMockDB(mockCtrl)
    79  	store := dbadapter.Store{mockDB}
    80  
    81  	cacheWrapper := store.CacheWrap()
    82  	require.IsType(t, &cachekv.Store{}, cacheWrapper)
    83  
    84  	cacheWrappedWithTrace := store.CacheWrapWithTrace(nil, nil)
    85  	require.IsType(t, &cachekv.Store{}, cacheWrappedWithTrace)
    86  
    87  	cacheWrappedWithListeners := store.CacheWrapWithListeners(nil, nil)
    88  	require.IsType(t, &cachekv.Store{}, cacheWrappedWithListeners)
    89  }