Skip to content

Commit cfe1940

Browse files
test: fix failing tests after protocompat changes (cosmos#22889)
Co-authored-by: Marko <[email protected]>
1 parent c263939 commit cfe1940

File tree

8 files changed

+173
-71
lines changed

8 files changed

+173
-71
lines changed

baseapp/internal/protocompat/protocompat.go

+22-10
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,13 @@ func makeGogoHybridHandler(prefMethod protoreflect.MethodDescriptor, cdc codec.B
123123
return fmt.Errorf("invalid request type %T, method %s does not accept protov2 messages", inReq, prefMethod.FullName())
124124
}
125125
resp, err := method.Handler(handler, ctx, func(msg any) error {
126-
setPointer(msg, inReq)
127-
return nil
126+
return setPointer(msg, inReq)
128127
}, nil)
129128
if err != nil {
130129
return err
131130
}
132-
setPointer(outResp, resp)
133-
return nil
131+
132+
return setPointer(outResp, resp)
134133
}, nil
135134
}
136135
// this is a gogo handler, and we have a protov2 counterparty.
@@ -161,14 +160,13 @@ func makeGogoHybridHandler(prefMethod protoreflect.MethodDescriptor, cdc codec.B
161160
case gogoproto.Message:
162161
// we can just call the handler after making a copy of the message, for safety reasons.
163162
resp, err := method.Handler(handler, ctx, func(msg any) error {
164-
setPointer(msg, m)
165-
return nil
163+
return setPointer(msg, m)
166164
}, nil)
167165
if err != nil {
168166
return err
169167
}
170-
setPointer(outResp, resp)
171-
return nil
168+
169+
return setPointer(outResp, resp)
172170
default:
173171
panic("unreachable")
174172
}
@@ -235,6 +233,20 @@ func ResponseFullNameFromMethodDesc(sd *grpc.ServiceDesc, method grpc.MethodDesc
235233

236234
// since proto.Merge breaks due to the custom cosmos sdk any, we are forced to do this ugly setPointer hack.
237235
// ref: https://github.com/cosmos/cosmos-sdk/issues/22779
238-
func setPointer(dst, src any) {
239-
reflect.ValueOf(dst).Elem().Set(reflect.ValueOf(src).Elem())
236+
func setPointer(dst, src any) error {
237+
dstValue := reflect.ValueOf(dst)
238+
srcValue := reflect.ValueOf(src)
239+
if !dstValue.IsValid() || !srcValue.IsValid() {
240+
return fmt.Errorf("dst and src must be valid")
241+
}
242+
if dstValue.IsNil() || srcValue.IsNil() {
243+
return fmt.Errorf("dst and src must be non-nil")
244+
}
245+
dstElem := dstValue.Elem()
246+
srcElem := srcValue.Elem()
247+
if dstElem.Type() != srcElem.Type() {
248+
return fmt.Errorf("dst and src must have the same type")
249+
}
250+
dstElem.Set(srcElem)
251+
return nil
240252
}

scripts/mockgen.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $mockgen_cmd -source=x/mint/types/expected_keepers.go -package testutil -destina
1515
$mockgen_cmd -source=x/auth/tx/config/expected_keepers.go -package testutil -destination x/auth/tx/testutil/expected_keepers_mocks.go
1616
$mockgen_cmd -source=x/auth/types/expected_keepers.go -package testutil -destination x/auth/testutil/expected_keepers_mocks.go
1717
$mockgen_cmd -source=x/auth/ante/expected_keepers.go -package testutil -destination x/auth/ante/testutil/expected_keepers_mocks.go
18-
$mockgen_cmd -source=x/authz/expected_keepers.go -package testutil -destination x/authz/testutil/expected_keepers_mocks.go
18+
$mockgen_cmd -source=x/authz/testutil/expected_keepers.go -package testutil -destination x/authz/testutil/expected_keepers_mocks.go
1919
$mockgen_cmd -source=x/bank/types/expected_keepers.go -package testutil -destination x/bank/testutil/expected_keepers_mocks.go
2020
$mockgen_cmd -source=x/group/testutil/expected_keepers.go -package testutil -destination x/group/testutil/expected_keepers_mocks.go
2121
$mockgen_cmd -source=x/evidence/types/expected_keepers.go -package testutil -destination x/evidence/testutil/expected_keepers_mocks.go

x/authz/keeper/keeper_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func (s *TestSuite) SetupTest() {
7272
// gomock initializations
7373
ctrl := gomock.NewController(s.T())
7474
s.bankKeeper = authztestutil.NewMockBankKeeper(ctrl)
75+
s.bankKeeper.EXPECT().Send(gomock.Any(), gomock.Any()).Return(&banktypes.MsgSendResponse{}, nil).AnyTimes()
7576
banktypes.RegisterInterfaces(s.encCfg.InterfaceRegistry)
7677
banktypes.RegisterMsgServer(s.baseApp.MsgServiceRouter(), s.bankKeeper)
7778

x/authz/testutil/bank_helpers.go

-29
This file was deleted.

x/authz/testutil/expected_keepers.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package testutil
2+
3+
import (
4+
"context"
5+
6+
banktypes "cosmossdk.io/x/bank/types"
7+
8+
sdk "github.com/cosmos/cosmos-sdk/types"
9+
)
10+
11+
// BankKeeper extends bank `MsgServer` to mock `Send` and to register handlers in MsgServiceRouter
12+
type BankKeeper interface {
13+
banktypes.MsgServer
14+
15+
SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins
16+
MintCoins(ctx context.Context, moduleName string, amt sdk.Coins) error
17+
SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
18+
GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins
19+
}

x/authz/testutil/expected_keepers_mocks.go

+115-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)