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