166 lines
3.3 KiB
Go
166 lines
3.3 KiB
Go
package types
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/tharsis/ethermint/crypto/ethsecp256k1"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
)
|
|
|
|
func TestTransactionLogsValidate(t *testing.T) {
|
|
priv, err := ethsecp256k1.GenerateKey()
|
|
require.NoError(t, err)
|
|
addr := crypto.PubkeyToAddress(priv.ToECDSA().PublicKey).String()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
txLogs TransactionLogs
|
|
expPass bool
|
|
}{
|
|
{
|
|
"valid log",
|
|
TransactionLogs{
|
|
Hash: common.BytesToHash([]byte("tx_hash")).String(),
|
|
Logs: []*Log{
|
|
{
|
|
Address: addr,
|
|
Topics: []string{common.BytesToHash([]byte("topic")).String()},
|
|
Data: []byte("data"),
|
|
BlockNumber: 1,
|
|
TxHash: common.BytesToHash([]byte("tx_hash")).String(),
|
|
TxIndex: 1,
|
|
BlockHash: common.BytesToHash([]byte("block_hash")).String(),
|
|
Index: 1,
|
|
Removed: false,
|
|
},
|
|
},
|
|
},
|
|
true,
|
|
},
|
|
{
|
|
"empty hash",
|
|
TransactionLogs{
|
|
Hash: common.Hash{}.String(),
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"invalid log",
|
|
TransactionLogs{
|
|
Hash: common.BytesToHash([]byte("tx_hash")).String(),
|
|
Logs: []*Log{{}},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"hash mismatch log",
|
|
TransactionLogs{
|
|
Hash: common.BytesToHash([]byte("tx_hash")).String(),
|
|
Logs: []*Log{
|
|
{
|
|
Address: addr,
|
|
Topics: []string{common.BytesToHash([]byte("topic")).String()},
|
|
Data: []byte("data"),
|
|
BlockNumber: 1,
|
|
TxHash: common.BytesToHash([]byte("other_hash")).String(),
|
|
TxIndex: 1,
|
|
BlockHash: common.BytesToHash([]byte("block_hash")).String(),
|
|
Index: 1,
|
|
Removed: false,
|
|
},
|
|
},
|
|
},
|
|
false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
tc := tc
|
|
err := tc.txLogs.Validate()
|
|
if tc.expPass {
|
|
require.NoError(t, err, tc.name)
|
|
} else {
|
|
require.Error(t, err, tc.name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestValidateLog(t *testing.T) {
|
|
priv, err := ethsecp256k1.GenerateKey()
|
|
require.NoError(t, err)
|
|
addr := crypto.PubkeyToAddress(priv.ToECDSA().PublicKey).String()
|
|
|
|
testCases := []struct {
|
|
name string
|
|
log *Log
|
|
expPass bool
|
|
}{
|
|
{
|
|
"valid log",
|
|
&Log{
|
|
Address: addr,
|
|
Topics: []string{common.BytesToHash([]byte("topic")).String()},
|
|
Data: []byte("data"),
|
|
BlockNumber: 1,
|
|
TxHash: common.BytesToHash([]byte("tx_hash")).String(),
|
|
TxIndex: 1,
|
|
BlockHash: common.BytesToHash([]byte("block_hash")).String(),
|
|
Index: 1,
|
|
Removed: false,
|
|
},
|
|
true,
|
|
},
|
|
{
|
|
"empty log", &Log{}, false,
|
|
},
|
|
{
|
|
"zero address",
|
|
&Log{
|
|
Address: common.Address{}.String(),
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"empty block hash",
|
|
&Log{
|
|
Address: addr,
|
|
BlockHash: common.Hash{}.String(),
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"zero block number",
|
|
&Log{
|
|
Address: addr,
|
|
BlockHash: common.BytesToHash([]byte("block_hash")).String(),
|
|
BlockNumber: 0,
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"empty tx hash",
|
|
&Log{
|
|
Address: addr,
|
|
BlockHash: common.BytesToHash([]byte("block_hash")).String(),
|
|
BlockNumber: 1,
|
|
TxHash: common.Hash{}.String(),
|
|
},
|
|
false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
tc := tc
|
|
err := tc.log.Validate()
|
|
if tc.expPass {
|
|
require.NoError(t, err, tc.name)
|
|
} else {
|
|
require.Error(t, err, tc.name)
|
|
}
|
|
}
|
|
}
|