|
|
- package core
-
- import (
- "errors"
- "testing"
-
- "github.com/stretchr/testify/mock"
- "github.com/stretchr/testify/require"
-
- abcitypes "github.com/tendermint/tendermint/abci/types"
- "github.com/tendermint/tendermint/libs/log"
- tmstate "github.com/tendermint/tendermint/proto/tendermint/state"
- rpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types"
- "github.com/tendermint/tendermint/state/indexer"
- "github.com/tendermint/tendermint/state/mocks"
- "github.com/tendermint/tendermint/types"
- )
-
- const (
- height int64 = 10
- base int64 = 1
- )
-
- func TestUnsafeReIndex(t *testing.T) {
-
- mockBlockStore := &mocks.BlockStore{}
- mockStateStore := &mocks.Store{}
- mockEventSink := &mocks.EventSink{}
-
- env := &Environment{
- BlockStore: mockBlockStore,
- StateStore: mockStateStore,
- EventSinks: []indexer.EventSink{mockEventSink},
- Logger: log.TestingLogger()}
-
- mockBlockStore.
- On("Base").Return(base).
- On("Height").Return(height).
- On("LoadBlock", base+1).Return(nil).Once().
- On("LoadBlock", base+1).Return(&types.Block{Data: types.Data{Txs: types.Txs{make(types.Tx, 1)}}})
-
- mockEventSink.
- On("Type").Return(indexer.NULL).Once().
- On("Type").Return(indexer.KV).
- On("IndexBlockEvents", mock.AnythingOfType("types.EventDataNewBlockHeader")).Return(errors.New("")).Once().
- On("IndexBlockEvents", mock.AnythingOfType("types.EventDataNewBlockHeader")).Return(nil).
- On("IndexTxEvents", mock.AnythingOfType("[]*types.TxResult")).Return(errors.New("")).Once().
- On("IndexTxEvents", mock.AnythingOfType("[]*types.TxResult")).Return(nil)
-
- dtx := abcitypes.ResponseDeliverTx{}
- abciResp := &tmstate.ABCIResponses{
- DeliverTxs: []*abcitypes.ResponseDeliverTx{&dtx},
- EndBlock: &abcitypes.ResponseEndBlock{},
- BeginBlock: &abcitypes.ResponseBeginBlock{},
- }
-
- mockStateStore.
- On("LoadABCIResponses", base+1).Return(nil, errors.New("")).Once().
- On("LoadABCIResponses", base+1).Return(abciResp, nil)
-
- testCases := []struct {
- startHeight int64
- endHeight int64
- enableSink bool
- isErr bool
- }{
- {base, 0, false, true}, // the start height less equal than the base height
- {height + 1, 0, false, true}, // the start height greater than the store height
- {base + 1, base, false, true}, // the end height less equal than the base height
- {height, height - 1, false, true}, // the start height greater than the end height
- {base + 1, height + 1, false, true}, // the end height will be the same as the store height and no eventsink error
- {base + 1, base + 1, true, true}, // LoadBlock error
- {base + 1, base + 1, true, true}, // LoadABCIResponses error
- {base + 1, base + 1, true, true}, // index block event error
- {base + 1, base + 1, true, true}, // index tx event error
- {base + 1, base + 1, true, false},
- }
-
- for _, tc := range testCases {
- res, err := env.UnsafeReIndex(&rpctypes.Context{}, tc.startHeight, tc.endHeight)
- if tc.isErr {
- require.Error(t, err)
- } else {
- require.NoError(t, err)
- require.NotNil(t, res)
- }
- }
- }
|