MCPcopy
hub / github.com/grpc/grpc-go / testClientResourceExhaustedCancelFullDuplex

Function testClientResourceExhaustedCancelFullDuplex

test/end2end_test.go:4858–4918  ·  view source on GitHub ↗
(t *testing.T, e env)

Source from the content-addressed store, hash-verified

4856}
4857
4858func testClientResourceExhaustedCancelFullDuplex(t *testing.T, e env) {
4859 te := newTest(t, e)
4860 recvErr := make(chan error, 1)
4861 ts := &funcServer{fullDuplexCall: func(stream testgrpc.TestService_FullDuplexCallServer) error {
4862 defer close(recvErr)
4863 _, err := stream.Recv()
4864 if err != nil {
4865 return status.Errorf(codes.Internal, "stream.Recv() got error: %v, want <nil>", err)
4866 }
4867 // create a payload that's larger than the default flow control window.
4868 payload, err := newPayload(testpb.PayloadType_COMPRESSABLE, 10)
4869 if err != nil {
4870 return err
4871 }
4872 resp := &testpb.StreamingOutputCallResponse{
4873 Payload: payload,
4874 }
4875 ce := make(chan error, 1)
4876 go func() {
4877 var err error
4878 for {
4879 if err = stream.Send(resp); err != nil {
4880 break
4881 }
4882 }
4883 ce <- err
4884 }()
4885 select {
4886 case err = <-ce:
4887 case <-time.After(10 * time.Second):
4888 err = errors.New("10s timeout reached")
4889 }
4890 recvErr <- err
4891 return err
4892 }}
4893 te.startServer(ts)
4894 defer te.tearDown()
4895 // set a low limit on receive message size to error with Resource Exhausted on
4896 // client side when server send a large message.
4897 te.maxClientReceiveMsgSize = newInt(10)
4898 cc := te.clientConn()
4899 tc := testgrpc.NewTestServiceClient(cc)
4900
4901 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
4902 defer cancel()
4903 stream, err := tc.FullDuplexCall(ctx)
4904 if err != nil {
4905 t.Fatalf("%v.FullDuplexCall(_) = _, %v, want <nil>", tc, err)
4906 }
4907 req := &testpb.StreamingOutputCallRequest{}
4908 if err := stream.Send(req); err != nil {
4909 t.Fatalf("%v.Send(%v) = %v, want <nil>", stream, req, err)
4910 }
4911 if _, err := stream.Recv(); status.Code(err) != codes.ResourceExhausted {
4912 t.Fatalf("%v.Recv() = _, %v, want _, error code: %s", stream, err, codes.ResourceExhausted)
4913 }
4914 err = <-recvErr
4915 if status.Code(err) != codes.Canceled {

Calls 12

FullDuplexCallMethod · 0.95
newPayloadFunction · 0.85
CodeMethod · 0.80
newTestFunction · 0.70
newIntFunction · 0.70
RecvMethod · 0.65
ErrorfMethod · 0.65
SendMethod · 0.65
FatalfMethod · 0.65
startServerMethod · 0.45
tearDownMethod · 0.45
clientConnMethod · 0.45

Tested by

no test coverage detected