(t *testing.T, e env)
| 4799 | } |
| 4800 | |
| 4801 | func testClientSendDataAfterCloseSend(t *testing.T, e env) { |
| 4802 | // To ensure RST_STREAM is sent for illegal data write prior to execution of RPC |
| 4803 | // handler. |
| 4804 | frameCheckingDone := make(chan struct{}) |
| 4805 | // To ensure goroutine for test does not end before RPC handler performs error |
| 4806 | // checking. |
| 4807 | handlerDone := make(chan struct{}) |
| 4808 | te := newTest(t, e) |
| 4809 | ts := &funcServer{streamingInputCall: func(stream testgrpc.TestService_StreamingInputCallServer) error { |
| 4810 | defer close(handlerDone) |
| 4811 | // Block on serverTester receiving RST_STREAM. This ensures server has closed |
| 4812 | // stream before stream.Recv(). |
| 4813 | <-frameCheckingDone |
| 4814 | for { |
| 4815 | _, err := stream.Recv() |
| 4816 | if err == io.EOF { |
| 4817 | break |
| 4818 | } |
| 4819 | if err != nil { |
| 4820 | if status.Code(err) != codes.Canceled { |
| 4821 | t.Errorf("expected canceled error, instead received '%v'", err) |
| 4822 | } |
| 4823 | break |
| 4824 | } |
| 4825 | } |
| 4826 | if err := stream.SendMsg(nil); err == nil { |
| 4827 | t.Error("expected error sending message on stream after stream closed due to illegal data") |
| 4828 | } else if status.Code(err) != codes.Canceled { |
| 4829 | t.Errorf("expected cancel error, instead received '%v'", err) |
| 4830 | } |
| 4831 | return nil |
| 4832 | }} |
| 4833 | te.startServer(ts) |
| 4834 | defer te.tearDown() |
| 4835 | te.withServerTester(func(st *serverTester) { |
| 4836 | st.writeHeadersGRPC(1, "/grpc.testing.TestService/StreamingInputCall", false) |
| 4837 | // Send data with END_STREAM flag, but then write more data. |
| 4838 | st.writeData(1, true, []byte{0, 0, 0, 0, 0}) |
| 4839 | st.writeData(1, false, []byte{0, 0, 0, 0, 0}) |
| 4840 | st.wantAnyFrame() |
| 4841 | st.wantAnyFrame() |
| 4842 | st.wantRSTStream(http2.ErrCodeStreamClosed) |
| 4843 | close(frameCheckingDone) |
| 4844 | <-handlerDone |
| 4845 | }) |
| 4846 | } |
| 4847 | |
| 4848 | func (s) TestClientResourceExhaustedCancelFullDuplex(t *testing.T) { |
| 4849 | for _, e := range listTestEnv() { |
no test coverage detected