【问题标题】:Testing around GRPC stream Send function in Go在 Go 中测试 GRPC 流发送功能
【发布时间】:2022-10-24 08:18:24
【问题描述】:

我有一个 Go GRPC 服务器端流功能:

func (server *Server) GetClients(req *iam.GetClientsRequest, client iam.IAM_GetClientsServer) error {
    ctx := client.(interface{ Context() context.Context }).Context()

    userID, err := getUserIDStream(client)
    if err != nil {
        return err
    }

    clients, err := server.db.QueryByUserID(ctx, userID)
    if err != nil {
        return grpc.Errorf(codes.Internal, apiutils.ServerError)
    }

    for _, value := range clients {
        converted, err := server.fromInternalClient(value)
        if err != nil {
            return err
        }

        if err := client.Send(converted); err != nil {
            return err
        }
    }

    return nil
}

我正在像这样测试它:

It("GetClients - Send fails - Error", func() {

    handler := createHandler(db)
    lis := bufconn.Listen(bufSize)
    server := grpc.NewServer()

    iam.RegisterIAMServer(server, NewServer(handler))
    go func() {
        if err := server.Serve(lis); err != nil {
            log.Fatalf("Server exited with error: %v", err)
        }
    }()

    defer lis.Close()
    defer server.GracefulStop()

    conn, err := grpc.DialContext(context.Background(), "bufnet",
        grpc.WithContextDialer(createBufDialier(lis)), grpc.WithInsecure())
    Expect(err).ShouldNot(HaveOccurred())
    defer conn.Close()
    client := iam.NewIAMClient(conn)

    cclient, _ := client.GetClients(addAccessToken(context.Background()), new(iam.GetClientsRequest))
    resp, err := cclient.Recv()

    Expect(resp).Should(BeNil())
    Expect(err).Should(HaveOccurred())
    Expect(err.Error()).Should(Equal(message))
})

我的问题是我不确定如何在Send 上引发故障,因此我可以测试响应。由于我使用的是实际的测试服务器和客户端,因此我不能只模拟对象,而且我也不想走那条路。有没有办法我可以做到这一点?

【问题讨论】:

标签: go testing grpc-go


【解决方案1】:

最初,我试图通过将bufSize 设置为人为的低值来强制Send 失败。然而,这并没有产生错误,所以我决定尝试修改服务器上的maxSendMessageSize

opts := []grpc.ServerOption{}
if sendFails {
    opts = append(opts, grpc.MaxSendMsgSize(10))
}

lis := bufconn.Listen(bufSize)
server := grpc.NewServer(opts...)

这有助于产生错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2020-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2019-10-12
    相关资源
    最近更新 更多