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 }