2021-05-17 10:13:08 +00:00
|
|
|
package keeper_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"google.golang.org/grpc/metadata"
|
|
|
|
|
2021-06-08 17:10:29 +00:00
|
|
|
"github.com/ethereum/go-ethereum/common"
|
2021-05-17 10:13:08 +00:00
|
|
|
ethcmn "github.com/ethereum/go-ethereum/common"
|
|
|
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
|
|
|
ethcrypto "github.com/ethereum/go-ethereum/crypto"
|
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
|
2021-06-22 10:49:18 +00:00
|
|
|
ethermint "github.com/tharsis/ethermint/types"
|
|
|
|
"github.com/tharsis/ethermint/x/evm/types"
|
2021-05-17 10:13:08 +00:00
|
|
|
|
|
|
|
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
|
|
|
|
)
|
|
|
|
|
2021-06-29 15:08:07 +00:00
|
|
|
//Not valid Ethereum address
|
|
|
|
const invalidAddress = "0x0000"
|
|
|
|
|
2021-05-17 10:13:08 +00:00
|
|
|
func (suite *KeeperTestSuite) TestQueryAccount() {
|
|
|
|
var (
|
|
|
|
req *types.QueryAccountRequest
|
|
|
|
expAccount *types.QueryAccountResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-30 15:28:38 +00:00
|
|
|
{
|
|
|
|
"invalid address",
|
2021-05-17 10:13:08 +00:00
|
|
|
func() {
|
|
|
|
expAccount = &types.QueryAccountResponse{
|
2021-07-02 09:29:47 +00:00
|
|
|
Balance: "0",
|
2021-06-08 17:10:29 +00:00
|
|
|
CodeHash: common.BytesToHash(ethcrypto.Keccak256(nil)).Hex(),
|
2021-05-17 10:13:08 +00:00
|
|
|
Nonce: 0,
|
|
|
|
}
|
|
|
|
req = &types.QueryAccountRequest{
|
2021-06-29 15:08:07 +00:00
|
|
|
Address: invalidAddress,
|
2021-05-17 10:13:08 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
2021-06-29 17:02:21 +00:00
|
|
|
amt := sdk.Coins{ethermint.NewPhotonCoinInt64(100)}
|
2021-06-30 15:28:38 +00:00
|
|
|
err := suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, amt)
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, suite.address.Bytes(), amt)
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
|
2021-05-17 10:13:08 +00:00
|
|
|
expAccount = &types.QueryAccountResponse{
|
2021-07-02 09:29:47 +00:00
|
|
|
Balance: "100",
|
2021-06-08 17:10:29 +00:00
|
|
|
CodeHash: common.BytesToHash(ethcrypto.Keccak256(nil)).Hex(),
|
2021-05-17 10:13:08 +00:00
|
|
|
Nonce: 0,
|
|
|
|
}
|
|
|
|
req = &types.QueryAccountRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.Account(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expAccount, res)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryCosmosAccount() {
|
|
|
|
var (
|
|
|
|
req *types.QueryCosmosAccountRequest
|
|
|
|
expAccount *types.QueryCosmosAccountResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-29 15:08:07 +00:00
|
|
|
{"invalid address",
|
2021-05-17 10:13:08 +00:00
|
|
|
func() {
|
|
|
|
expAccount = &types.QueryCosmosAccountResponse{
|
|
|
|
CosmosAddress: sdk.AccAddress(ethcmn.Address{}.Bytes()).String(),
|
|
|
|
}
|
|
|
|
req = &types.QueryCosmosAccountRequest{
|
2021-06-29 15:08:07 +00:00
|
|
|
Address: invalidAddress,
|
2021-05-17 10:13:08 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
expAccount = &types.QueryCosmosAccountResponse{
|
|
|
|
CosmosAddress: sdk.AccAddress(suite.address.Bytes()).String(),
|
|
|
|
Sequence: 0,
|
|
|
|
AccountNumber: 0,
|
|
|
|
}
|
|
|
|
req = &types.QueryCosmosAccountRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success with seq and account number",
|
|
|
|
func() {
|
|
|
|
acc := suite.app.AccountKeeper.GetAccount(suite.ctx, suite.address.Bytes())
|
|
|
|
suite.Require().NoError(acc.SetSequence(10))
|
|
|
|
suite.Require().NoError(acc.SetAccountNumber(1))
|
|
|
|
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
|
|
|
|
|
|
|
expAccount = &types.QueryCosmosAccountResponse{
|
|
|
|
CosmosAddress: sdk.AccAddress(suite.address.Bytes()).String(),
|
|
|
|
Sequence: 10,
|
|
|
|
AccountNumber: 1,
|
|
|
|
}
|
|
|
|
req = &types.QueryCosmosAccountRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.CosmosAccount(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expAccount, res)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryBalance() {
|
|
|
|
var (
|
|
|
|
req *types.QueryBalanceRequest
|
2021-07-02 09:29:47 +00:00
|
|
|
expBalance string
|
2021-05-17 10:13:08 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-29 15:08:07 +00:00
|
|
|
{"invalid address",
|
2021-05-17 10:13:08 +00:00
|
|
|
func() {
|
2021-07-02 09:29:47 +00:00
|
|
|
expBalance = "0"
|
2021-05-17 10:13:08 +00:00
|
|
|
req = &types.QueryBalanceRequest{
|
2021-06-29 15:08:07 +00:00
|
|
|
Address: invalidAddress,
|
2021-05-17 10:13:08 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
2021-06-29 17:02:21 +00:00
|
|
|
amt := sdk.Coins{ethermint.NewPhotonCoinInt64(100)}
|
2021-06-30 15:28:38 +00:00
|
|
|
err := suite.app.BankKeeper.MintCoins(suite.ctx, types.ModuleName, amt)
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
err = suite.app.BankKeeper.SendCoinsFromModuleToAccount(suite.ctx, types.ModuleName, suite.address.Bytes(), amt)
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
|
2021-07-02 09:29:47 +00:00
|
|
|
expBalance = "100"
|
2021-05-17 10:13:08 +00:00
|
|
|
req = &types.QueryBalanceRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.Balance(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expBalance, res.Balance)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryStorage() {
|
|
|
|
var (
|
|
|
|
req *types.QueryStorageRequest
|
|
|
|
expValue string
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-29 15:08:07 +00:00
|
|
|
{"invalid address",
|
2021-05-17 10:13:08 +00:00
|
|
|
func() {
|
|
|
|
req = &types.QueryStorageRequest{
|
2021-06-29 15:08:07 +00:00
|
|
|
Address: invalidAddress,
|
2021-05-17 10:13:08 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{"empty hash",
|
|
|
|
func() {
|
|
|
|
req = &types.QueryStorageRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Key: ethcmn.Hash{}.String(),
|
|
|
|
}
|
|
|
|
},
|
2021-05-31 14:54:59 +00:00
|
|
|
false,
|
2021-05-17 10:13:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
key := ethcmn.BytesToHash([]byte("key"))
|
|
|
|
value := ethcmn.BytesToHash([]byte("value"))
|
|
|
|
expValue = value.String()
|
2021-06-08 17:10:29 +00:00
|
|
|
suite.app.EvmKeeper.SetState(suite.address, key, value)
|
2021-05-17 10:13:08 +00:00
|
|
|
req = &types.QueryStorageRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Key: key.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.Storage(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expValue, res.Value)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryCode() {
|
|
|
|
var (
|
|
|
|
req *types.QueryCodeRequest
|
|
|
|
expCode []byte
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-29 15:08:07 +00:00
|
|
|
{"invalid address",
|
2021-05-17 10:13:08 +00:00
|
|
|
func() {
|
|
|
|
req = &types.QueryCodeRequest{
|
2021-06-29 15:08:07 +00:00
|
|
|
Address: invalidAddress,
|
2021-05-17 10:13:08 +00:00
|
|
|
}
|
|
|
|
exp := &types.QueryCodeResponse{}
|
|
|
|
expCode = exp.Code
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
expCode = []byte("code")
|
2021-06-08 17:10:29 +00:00
|
|
|
suite.app.EvmKeeper.SetCode(suite.address, expCode)
|
2021-05-17 10:13:08 +00:00
|
|
|
|
|
|
|
req = &types.QueryCodeRequest{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.Code(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expCode, res.Code)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryTxLogs() {
|
|
|
|
var (
|
|
|
|
req *types.QueryTxLogsRequest
|
|
|
|
expLogs []*types.Log
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
|
|
|
{"empty hash",
|
|
|
|
func() {
|
|
|
|
req = &types.QueryTxLogsRequest{
|
|
|
|
Hash: ethcmn.Hash{}.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{"logs not found",
|
|
|
|
func() {
|
|
|
|
hash := ethcmn.BytesToHash([]byte("hash"))
|
|
|
|
req = &types.QueryTxLogsRequest{
|
|
|
|
Hash: hash.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
hash := ethcmn.BytesToHash([]byte("tx_hash"))
|
|
|
|
|
|
|
|
expLogs = []*types.Log{
|
|
|
|
{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Topics: []string{ethcmn.BytesToHash([]byte("topic")).String()},
|
|
|
|
Data: []byte("data"),
|
|
|
|
BlockNumber: 1,
|
|
|
|
TxHash: hash.String(),
|
|
|
|
TxIndex: 1,
|
|
|
|
BlockHash: ethcmn.BytesToHash([]byte("block_hash")).String(),
|
|
|
|
Index: 0,
|
|
|
|
Removed: false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-06-08 17:10:29 +00:00
|
|
|
suite.app.EvmKeeper.SetLogs(hash, types.LogsToEthereum(expLogs))
|
2021-05-17 10:13:08 +00:00
|
|
|
|
|
|
|
req = &types.QueryTxLogsRequest{
|
|
|
|
Hash: hash.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.TxLogs(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expLogs, res.Logs)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryBlockLogs() {
|
|
|
|
var (
|
|
|
|
req *types.QueryBlockLogsRequest
|
|
|
|
expLogs []types.TransactionLogs
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
|
|
|
{"empty hash",
|
|
|
|
func() {
|
|
|
|
req = &types.QueryBlockLogsRequest{
|
|
|
|
Hash: ethcmn.Hash{}.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{"logs not found",
|
|
|
|
func() {
|
|
|
|
hash := ethcmn.BytesToHash([]byte("hash"))
|
|
|
|
req = &types.QueryBlockLogsRequest{
|
|
|
|
Hash: hash.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
|
|
|
|
hash := ethcmn.BytesToHash([]byte("block_hash"))
|
|
|
|
expLogs = []types.TransactionLogs{
|
|
|
|
{
|
|
|
|
Hash: ethcmn.BytesToHash([]byte("tx_hash_0")).String(),
|
|
|
|
Logs: []*types.Log{
|
|
|
|
{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Topics: []string{ethcmn.BytesToHash([]byte("topic")).String()},
|
|
|
|
Data: []byte("data"),
|
|
|
|
BlockNumber: 1,
|
|
|
|
TxHash: ethcmn.BytesToHash([]byte("tx_hash_0")).String(),
|
|
|
|
TxIndex: 1,
|
|
|
|
BlockHash: ethcmn.BytesToHash([]byte("block_hash")).String(),
|
|
|
|
Index: 0,
|
|
|
|
Removed: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Hash: ethcmn.BytesToHash([]byte("tx_hash_1")).String(),
|
|
|
|
Logs: []*types.Log{
|
|
|
|
{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Topics: []string{ethcmn.BytesToHash([]byte("topic")).String()},
|
|
|
|
Data: []byte("data"),
|
|
|
|
BlockNumber: 1,
|
|
|
|
TxHash: ethcmn.BytesToHash([]byte("tx_hash_1")).String(),
|
|
|
|
TxIndex: 1,
|
|
|
|
BlockHash: ethcmn.BytesToHash([]byte("block_hash")).String(),
|
|
|
|
Index: 0,
|
|
|
|
Removed: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Address: suite.address.String(),
|
|
|
|
Topics: []string{ethcmn.BytesToHash([]byte("topic_1")).String()},
|
|
|
|
Data: []byte("data_1"),
|
|
|
|
BlockNumber: 1,
|
|
|
|
TxHash: ethcmn.BytesToHash([]byte("tx_hash_1")).String(),
|
|
|
|
TxIndex: 1,
|
|
|
|
BlockHash: ethcmn.BytesToHash([]byte("block_hash")).String(),
|
|
|
|
Index: 0,
|
|
|
|
Removed: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-06-08 17:10:29 +00:00
|
|
|
suite.app.EvmKeeper.SetLogs(ethcmn.BytesToHash([]byte("tx_hash_0")), types.LogsToEthereum(expLogs[0].Logs))
|
|
|
|
suite.app.EvmKeeper.SetLogs(ethcmn.BytesToHash([]byte("tx_hash_1")), types.LogsToEthereum(expLogs[1].Logs))
|
2021-05-17 10:13:08 +00:00
|
|
|
|
|
|
|
req = &types.QueryBlockLogsRequest{
|
|
|
|
Hash: hash.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.BlockLogs(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expLogs, res.TxLogs)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryBlockBloom() {
|
|
|
|
var (
|
|
|
|
req *types.QueryBlockBloomRequest
|
|
|
|
expBloom []byte
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
|
|
|
{"marshal error",
|
|
|
|
func() {},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{"bloom not found for height",
|
|
|
|
func() {
|
|
|
|
req = &types.QueryBlockBloomRequest{}
|
|
|
|
bloom := ethtypes.BytesToBloom([]byte("bloom"))
|
|
|
|
expBloom = bloom.Bytes()
|
|
|
|
suite.ctx = suite.ctx.WithBlockHeight(10)
|
|
|
|
suite.app.EvmKeeper.SetBlockBloom(suite.ctx, 2, bloom)
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
req = &types.QueryBlockBloomRequest{}
|
|
|
|
bloom := ethtypes.BytesToBloom([]byte("bloom"))
|
|
|
|
expBloom = bloom.Bytes()
|
|
|
|
suite.ctx = suite.ctx.WithBlockHeight(1)
|
|
|
|
suite.app.EvmKeeper.SetBlockBloom(suite.ctx, 1, bloom)
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
ctx = metadata.AppendToOutgoingContext(ctx, grpctypes.GRPCBlockHeightHeader, fmt.Sprintf("%d", suite.ctx.BlockHeight()))
|
|
|
|
res, err := suite.queryClient.BlockBloom(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expBloom, res.Bloom)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (suite *KeeperTestSuite) TestQueryParams() {
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
expParams := types.DefaultParams()
|
|
|
|
|
|
|
|
res, err := suite.queryClient.Params(ctx, &types.QueryParamsRequest{})
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().Equal(expParams, res.Params)
|
|
|
|
}
|
2021-06-22 10:14:40 +00:00
|
|
|
|
2021-07-08 14:46:42 +00:00
|
|
|
func (suite *KeeperTestSuite) TestQueryChainConfig() {
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
expChainConfig := types.DefaultChainConfig()
|
|
|
|
|
|
|
|
res, err := suite.queryClient.ChainConfig(ctx, &types.QueryChainConfigRequest{})
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().Equal(expChainConfig, res.Config)
|
|
|
|
}
|
|
|
|
|
2021-06-22 10:14:40 +00:00
|
|
|
func (suite *KeeperTestSuite) TestQueryValidatorAccount() {
|
|
|
|
var (
|
|
|
|
req *types.QueryValidatorAccountRequest
|
|
|
|
expAccount *types.QueryValidatorAccountResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
2021-06-29 15:08:07 +00:00
|
|
|
{"invalid address",
|
2021-06-22 10:14:40 +00:00
|
|
|
func() {
|
|
|
|
expAccount = &types.QueryValidatorAccountResponse{
|
|
|
|
AccountAddress: sdk.AccAddress(ethcmn.Address{}.Bytes()).String(),
|
|
|
|
}
|
|
|
|
req = &types.QueryValidatorAccountRequest{
|
|
|
|
ConsAddress: "",
|
|
|
|
}
|
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
expAccount = &types.QueryValidatorAccountResponse{
|
|
|
|
AccountAddress: sdk.AccAddress(suite.address.Bytes()).String(),
|
2021-06-22 10:49:18 +00:00
|
|
|
Sequence: 0,
|
|
|
|
AccountNumber: 0,
|
2021-06-22 10:14:40 +00:00
|
|
|
}
|
|
|
|
req = &types.QueryValidatorAccountRequest{
|
|
|
|
ConsAddress: suite.consAddress.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success with seq and account number",
|
|
|
|
func() {
|
|
|
|
acc := suite.app.AccountKeeper.GetAccount(suite.ctx, suite.address.Bytes())
|
|
|
|
suite.Require().NoError(acc.SetSequence(10))
|
|
|
|
suite.Require().NoError(acc.SetAccountNumber(1))
|
|
|
|
suite.app.AccountKeeper.SetAccount(suite.ctx, acc)
|
|
|
|
|
|
|
|
expAccount = &types.QueryValidatorAccountResponse{
|
|
|
|
AccountAddress: sdk.AccAddress(suite.address.Bytes()).String(),
|
2021-06-22 10:49:18 +00:00
|
|
|
Sequence: 10,
|
|
|
|
AccountNumber: 1,
|
2021-06-22 10:14:40 +00:00
|
|
|
}
|
|
|
|
req = &types.QueryValidatorAccountRequest{
|
|
|
|
ConsAddress: suite.consAddress.String(),
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
|
|
|
|
suite.SetupTest() // reset
|
|
|
|
|
|
|
|
tc.malleate()
|
|
|
|
ctx := sdk.WrapSDKContext(suite.ctx)
|
|
|
|
res, err := suite.queryClient.ValidatorAccount(ctx, req)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
suite.Require().NoError(err)
|
|
|
|
suite.Require().NotNil(res)
|
|
|
|
|
|
|
|
suite.Require().Equal(expAccount, res)
|
|
|
|
} else {
|
|
|
|
suite.Require().Error(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2021-06-22 10:49:18 +00:00
|
|
|
}
|