Fix query handler instantiation
This commit is contained in:
@@ -487,10 +487,7 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply was
|
|||||||
env := types.NewEnv(ctx, contractAddress)
|
env := types.NewEnv(ctx, contractAddress)
|
||||||
|
|
||||||
// prepare querier
|
// prepare querier
|
||||||
querier := QueryHandler{
|
querier := k.newQueryHandler(ctx, contractAddress)
|
||||||
Ctx: ctx,
|
|
||||||
Plugins: k.wasmVMQueryHandler,
|
|
||||||
}
|
|
||||||
gas := k.runtimeGasForContract(ctx)
|
gas := k.runtimeGasForContract(ctx)
|
||||||
res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJsonDeserialization)
|
res, gasUsed, execErr := k.wasmVM.Reply(codeInfo.CodeHash, env, reply, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJsonDeserialization)
|
||||||
k.consumeRuntimeGas(ctx, gasUsed)
|
k.consumeRuntimeGas(ctx, gasUsed)
|
||||||
|
|||||||
@@ -1591,28 +1591,54 @@ func TestReply(t *testing.T) {
|
|||||||
example := SeedNewContractInstance(t, ctx, keepers, &mock)
|
example := SeedNewContractInstance(t, ctx, keepers, &mock)
|
||||||
|
|
||||||
specs := map[string]struct {
|
specs := map[string]struct {
|
||||||
rsp wasmvmtypes.Response
|
replyFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error)
|
||||||
expData []byte
|
expData []byte
|
||||||
expErr bool
|
expErr bool
|
||||||
expEvt sdk.Events
|
expEvt sdk.Events
|
||||||
}{
|
}{
|
||||||
"all good": {
|
"all good": {
|
||||||
rsp: wasmvmtypes.Response{Data: []byte("foo")},
|
replyFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) {
|
||||||
|
return &wasmvmtypes.Response{Data: []byte("foo")}, 1, nil
|
||||||
|
},
|
||||||
|
expData: []byte("foo"),
|
||||||
|
expEvt: sdk.Events{sdk.NewEvent("reply", sdk.NewAttribute("_contract_address", example.Contract.String()))},
|
||||||
|
},
|
||||||
|
"with query": {
|
||||||
|
replyFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) {
|
||||||
|
bzRsp, err := querier.Query(wasmvmtypes.QueryRequest{
|
||||||
|
Bank: &wasmvmtypes.BankQuery{
|
||||||
|
Balance: &wasmvmtypes.BalanceQuery{Address: env.Contract.Address, Denom: "stake"},
|
||||||
|
},
|
||||||
|
}, 1_000_000)
|
||||||
|
require.NoError(t, err)
|
||||||
|
var gotBankRsp wasmvmtypes.BalanceResponse
|
||||||
|
require.NoError(t, json.Unmarshal(bzRsp, &gotBankRsp))
|
||||||
|
assert.Equal(t, wasmvmtypes.BalanceResponse{Amount: wasmvmtypes.NewCoin(0, "stake")}, gotBankRsp)
|
||||||
|
return &wasmvmtypes.Response{Data: []byte("foo")}, 1, nil
|
||||||
|
},
|
||||||
|
expData: []byte("foo"),
|
||||||
|
expEvt: sdk.Events{sdk.NewEvent("reply", sdk.NewAttribute("_contract_address", example.Contract.String()))},
|
||||||
|
},
|
||||||
|
"with query error handled": {
|
||||||
|
replyFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) {
|
||||||
|
bzRsp, err := querier.Query(wasmvmtypes.QueryRequest{}, 0)
|
||||||
|
require.Error(t, err)
|
||||||
|
assert.Nil(t, bzRsp)
|
||||||
|
return &wasmvmtypes.Response{Data: []byte("foo")}, 1, nil
|
||||||
|
},
|
||||||
expData: []byte("foo"),
|
expData: []byte("foo"),
|
||||||
expEvt: sdk.Events{sdk.NewEvent("reply", sdk.NewAttribute("_contract_address", example.Contract.String()))},
|
expEvt: sdk.Events{sdk.NewEvent("reply", sdk.NewAttribute("_contract_address", example.Contract.String()))},
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
|
replyFn: func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) {
|
||||||
|
return nil, 1, errors.New("testing")
|
||||||
|
},
|
||||||
expErr: true,
|
expErr: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for name, spec := range specs {
|
for name, spec := range specs {
|
||||||
t.Run(name, func(t *testing.T) {
|
t.Run(name, func(t *testing.T) {
|
||||||
mock.ReplyFn = func(codeID wasmvm.Checksum, env wasmvmtypes.Env, reply wasmvmtypes.Reply, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.Response, uint64, error) {
|
mock.ReplyFn = spec.replyFn
|
||||||
if spec.expErr {
|
|
||||||
return nil, 1, errors.New("testing")
|
|
||||||
}
|
|
||||||
return &spec.rsp, 1, nil
|
|
||||||
}
|
|
||||||
em := sdk.NewEventManager()
|
em := sdk.NewEventManager()
|
||||||
gotData, gotErr := k.reply(ctx.WithEventManager(em), example.Contract, wasmvmtypes.Reply{})
|
gotData, gotErr := k.reply(ctx.WithEventManager(em), example.Contract, wasmvmtypes.Reply{})
|
||||||
if spec.expErr {
|
if spec.expErr {
|
||||||
|
|||||||
Reference in New Issue
Block a user