@@ -131,6 +131,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
131131 testCases := []struct {
132132 name string
133133 malleate func ()
134+ expError error
134135 }{
135136 {
136137 "success: custom query" ,
@@ -141,7 +142,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
141142
142143 ibcwasm .SetQueryPlugins (& querierPlugin )
143144
144- 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 ) {
145+ 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 ) {
145146 queryRequest := types.QueryChecksumsRequest {}
146147 bz , err := queryRequest .Marshal ()
147148 suite .Require ().NoError (err )
@@ -165,9 +166,13 @@ func (suite *TypesTestSuite) TestStargateQuery() {
165166
166167 store .Set (testKey , value )
167168
168- return resp , wasmtesting .DefaultGasUsed , nil
169+ result , err := json .Marshal (types.TimestampAtHeightResult {})
170+ suite .Require ().NoError (err )
171+
172+ return result , wasmtesting .DefaultGasUsed , nil
169173 })
170174 },
175+ nil ,
171176 },
172177 {
173178 // The following test sets a mock proof key and value in the ibc store and registers a query callback on the Status msg.
@@ -194,7 +199,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
194199 merklePath , err := commitmenttypes .ApplyPrefix (suite .chainA .GetPrefix (), merklePath )
195200 suite .Require ().NoError (err )
196201
197- 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 ) {
202+ 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 ) {
198203 queryRequest := clienttypes.QueryVerifyMembershipRequest {
199204 ClientId : endpoint .ClientID ,
200205 Proof : proof ,
@@ -220,7 +225,10 @@ func (suite *TypesTestSuite) TestStargateQuery() {
220225
221226 suite .Require ().True (respData .Success )
222227
223- return resp , wasmtesting .DefaultGasUsed , nil
228+ result , err := json .Marshal (types.TimestampAtHeightResult {})
229+ suite .Require ().NoError (err )
230+
231+ return result , wasmtesting .DefaultGasUsed , nil
224232 })
225233
226234 suite .mockVM .RegisterSudoCallback (types.VerifyMembershipMsg {}, func (_ wasmvm.Checksum , _ wasmvmtypes.Env , sudoMsg []byte , store wasmvm.KVStore ,
@@ -247,11 +255,12 @@ func (suite *TypesTestSuite) TestStargateQuery() {
247255 return & wasmvmtypes.Response {Data : bz }, wasmtesting .DefaultGasUsed , nil
248256 })
249257 },
258+ nil ,
250259 },
251260 {
252261 "failure: default querier" ,
253262 func () {
254- 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 ) {
263+ 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 ) {
255264 queryRequest := types.QueryChecksumsRequest {}
256265 bz , err := queryRequest .Marshal ()
257266 suite .Require ().NoError (err )
@@ -270,6 +279,7 @@ func (suite *TypesTestSuite) TestStargateQuery() {
270279 return nil , wasmtesting .DefaultGasUsed , err
271280 })
272281 },
282+ wasmvmtypes.UnsupportedRequest {Kind : fmt .Sprintf ("'%s' path is not allowed from the contract" , typeURL )},
273283 },
274284 }
275285
@@ -286,7 +296,19 @@ func (suite *TypesTestSuite) TestStargateQuery() {
286296
287297 clientStore := suite .chainA .App .GetIBCKeeper ().ClientKeeper .ClientStore (suite .chainA .GetContext (), endpoint .ClientID )
288298 clientState := endpoint .GetClientState ()
289- clientState .Status (suite .chainA .GetContext (), clientStore , suite .chainA .App .AppCodec ())
299+
300+ // NOTE: we register query callbacks against: types.TimestampAtHeightMsg{}
301+ // in practise, this can against any client state msg, however registering against types.StatusMsg{} introduces recursive loops
302+ // due to test case: "success: verify membership query"
303+ _ , err = clientState .GetTimestampAtHeight (suite .chainA .GetContext (), clientStore , suite .chainA .App .AppCodec (), clienttypes .NewHeight (1 , 100 ))
304+
305+ expPass := tc .expError == nil
306+ if expPass {
307+ suite .Require ().NoError (err )
308+ } else {
309+ // use error contains as wasmvm errors do not implement errors.Is method
310+ suite .Require ().ErrorContains (err , tc .expError .Error ())
311+ }
290312
291313 if expDiscardedState {
292314 suite .Require ().False (clientStore .Has (testKey ))
0 commit comments