Add indexer tests for handling non canonical blocks #254

Merged
prathamesh0 merged 9 commits from pm-failing-tests into v1.10.21-statediff-v4 2022-08-12 10:16:14 +00:00
3 changed files with 90 additions and 0 deletions
Showing only changes of commit 889d1bdc6d - Show all commits

View File

@ -599,3 +599,77 @@ func testPublishAndIndexReceiptsNonCanonical(t *testing.T) {
require.Equal(t, nonCanonicalrctRLPs[i], data)
}
}
func testPublishAndIndexLogsNonCanonical(t *testing.T) {
// check indexed logs
pgStr := `SELECT address, log_data, topic0, topic1, topic2, topic3, data
FROM eth.log_cids
INNER JOIN public.blocks ON (log_cids.leaf_mh_key = blocks.key)
WHERE log_cids.block_number = $1 AND header_id = $2 AND rct_id = $3
ORDER BY log_cids.index ASC`
type rctWithBlockHash struct {
rct *types.Receipt
blockHash string
}
mockRcts := make([]rctWithBlockHash, 0)
for _, mockBlockRct := range mocks.MockReceipts {
mockRcts = append(mockRcts, rctWithBlockHash{
mockBlockRct,
mockBlock.Hash().String(),
})
}
for _, mockBlockRct := range mocks.MockNonCanonicalBlockReceipts {
mockRcts = append(mockRcts, rctWithBlockHash{
mockBlockRct,
mockNonCanonicalBlock.Hash().String(),
})
}
for _, mockRct := range mockRcts {
type logWithIPLD struct {
models.LogsModel
IPLDData []byte `db:"data"`
}
logRes := make([]logWithIPLD, 0)
err = db.Select(context.Background(), &logRes, pgStr, mocks.BlockNumber.Uint64(), mockRct.blockHash, mockRct.rct.TxHash.String())
require.NoError(t, err)
require.Equal(t, len(mockRct.rct.Logs), len(logRes))
for i, log := range mockRct.rct.Logs {
topicSet := make([]string, 4)
for ti, topic := range log.Topics {
topicSet[ti] = topic.Hex()
}
expectedLog := models.LogsModel{
Address: log.Address.String(),
Data: log.Data,
Topic0: topicSet[0],
Topic1: topicSet[1],
Topic2: topicSet[2],
Topic3: topicSet[3],
}
require.Equal(t, expectedLog, logRes[i].LogsModel)
// check indexed log IPLD block
var nodeElements []interface{}
err = rlp.DecodeBytes(logRes[i].IPLDData, &nodeElements)
require.NoError(t, err)
if len(nodeElements) == 2 {
logRaw, err := rlp.EncodeToBytes(&log)
require.NoError(t, err)
// 2nd element of the leaf node contains the encoded log data.
require.Equal(t, nodeElements[1].([]byte), logRaw)
} else {
logRaw, err := rlp.EncodeToBytes(&log)
require.NoError(t, err)
// raw log was IPLDized
require.Equal(t, logRes[i].IPLDData, logRaw)
}
}
}
}

View File

@ -615,6 +615,14 @@ func TestPGXIndexerNonCanonical(t *testing.T) {
testPublishAndIndexReceiptsNonCanonical(t)
})
t.Run("Publish and index logs", func(t *testing.T) {
setupPGXNonCanonical(t)
defer tearDown(t)
defer checkTxClosure(t, 1, 0, 1)
testPublishAndIndexLogsNonCanonical(t)
})
}
func TestPGXWatchAddressMethods(t *testing.T) {

View File

@ -608,6 +608,14 @@ func TestSQLXIndexerNonCanonical(t *testing.T) {
testPublishAndIndexReceiptsNonCanonical(t)
})
t.Run("Publish and index logs", func(t *testing.T) {
setupSQLXNonCanonical(t)
defer tearDown(t)
defer checkTxClosure(t, 1, 0, 1)
testPublishAndIndexLogsNonCanonical(t)
})
}
func TestSQLXWatchAddressMethods(t *testing.T) {