github.com/aakash4dev/cometbft@v0.38.2/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/aakash4dev/cometbft-db"
    10  
    11  	abci "github.com/aakash4dev/cometbft/abci/types"
    12  	"github.com/aakash4dev/cometbft/libs/log"
    13  	blockidxkv "github.com/aakash4dev/cometbft/state/indexer/block/kv"
    14  	"github.com/aakash4dev/cometbft/state/txindex"
    15  	"github.com/aakash4dev/cometbft/state/txindex/kv"
    16  	"github.com/aakash4dev/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 events
    47  	err = eventBus.PublishEventNewBlockEvents(types.EventDataNewBlockEvents{
    48  		Height: 1,
    49  		Events: []abci.Event{
    50  			{
    51  				Type: "begin_event",
    52  				Attributes: []abci.EventAttribute{
    53  					{
    54  						Key:   "proposer",
    55  						Value: "FCAA001",
    56  						Index: true,
    57  					},
    58  				},
    59  			},
    60  		},
    61  		NumTxs: int64(2),
    62  	})
    63  	require.NoError(t, err)
    64  	txResult1 := &abci.TxResult{
    65  		Height: 1,
    66  		Index:  uint32(0),
    67  		Tx:     types.Tx("foo"),
    68  		Result: abci.ExecTxResult{Code: 0},
    69  	}
    70  	err = eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult1})
    71  	require.NoError(t, err)
    72  	txResult2 := &abci.TxResult{
    73  		Height: 1,
    74  		Index:  uint32(1),
    75  		Tx:     types.Tx("bar"),
    76  		Result: abci.ExecTxResult{Code: 0},
    77  	}
    78  	err = eventBus.PublishEventTx(types.EventDataTx{TxResult: *txResult2})
    79  	require.NoError(t, err)
    80  
    81  	time.Sleep(100 * time.Millisecond)
    82  
    83  	res, err := txIndexer.Get(types.Tx("foo").Hash())
    84  	require.NoError(t, err)
    85  	require.Equal(t, txResult1, res)
    86  
    87  	ok, err := blockIndexer.Has(1)
    88  	require.NoError(t, err)
    89  	require.True(t, ok)
    90  
    91  	res, err = txIndexer.Get(types.Tx("bar").Hash())
    92  	require.NoError(t, err)
    93  	require.Equal(t, txResult2, res)
    94  }