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 }