github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/baseapp/grpcrouter_helpers.go (about)

     1  package baseapp
     2  
     3  import (
     4  	gocontext "context"
     5  	"fmt"
     6  
     7  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
     8  	gogogrpc "github.com/gogo/protobuf/grpc"
     9  	"google.golang.org/grpc"
    10  
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types"
    12  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    13  )
    14  
    15  // QueryServiceTestHelper provides a helper for making grpc query service
    16  // rpc calls in unit tests. It implements both the grpc Server and ClientConn
    17  // interfaces needed to register a query service server and create a query
    18  // service client.
    19  type QueryServiceTestHelper struct {
    20  	*GRPCQueryRouter
    21  	Ctx sdk.Context
    22  }
    23  
    24  var (
    25  	_ gogogrpc.Server     = &QueryServiceTestHelper{}
    26  	_ gogogrpc.ClientConn = &QueryServiceTestHelper{}
    27  )
    28  
    29  // NewQueryServerTestHelper creates a new QueryServiceTestHelper that wraps
    30  // the provided sdk.Context
    31  func NewQueryServerTestHelper(ctx sdk.Context, interfaceRegistry types.InterfaceRegistry) *QueryServiceTestHelper {
    32  	qrt := NewGRPCQueryRouter()
    33  	qrt.SetInterfaceRegistry(interfaceRegistry)
    34  	return &QueryServiceTestHelper{GRPCQueryRouter: qrt, Ctx: ctx}
    35  }
    36  
    37  // Invoke implements the grpc ClientConn.Invoke method
    38  func (q *QueryServiceTestHelper) Invoke(_ gocontext.Context, method string, args, reply interface{}, _ ...grpc.CallOption) error {
    39  	querier := q.Route(method)
    40  	if querier == nil {
    41  		return fmt.Errorf("handler not found for %s", method)
    42  	}
    43  	reqBz, err := protoCodec.Marshal(args)
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	res, err := querier(q.Ctx, abci.RequestQuery{Data: reqBz})
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	err = protoCodec.Unmarshal(res.Value, reply)
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	if q.interfaceRegistry != nil {
    59  		return types.UnpackInterfaces(reply, q.interfaceRegistry)
    60  	}
    61  
    62  	return nil
    63  }
    64  
    65  // NewStream implements the grpc ClientConn.NewStream method
    66  func (q *QueryServiceTestHelper) NewStream(gocontext.Context, *grpc.StreamDesc, string, ...grpc.CallOption) (grpc.ClientStream, error) {
    67  	return nil, fmt.Errorf("not supported")
    68  }