evm: GetHashFn test (#515)
This commit is contained in:
parent
87c4ea2dc2
commit
516ffe2bf1
@ -38,7 +38,10 @@ import (
|
|||||||
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
|
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||||
|
tmversion "github.com/tendermint/tendermint/proto/tendermint/version"
|
||||||
|
"github.com/tendermint/tendermint/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -104,6 +107,23 @@ func (suite *KeeperTestSuite) DoSetupTest(t require.TestingT) {
|
|||||||
ChainID: "ethermint_9000-1",
|
ChainID: "ethermint_9000-1",
|
||||||
Time: time.Now().UTC(),
|
Time: time.Now().UTC(),
|
||||||
ProposerAddress: suite.consAddress.Bytes(),
|
ProposerAddress: suite.consAddress.Bytes(),
|
||||||
|
Version: tmversion.Consensus{
|
||||||
|
Block: version.BlockProtocol,
|
||||||
|
},
|
||||||
|
LastBlockId: tmproto.BlockID{
|
||||||
|
Hash: tmhash.Sum([]byte("block_id")),
|
||||||
|
PartSetHeader: tmproto.PartSetHeader{
|
||||||
|
Total: 11,
|
||||||
|
Hash: tmhash.Sum([]byte("partset_header")),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
AppHash: tmhash.Sum([]byte("app")),
|
||||||
|
DataHash: tmhash.Sum([]byte("data")),
|
||||||
|
EvidenceHash: tmhash.Sum([]byte("evidence")),
|
||||||
|
ValidatorsHash: tmhash.Sum([]byte("validators")),
|
||||||
|
NextValidatorsHash: tmhash.Sum([]byte("next_validators")),
|
||||||
|
ConsensusHash: tmhash.Sum([]byte("consensus")),
|
||||||
|
LastResultsHash: tmhash.Sum([]byte("last_result")),
|
||||||
})
|
})
|
||||||
suite.app.EvmKeeper.WithContext(suite.ctx)
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
|
||||||
@ -151,7 +171,7 @@ func (suite *KeeperTestSuite) EvmDenom() string {
|
|||||||
|
|
||||||
// Commit and begin new block
|
// Commit and begin new block
|
||||||
func (suite *KeeperTestSuite) Commit() {
|
func (suite *KeeperTestSuite) Commit() {
|
||||||
suite.app.Commit()
|
_ = suite.app.Commit()
|
||||||
header := suite.ctx.BlockHeader()
|
header := suite.ctx.BlockHeader()
|
||||||
header.Height += 1
|
header.Height += 1
|
||||||
suite.app.BeginBlock(abci.RequestBeginBlock{
|
suite.app.BeginBlock(abci.RequestBeginBlock{
|
||||||
|
@ -3,13 +3,112 @@ package keeper_test
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/tharsis/ethermint/tests"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
|
||||||
|
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||||
|
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||||
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
|
|
||||||
|
"github.com/tharsis/ethermint/tests"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (suite *KeeperTestSuite) TestGetHashFn() {
|
||||||
|
header := suite.ctx.BlockHeader()
|
||||||
|
h, _ := tmtypes.HeaderFromProto(&header)
|
||||||
|
hash := h.Hash()
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
msg string
|
||||||
|
height uint64
|
||||||
|
malleate func()
|
||||||
|
expHash common.Hash
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"case 1.1: context hash cached",
|
||||||
|
uint64(suite.ctx.BlockHeight()),
|
||||||
|
func() {
|
||||||
|
suite.ctx = suite.ctx.WithHeaderHash(tmhash.Sum([]byte("header")))
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.BytesToHash(tmhash.Sum([]byte("header"))),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 1.2: failed to cast Tendermint header",
|
||||||
|
uint64(suite.ctx.BlockHeight()),
|
||||||
|
func() {
|
||||||
|
header := tmproto.Header{}
|
||||||
|
header.Height = suite.ctx.BlockHeight()
|
||||||
|
suite.ctx = suite.ctx.WithBlockHeader(header)
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.Hash{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 1.3: hash calculated from Tendermint header",
|
||||||
|
uint64(suite.ctx.BlockHeight()),
|
||||||
|
func() {
|
||||||
|
|
||||||
|
suite.ctx = suite.ctx.WithBlockHeader(header)
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.BytesToHash(hash),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 2.1: height lower than current one, hist info not found",
|
||||||
|
1,
|
||||||
|
func() {
|
||||||
|
suite.ctx = suite.ctx.WithBlockHeight(10)
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.Hash{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 2.2: height lower than current one, invalid hist info header",
|
||||||
|
1,
|
||||||
|
func() {
|
||||||
|
suite.app.StakingKeeper.SetHistoricalInfo(suite.ctx, 1, &stakingtypes.HistoricalInfo{})
|
||||||
|
suite.ctx = suite.ctx.WithBlockHeight(10)
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.Hash{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 2.3: height lower than current one, calculated from hist info header",
|
||||||
|
1,
|
||||||
|
func() {
|
||||||
|
histInfo := &stakingtypes.HistoricalInfo{
|
||||||
|
Header: header,
|
||||||
|
}
|
||||||
|
suite.app.StakingKeeper.SetHistoricalInfo(suite.ctx, 1, histInfo)
|
||||||
|
suite.ctx = suite.ctx.WithBlockHeight(10)
|
||||||
|
suite.app.EvmKeeper.WithContext(suite.ctx)
|
||||||
|
},
|
||||||
|
common.BytesToHash(hash),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"case 3: height greater than current one",
|
||||||
|
200,
|
||||||
|
func() {},
|
||||||
|
common.Hash{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
||||||
|
suite.SetupTest() // reset
|
||||||
|
|
||||||
|
tc.malleate()
|
||||||
|
|
||||||
|
hash := suite.app.EvmKeeper.GetHashFn()(tc.height)
|
||||||
|
suite.Require().Equal(tc.expHash, hash)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (suite *KeeperTestSuite) TestGetCoinbaseAddress() {
|
func (suite *KeeperTestSuite) TestGetCoinbaseAddress() {
|
||||||
valOpAddr := tests.GenerateAddress()
|
valOpAddr := tests.GenerateAddress()
|
||||||
|
|
||||||
@ -74,5 +173,4 @@ func (suite *KeeperTestSuite) TestGetCoinbaseAddress() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user