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 }