Skip to content

Commit 88b8da5

Browse files
committed
test
1 parent c93e245 commit 88b8da5

File tree

1 file changed

+94
-42
lines changed

1 file changed

+94
-42
lines changed

tests/integration/rpc/backend/test_call_tx.go

Lines changed: 94 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package backend
22

33
import (
4+
"encoding/base64"
45
"encoding/json"
56
"errors"
67
"fmt"
@@ -18,10 +19,12 @@ import (
1819
utiltx "github.com/cosmos/evm/testutil/tx"
1920
evmtypes "github.com/cosmos/evm/x/vm/types"
2021

22+
"cosmossdk.io/collections"
2123
"cosmossdk.io/math"
2224

2325
sdk "github.com/cosmos/cosmos-sdk/types"
2426
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
27+
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
2528
)
2629

2730
func (s *TestSuite) TestResend() {
@@ -414,6 +417,20 @@ func (s *TestSuite) TestSendRawTransaction() {
414417
}
415418
}
416419

420+
func (s *TestSuite) registerMock(bz []byte, expectedRequest *evmtypes.EthCallRequest, shouldError bool) func() {
421+
return func() {
422+
client := s.backend.ClientCtx.Client.(*mocks.Client)
423+
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
424+
height := int64(1)
425+
RegisterHeader(client, &height, bz)
426+
if shouldError {
427+
RegisterEthCallError(QueryClient, expectedRequest)
428+
} else {
429+
RegisterEthCall(QueryClient, expectedRequest)
430+
}
431+
}
432+
}
433+
417434
func (s *TestSuite) TestDoCall() {
418435
_, bz := s.buildEthereumTx()
419436
gasPrice := (*hexutil.Big)(big.NewInt(1))
@@ -432,10 +449,12 @@ func (s *TestSuite) TestDoCall() {
432449
AccessList: nil,
433450
ChainID: evmChainID,
434451
}
452+
453+
var err error
435454
argsBz, err := json.Marshal(callArgs)
436455
s.Require().NoError(err)
437456

438-
overrides := json.RawMessage(`{
457+
evmOverrides := json.RawMessage(`{
439458
"` + toAddr.Hex() + `": {
440459
"balance": "0x1000000000000000000",
441460
"nonce": "0x1",
@@ -445,8 +464,43 @@ func (s *TestSuite) TestDoCall() {
445464
}
446465
}
447466
}`)
467+
evmOverridesParsed, _, err := rpctypes.ParseOverrides(&evmOverrides)
468+
s.Require().NoError(err)
469+
var bzOverrides []byte
470+
if evmOverridesParsed != nil {
471+
bzOverrides, err = json.Marshal(evmOverridesParsed)
472+
s.Require().NoError(err)
473+
}
474+
475+
// Cosmos state overrides with bank balance key
476+
addr := common.HexToAddress("0x378c50D9264C63F3F92B806d4ee56E9D86FfB3Ec")
477+
acc := sdk.AccAddress(addr.Bytes())
478+
denom := fmt.Sprintf("factory/%s/eth_call", acc.String())
479+
keyCodec := collections.PairKeyCodec(sdk.AccAddressKey, collections.StringKey)
480+
key, err := collections.EncodeKeyWithPrefix(banktypes.BalancesPrefix, keyCodec, collections.Join(acc, denom))
481+
s.Require().NoError(err)
482+
s.Require().NotEmpty(key)
483+
value := []byte("99")
484+
keyB64 := base64.StdEncoding.EncodeToString(key)
485+
valueB64 := base64.StdEncoding.EncodeToString(value)
486+
cosmosOverrides := json.RawMessage(`{
487+
"cosmosStateOverrides": [
488+
{
489+
"name": "bank",
490+
"entries": [
491+
{
492+
"key": "` + keyB64 + `",
493+
"value": "` + valueB64 + `",
494+
"delete": false
495+
}
496+
]
497+
}
498+
]
499+
}`)
500+
448501
invalidOverrides := json.RawMessage(`{"invalid": json}`)
449502
emptyOverrides := json.RawMessage(`{}`)
503+
baseRequest := &evmtypes.EthCallRequest{Args: argsBz, ChainId: s.backend.EvmChainID.Int64()}
450504
testCases := []struct {
451505
name string
452506
registerMock func()
@@ -458,13 +512,7 @@ func (s *TestSuite) TestDoCall() {
458512
}{
459513
{
460514
"fail - Invalid request",
461-
func() {
462-
client := s.backend.ClientCtx.Client.(*mocks.Client)
463-
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
464-
height := int64(1)
465-
RegisterHeader(client, &height, bz)
466-
RegisterEthCallError(QueryClient, &evmtypes.EthCallRequest{Args: argsBz, ChainId: s.backend.EvmChainID.Int64()})
467-
},
515+
s.registerMock(bz, baseRequest, true),
468516
rpctypes.BlockNumber(1),
469517
callArgs,
470518
nil,
@@ -473,52 +521,38 @@ func (s *TestSuite) TestDoCall() {
473521
},
474522
{
475523
"pass - Returned transaction response",
476-
func() {
477-
client := s.backend.ClientCtx.Client.(*mocks.Client)
478-
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
479-
height := int64(1)
480-
RegisterHeader(client, &height, bz)
481-
RegisterEthCall(QueryClient, &evmtypes.EthCallRequest{Args: argsBz, ChainId: s.backend.EvmChainID.Int64()})
482-
},
524+
s.registerMock(bz, baseRequest, false),
483525
rpctypes.BlockNumber(1),
484526
callArgs,
485527
nil,
486528
&evmtypes.MsgEthereumTxResponse{},
487529
true,
488530
},
489531
{
490-
"pass - With state overrides",
532+
"pass - With EVM state overrides",
491533
func() {
492-
client := s.backend.ClientCtx.Client.(*mocks.Client)
493-
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
494-
height := int64(1)
495-
RegisterHeader(client, &height, bz)
496-
expected := &evmtypes.EthCallRequest{
497-
Args: argsBz,
498-
ChainId: s.backend.EvmChainID.Int64(),
499-
Overrides: overrides,
534+
_, expectedCosmosOverrides, err := rpctypes.ParseOverrides(&evmOverrides)
535+
s.Require().NoError(err)
536+
expectedRequest := &evmtypes.EthCallRequest{
537+
Args: argsBz,
538+
ChainId: s.backend.EvmChainID.Int64(),
539+
Overrides: bzOverrides,
540+
StateOverrides: expectedCosmosOverrides,
500541
}
501-
RegisterEthCall(QueryClient, expected)
542+
s.registerMock(bz, expectedRequest, false)()
502543
},
503544
rpctypes.BlockNumber(1),
504545
callArgs,
505-
&overrides,
546+
&evmOverrides,
506547
&evmtypes.MsgEthereumTxResponse{},
507548
true,
508549
},
509550
{
510551
"fail - Invalid state overrides JSON",
511552
func() {
512553
client := s.backend.ClientCtx.Client.(*mocks.Client)
513-
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
514554
height := int64(1)
515555
RegisterHeader(client, &height, bz)
516-
expected := &evmtypes.EthCallRequest{
517-
Args: argsBz,
518-
ChainId: s.backend.EvmChainID.Int64(),
519-
Overrides: invalidOverrides,
520-
}
521-
RegisterEthCallError(QueryClient, expected)
522556
},
523557
rpctypes.BlockNumber(1),
524558
callArgs,
@@ -529,23 +563,41 @@ func (s *TestSuite) TestDoCall() {
529563
{
530564
"pass - Empty state overrides",
531565
func() {
532-
client := s.backend.ClientCtx.Client.(*mocks.Client)
533-
QueryClient := s.backend.QueryClient.QueryClient.(*mocks.EVMQueryClient)
534-
height := int64(1)
535-
RegisterHeader(client, &height, bz)
536-
expected := &evmtypes.EthCallRequest{
537-
Args: argsBz,
538-
ChainId: s.backend.EvmChainID.Int64(),
539-
Overrides: emptyOverrides,
566+
_, expectedCosmosOverrides, err := rpctypes.ParseOverrides(&emptyOverrides)
567+
s.Require().NoError(err)
568+
expectedRequest := &evmtypes.EthCallRequest{
569+
Args: argsBz,
570+
ChainId: s.backend.EvmChainID.Int64(),
571+
Overrides: nil,
572+
StateOverrides: expectedCosmosOverrides,
540573
}
541-
RegisterEthCall(QueryClient, expected)
574+
s.registerMock(bz, expectedRequest, false)()
542575
},
543576
rpctypes.BlockNumber(1),
544577
callArgs,
545578
&emptyOverrides,
546579
&evmtypes.MsgEthereumTxResponse{},
547580
true,
548581
},
582+
{
583+
"pass - With cosmos state overrides JSON",
584+
func() {
585+
_, expectedCosmosOverrides, err := rpctypes.ParseOverrides(&cosmosOverrides)
586+
s.Require().NoError(err)
587+
expectedRequest := &evmtypes.EthCallRequest{
588+
Args: argsBz,
589+
ChainId: s.backend.EvmChainID.Int64(),
590+
Overrides: nil,
591+
StateOverrides: expectedCosmosOverrides,
592+
}
593+
s.registerMock(bz, expectedRequest, false)()
594+
},
595+
rpctypes.BlockNumber(1),
596+
callArgs,
597+
&cosmosOverrides,
598+
&evmtypes.MsgEthereumTxResponse{},
599+
true,
600+
},
549601
}
550602

551603
for _, tc := range testCases {

0 commit comments

Comments
 (0)