github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/tendermint/state/txindex/indexer_service_test.go (about)

     1  package txindex_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	blockindexer "github.com/fibonacci-chain/fbc/libs/tendermint/state/indexer/block/kv"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	db "github.com/fibonacci-chain/fbc/libs/tm-db"
    13  
    14  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    15  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    16  	"github.com/fibonacci-chain/fbc/libs/tendermint/state/txindex"
    17  	"github.com/fibonacci-chain/fbc/libs/tendermint/state/txindex/kv"
    18  	"github.com/fibonacci-chain/fbc/libs/tendermint/types"
    19  )
    20  
    21  func TestIndexerServiceIndexesBlocks(t *testing.T) {
    22  	// event bus
    23  	eventBus := types.NewEventBus()
    24  	eventBus.SetLogger(log.TestingLogger())
    25  	err := eventBus.Start()
    26  	require.NoError(t, err)
    27  	defer eventBus.Stop()
    28  
    29  	// tx indexer
    30  	store := db.NewMemDB()
    31  	txIndexer := kv.NewTxIndex(store, kv.IndexAllEvents())
    32  	bStore := db.NewMemDB()
    33  	blockIndexer := blockindexer.New(bStore)
    34  
    35  	service := txindex.NewIndexerService(txIndexer, blockIndexer, eventBus)
    36  	service.SetLogger(log.TestingLogger())
    37  	err = service.Start()
    38  	require.NoError(t, err)
    39  	defer service.Stop()
    40  
    41  	// publish block with txs
    42  	eventBus.PublishEventNewBlockHeader(types.EventDataNewBlockHeader{
    43  		Header: types.Header{Height: 1},
    44  		NumTxs: int64(2),
    45  	})
    46  	txResult1 := &types.TxResult{
    47  		Height: 1,
    48  		Index:  uint32(0),
    49  		Tx:     types.Tx("foo"),
    50  		Result: abci.ResponseDeliverTx{Code: 0},
    51  	}
    52  	eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult1})
    53  	txResult2 := &types.TxResult{
    54  		Height: 1,
    55  		Index:  uint32(1),
    56  		Tx:     types.Tx("bar"),
    57  		Result: abci.ResponseDeliverTx{Code: 0},
    58  	}
    59  	eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult2})
    60  
    61  	time.Sleep(100 * time.Millisecond)
    62  
    63  	// check the result
    64  	res, err := txIndexer.Get(types.Tx("foo").Hash(txResult1.Height))
    65  	assert.NoError(t, err)
    66  	assert.Equal(t, txResult1, res)
    67  	res, err = txIndexer.Get(types.Tx("bar").Hash(txResult2.Height))
    68  	assert.NoError(t, err)
    69  	assert.Equal(t, txResult2, res)
    70  }