Skip to content
This repository has been archived by the owner on Apr 4, 2024. It is now read-only.

ENG 119 json rpc unit tests #1189

Merged
merged 31 commits into from
Jul 29, 2022
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f0e56f4
tests(json-rpc): wip evm_backend unit test setup
danburck Jul 18, 2022
1d8df0b
tests(json-rpc): wip evm_backend unit test setup
danburck Jul 18, 2022
34932a7
fix viper
danburck Jul 19, 2022
4761dc3
wip query client mock
danburck Jul 21, 2022
d1563e7
fix first backend test except error message
danburck Jul 21, 2022
9f1d6ee
clean up
danburck Jul 21, 2022
e38d5d8
wip Context with Height
danburck Jul 21, 2022
c78a4ca
fix JSON RPC backend test setup
danburck Jul 22, 2022
9dc9b6a
typo
danburck Jul 22, 2022
d9840af
refactor folder structure
danburck Jul 22, 2022
a5d65ab
tests(json-rpc):add BlockBloom tests
danburck Jul 22, 2022
a36c7cc
tests(json-rpc): remove unused malleate
danburck Jul 22, 2022
b8efec0
tests(json-rpc): add BaseFee tests
danburck Jul 22, 2022
ee05f99
Merge branch 'main' into ENG-119-json-rpc-unit-tests
danburck Jul 25, 2022
42263a8
refactor query tests
danburck Jul 25, 2022
87a9a4c
add client mock
danburck Jul 25, 2022
b9f4d18
add GetTendermintBlockByNumber tests
danburck Jul 25, 2022
422ff03
refactor mock tests
danburck Jul 25, 2022
b66ae7d
refactor
danburck Jul 25, 2022
51c1426
wip backend EthBlockFromTendermint test
danburck Jul 26, 2022
d5dbe1b
wip backend EthBlockFromTendermint test
danburck Jul 26, 2022
64bb30a
refactor backend EthBlockFromTendermint test
danburck Jul 27, 2022
b0c31f4
add TestGetTendermintBlockResultByNumber
danburck Jul 27, 2022
799fe8d
add GetBlockByNumber tests
danburck Jul 27, 2022
1274ab5
refactor mocks
danburck Jul 27, 2022
74ab452
Merge branch 'main' into ENG-119-json-rpc-unit-tests
danburck Jul 27, 2022
ff2229b
fix spelling
danburck Jul 27, 2022
16ed1b8
Merge branch 'ENG-119-json-rpc-unit-tests' of github.com:tharsis/ethe…
danburck Jul 27, 2022
c169a11
add more tests and address comments
danburck Jul 29, 2022
a2e79fe
Merge branch 'main' into ENG-119-json-rpc-unit-tests
danburck Jul 29, 2022
744093b
fix linter
danburck Jul 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 3 additions & 42 deletions rpc/backend/backend_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,10 @@ import (

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/server"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
mock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"

"github.com/evmos/ethermint/rpc/backend/mocks"
rpc "github.com/evmos/ethermint/rpc/types"
evmtypes "github.com/evmos/ethermint/x/evm/types"
)

type BackendTestSuite struct {
Expand All @@ -30,44 +24,11 @@ func TestBackendTestSuite(t *testing.T) {
func (suite *BackendTestSuite) SetupTest() {
ctx := server.NewDefaultContext()
ctx.Viper.Set("telemetry.global-labels", []interface{}{})
clientCtx := client.Context{}.WithChainID("ethermint_9000-1").WithHeight(1)
clientCtx := client.Context{}.WithChainID("ethermint_9000-1").WithHeight(1).WithOffline(true)
allowUnprotectedTxs := false

suite.backend = NewBackend(ctx, ctx.Logger, clientCtx, allowUnprotectedTxs)

queryClient := mocks.NewQueryClient(suite.T())
var header metadata.MD
RegisterMockQueries(queryClient, &header)

suite.backend.queryClient.QueryClient = queryClient
suite.backend.queryClient.QueryClient = mocks.NewQueryClient(suite.T())
suite.backend.clientCtx.Client = mocks.NewClient(suite.T())
suite.backend.ctx = rpc.ContextWithHeight(1)
}

// QueryClient defines a mocked object that implements the grpc QueryCLient
// interface. It's used on tests to test the JSON-RPC without running a grpc
// client server. E.g. JSON-PRC-CLIENT -> BACKEND -> Mock GRPC CLIENT -> APP
var _ evmtypes.QueryClient = &mocks.QueryClient{}

// RegisterMockQueries registers the queries and their respective responses,
// so that they can be called in tests using the queryClient
func RegisterMockQueries(queryClient *mocks.QueryClient, header *metadata.MD) {
queryClient.On("Params", rpc.ContextWithHeight(1), &evmtypes.QueryParamsRequest{}, grpc.Header(header)).
Return(&evmtypes.QueryParamsResponse{}, nil).
Run(func(args mock.Arguments) {
// If Params call is successful, also update the header height
arg := args.Get(2).(grpc.HeaderCallOption)
h := metadata.MD{}
h.Set(grpctypes.GRPCBlockHeightHeader, "1")
*arg.HeaderAddr = h
})
}

func TestQueryClient(t *testing.T) {
queryClient := mocks.NewQueryClient(t)
var header metadata.MD
RegisterMockQueries(queryClient, &header)

// mock calls for abstraction
_, err := queryClient.Params(rpc.ContextWithHeight(1), &evmtypes.QueryParamsRequest{}, grpc.Header(&header))
require.NoError(t, err)
}
46 changes: 46 additions & 0 deletions rpc/backend/client_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package backend // Client defines a mocked object that implements the tendermint rpc CLient

import (
"testing"

sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/evmos/ethermint/rpc/backend/mocks"
rpc "github.com/evmos/ethermint/rpc/types"
mock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
tmrpcclient "github.com/tendermint/tendermint/rpc/client"
tmrpctypes "github.com/tendermint/tendermint/rpc/core/types"
"github.com/tendermint/tendermint/types"
) // interface. It's used on tests to test the JSON-RPC without running a
danburck marked this conversation as resolved.
Show resolved Hide resolved
// tendermint rpc client server. E.g. JSON-PRC-CLIENT -> BACKEND -> Mock GRPC
// CLIENT -> APP
var _ tmrpcclient.Client = &mocks.Client{}

func TestClient(t *testing.T) {
client := mocks.NewClient(t)

// Register the queries and their respective responses, so that they can be
// called in tests using the client
height := rpc.BlockNumber(1).Int64()
RegisterBlockQueries(client, height)

block := types.Block{Header: types.Header{Height: height}}
res, err := client.Block(rpc.ContextWithHeight(height), &height)
require.Equal(t, res, &tmrpctypes.ResultBlock{Block: &block})
require.NoError(t, err)
}

func RegisterBlockQueries(client *mocks.Client, height int64) {
block := types.Block{Header: types.Header{Height: height}}
client.On("Block", rpc.ContextWithHeight(height), mock.AnythingOfType("*int64")).
Return(&tmrpctypes.ResultBlock{Block: &block}, nil)
}

func RegisterBlockQueriesError(client *mocks.Client, height int64) {
client.On("Block", rpc.ContextWithHeight(height), mock.AnythingOfType("*int64")).
Return(nil, sdkerrors.ErrInvalidRequest)
}
func RegisterBlockQueriesNotFound(client *mocks.Client, height int64) {
client.On("Block", rpc.ContextWithHeight(height), mock.AnythingOfType("*int64")).
Return(&tmrpctypes.ResultBlock{Block: nil}, nil)
}
Loading