github.com/lazyledger/lazyledger-core@v0.35.0-dev.0.20210613111200-4c651f053571/state/txindex/indexer_service_test.go (about)

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