(t *testing.T, e env)
| 4856 | } |
| 4857 | |
| 4858 | func 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 { |
no test coverage detected