laconicd-deprecated/x/evm/genesis_test.go

165 lines
3.5 KiB
Go
Raw Normal View History

package evm_test
import (
"math/big"
2021-04-18 15:54:18 +00:00
"github.com/ethereum/go-ethereum/common"
"github.com/cerc-io/laconicd/crypto/ethsecp256k1"
etherminttypes "github.com/cerc-io/laconicd/types"
"github.com/cerc-io/laconicd/x/evm"
"github.com/cerc-io/laconicd/x/evm/statedb"
"github.com/cerc-io/laconicd/x/evm/types"
2021-04-18 15:54:18 +00:00
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
func (suite *EvmTestSuite) TestInitGenesis() {
privkey, err := ethsecp256k1.GenerateKey()
suite.Require().NoError(err)
2021-04-18 15:54:18 +00:00
address := common.HexToAddress(privkey.PubKey().Address().String())
var vmdb *statedb.StateDB
testCases := []struct {
name string
malleate func()
2021-04-17 10:00:07 +00:00
genState *types.GenesisState
expPanic bool
}{
{
"default",
func() {},
types.DefaultGenesisState(),
false,
},
{
"valid account",
func() {
vmdb.AddBalance(address, big.NewInt(1))
},
2021-04-17 10:00:07 +00:00
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
Storage: types.Storage{
{Key: common.BytesToHash([]byte("key")).String(), Value: common.BytesToHash([]byte("value")).String()},
},
},
},
},
false,
},
{
"account not found",
func() {},
2021-04-17 10:00:07 +00:00
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
},
},
},
true,
},
{
"invalid account type",
func() {
acc := authtypes.NewBaseAccountWithAddress(address.Bytes())
2021-04-17 10:00:07 +00:00
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
},
2021-04-17 10:00:07 +00:00
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
},
},
},
true,
},
{
"invalid code hash",
func() {
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, address.Bytes())
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
},
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
Code: "ffffffff",
},
},
},
true,
},
{
"ignore empty account code checking",
func() {
acc := suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, address.Bytes())
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
},
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
Code: "",
},
},
},
false,
},
{
"ignore empty account code checking with non-empty codehash",
func() {
ethAcc := &etherminttypes.EthAccount{
BaseAccount: authtypes.NewBaseAccount(address.Bytes(), nil, 0, 0),
CodeHash: common.BytesToHash([]byte{1, 2, 3}).Hex(),
}
suite.app.AccountKeeper.SetAccount(suite.ctx, ethAcc)
},
&types.GenesisState{
Params: types.DefaultParams(),
Accounts: []types.GenesisAccount{
{
Address: address.String(),
Code: "",
},
},
},
false,
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
suite.SetupTest() // reset values
vmdb = suite.StateDB()
tc.malleate()
vmdb.Commit()
if tc.expPanic {
suite.Require().Panics(
func() {
_ = evm.InitGenesis(suite.ctx, suite.app.EvmKeeper, suite.app.AccountKeeper, *tc.genState)
},
)
} else {
suite.Require().NotPanics(
func() {
_ = evm.InitGenesis(suite.ctx, suite.app.EvmKeeper, suite.app.AccountKeeper, *tc.genState)
},
)
}
})
}
}