From c3fd0e7c64e07c6097ddaf4550bdfbd675ee6f51 Mon Sep 17 00:00:00 2001 From: Emmanuel T Odeke Date: Thu, 13 Apr 2023 11:12:21 +0300 Subject: [PATCH] test(client): add a fuzz test for QueryBalance (#15763) --- client/fuzz_test.go | 60 +++++++++++++++++++ client/grpc_query_test.go | 2 + .../fuzz/FuzzQueryBalance/4bf93f2225e526ac | 2 + 3 files changed, 64 insertions(+) create mode 100644 client/fuzz_test.go create mode 100644 client/testdata/fuzz/FuzzQueryBalance/4bf93f2225e526ac diff --git a/client/fuzz_test.go b/client/fuzz_test.go new file mode 100644 index 000000000000..a28a0b4d9c3a --- /dev/null +++ b/client/fuzz_test.go @@ -0,0 +1,60 @@ +package client_test + +import ( + "context" + "testing" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +type fuzzSuite struct { + IntegrationTestSuite +} + +func (fz *fuzzSuite) FuzzQueryBalance(f *testing.F) { + if testing.Short() { + f.Skip("In -short mode") + } + + // gRPC query to test service should work + testRes, err := fz.testClient.Echo(context.Background(), &testdata.EchoRequest{Message: "hello"}) + fz.Require().NoError(err) + fz.Require().Equal("hello", testRes.Message) + + // 1. Generate some seeds. + bz, err := fz.cdc.Marshal(&types.QueryBalanceRequest{ + Address: fz.genesisAccount.GetAddress().String(), + Denom: sdk.DefaultBondDenom, + }) + fz.Require().NoError(err) + f.Add(bz) + + // 2. Now fuzz it and ensure that we don't get any panics. + ctx := context.Background() + f.Fuzz(func(t *testing.T, in []byte) { + qbReq := new(types.QueryBalanceRequest) + if err := fz.cdc.Unmarshal(in, qbReq); err != nil { + return + } + + // gRPC query to bank service should work + var header metadata.MD + _, _ = fz.bankClient.Balance( + ctx, + qbReq, + grpc.Header(&header), + ) + }) +} + +func FuzzQueryBalance(f *testing.F) { + fzs := new(fuzzSuite) + fzs.SetT(new(testing.T)) + fzs.SetupSuite() + fzs.FuzzQueryBalance(f) +} diff --git a/client/grpc_query_test.go b/client/grpc_query_test.go index f0594fc228f4..fd43d6cf812c 100644 --- a/client/grpc_query_test.go +++ b/client/grpc_query_test.go @@ -33,6 +33,7 @@ type IntegrationTestSuite struct { suite.Suite ctx sdk.Context + cdc codec.Codec genesisAccount *authtypes.BaseAccount bankClient types.QueryClient testClient testdata.QueryClient @@ -96,6 +97,7 @@ func (s *IntegrationTestSuite) SetupSuite() { // end of app init s.ctx = app.BaseApp.NewContext(false, cmtproto.Header{}) + s.cdc = cdc queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, interfaceRegistry) types.RegisterQueryServer(queryHelper, bankKeeper) testdata.RegisterQueryServer(queryHelper, testdata.QueryImpl{}) diff --git a/client/testdata/fuzz/FuzzQueryBalance/4bf93f2225e526ac b/client/testdata/fuzz/FuzzQueryBalance/4bf93f2225e526ac new file mode 100644 index 000000000000..73d7776fdb93 --- /dev/null +++ b/client/testdata/fuzz/FuzzQueryBalance/4bf93f2225e526ac @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("\n-cosmos1wrq8cagsama0xwf2vmlzgrkyynfsxuyhturvyz\x12\x0500000")