github.com/badrootd/nibiru-cometbft@v0.37.5-0.20240307173500-2a75559eee9b/state/txindex/indexer_service_test.go (about)

     1  package txindex_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	db "github.com/badrootd/nibiru-db"
    10  
    11  	abci "github.com/badrootd/nibiru-cometbft/abci/types"
    12  	"github.com/badrootd/nibiru-cometbft/libs/log"
    13  	blockidxkv "github.com/badrootd/nibiru-cometbft/state/indexer/block/kv"
    14  	"github.com/badrootd/nibiru-cometbft/state/txindex"
    15  	"github.com/badrootd/nibiru-cometbft/state/txindex/kv"
    16  	"github.com/badrootd/nibiru-cometbft/types"
    17  )
    18  
    19  func TestIndexerServiceIndexesBlocks(t *testing.T) {
    20  	// event bus
    21  	eventBus := types.NewEventBus()
    22  	eventBus.SetLogger(log.TestingLogger())
    23  	err := eventBus.Start()
    24  	require.NoError(t, err)
    25  	t.Cleanup(func() {
    26  		if err := eventBus.Stop(); err != nil {
    27  			t.Error(err)
    28  		}
    29  	})
    30  
    31  	// tx indexer
    32  	store := db.NewMemDB()
    33  	txIndexer := kv.NewTxIndex(store)
    34  	blockIndexer := blockidxkv.New(db.NewPrefixDB(store, []byte("block_events")))
    35  
    36  	service := txindex.NewIndexerService(txIndexer, blockIndexer, eventBus, false)
    37  	service.SetLogger(log.TestingLogger())
    38  	err = service.Start()
    39  	require.NoError(t, err)
    40  	t.Cleanup(func() {
    41  		if err := service.Stop(); err != nil {
    42  			t.Error(err)
    43  		}
    44  	})
    45  
    46  	// publish block with txs
    47  	err = eventBus.PublishEventNewBlockHeader(types.EventDataNewBlockHeader{
    48  		Header: types.Header{Height: 1},
    49  		NumTxs: int64(2),
    50  	})
    51  	require.NoError(t, err)
    52  	txResult1 := &abci.TxResult{
    53  		Height: 1,
    54  		Index:  uint32(0),
    55  		Tx:     types.Tx("foo"),
    56  		Result: abci.ResponseDeliverTx{Code: 0},
    57  	}
    58  	err = eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult1})
    59  	require.NoError(t, err)
    60  	txResult2 := &abci.TxResult{
    61  		Height: 1,
    62  		Index:  uint32(1),
    63  		Tx:     types.Tx("bar"),
    64  		Result: abci.ResponseDeliverTx{Code: 0},
    65  	}
    66  	err = eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult2})
    67  	require.NoError(t, err)
    68  
    69  	time.Sleep(100 * time.Millisecond)
    70  
    71  	res, err := txIndexer.Get(types.Tx("foo").Hash())
    72  	require.NoError(t, err)
    73  	require.Equal(t, txResult1, res)
    74  
    75  	ok, err := blockIndexer.Has(1)
    76  	require.NoError(t, err)
    77  	require.True(t, ok)
    78  
    79  	res, err = txIndexer.Get(types.Tx("bar").Hash())
    80  	require.NoError(t, err)
    81  	require.Equal(t, txResult2, res)
    82  }