Skip to content

Commit

Permalink
fix: return correct types in wasm tests and add expected err (backport
Browse files Browse the repository at this point in the history
…#5883) (#5887)

* fix: return correct types in wasm tests and add expected err (#5883)

Co-authored-by: Cian Hatton cian@interchain.io

(cherry picked from commit 6b11895)

# Conflicts:
#	modules/light-clients/08-wasm/types/querier_test.go

* fix conflicts

* remove duplicate code

* remove duplicate code

* fix test

* fix: address test failures

---------

Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
  • Loading branch information
3 people authored Feb 23, 2024
1 parent 76d755c commit 5b36e01
Showing 1 changed file with 28 additions and 6 deletions.
34 changes: 28 additions & 6 deletions modules/light-clients/08-wasm/types/querier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
testCases := []struct {
name string
malleate func()
expError error
}{
{
"success: custom query",
Expand All @@ -141,7 +142,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {

ibcwasm.SetQueryPlugins(&querierPlugin)

suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, store wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
suite.mockVM.RegisterQueryCallback(types.TimestampAtHeightMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, store wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
queryRequest := types.QueryChecksumsRequest{}
bz, err := queryRequest.Marshal()
suite.Require().NoError(err)
Expand All @@ -165,9 +166,13 @@ func (suite *TypesTestSuite) TestStargateQuery() {

store.Set(testKey, value)

return resp, wasmtesting.DefaultGasUsed, nil
result, err := json.Marshal(types.TimestampAtHeightResult{})
suite.Require().NoError(err)

return result, wasmtesting.DefaultGasUsed, nil
})
},
nil,
},
{
// The following test sets a mock proof key and value in the ibc store and registers a query callback on the Status msg.
Expand All @@ -194,7 +199,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
merklePath, err := commitmenttypes.ApplyPrefix(suite.chainA.GetPrefix(), merklePath)
suite.Require().NoError(err)

suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, _ wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
suite.mockVM.RegisterQueryCallback(types.TimestampAtHeightMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, _ wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
queryRequest := clienttypes.QueryVerifyMembershipRequest{
ClientId: endpoint.ClientID,
Proof: proof,
Expand All @@ -220,7 +225,10 @@ func (suite *TypesTestSuite) TestStargateQuery() {

suite.Require().True(respData.Success)

return resp, wasmtesting.DefaultGasUsed, nil
result, err := json.Marshal(types.TimestampAtHeightResult{})
suite.Require().NoError(err)

return result, wasmtesting.DefaultGasUsed, nil
})

suite.mockVM.RegisterSudoCallback(types.VerifyMembershipMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, sudoMsg []byte, store wasmvm.KVStore,
Expand All @@ -247,11 +255,12 @@ func (suite *TypesTestSuite) TestStargateQuery() {
return &wasmvmtypes.Response{Data: bz}, wasmtesting.DefaultGasUsed, nil
})
},
nil,
},
{
"failure: default querier",
func() {
suite.mockVM.RegisterQueryCallback(types.StatusMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, store wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
suite.mockVM.RegisterQueryCallback(types.TimestampAtHeightMsg{}, func(_ wasmvm.Checksum, _ wasmvmtypes.Env, _ []byte, store wasmvm.KVStore, _ wasmvm.GoAPI, querier wasmvm.Querier, _ wasmvm.GasMeter, _ uint64, _ wasmvmtypes.UFraction) ([]byte, uint64, error) {
queryRequest := types.QueryChecksumsRequest{}
bz, err := queryRequest.Marshal()
suite.Require().NoError(err)
Expand All @@ -270,6 +279,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
return nil, wasmtesting.DefaultGasUsed, err
})
},
wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf("'%s' path is not allowed from the contract", typeURL)},
},
}

Expand All @@ -286,7 +296,19 @@ func (suite *TypesTestSuite) TestStargateQuery() {

clientStore := suite.chainA.App.GetIBCKeeper().ClientKeeper.ClientStore(suite.chainA.GetContext(), endpoint.ClientID)
clientState := endpoint.GetClientState()
clientState.Status(suite.chainA.GetContext(), clientStore, suite.chainA.App.AppCodec())

// NOTE: we register query callbacks against: types.TimestampAtHeightMsg{}
// in practise, this can against any client state msg, however registering against types.StatusMsg{} introduces recursive loops
// due to test case: "success: verify membership query"
_, err = clientState.GetTimestampAtHeight(suite.chainA.GetContext(), clientStore, suite.chainA.App.AppCodec(), clienttypes.NewHeight(1, 100))

expPass := tc.expError == nil
if expPass {
suite.Require().NoError(err)
} else {
// use error contains as wasmvm errors do not implement errors.Is method
suite.Require().ErrorContains(err, tc.expError.Error())
}

if expDiscardedState {
suite.Require().False(clientStore.Has(testKey))
Expand Down

0 comments on commit 5b36e01

Please sign in to comment.