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

Function testClientSendDataAfterCloseSend

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

Source from the content-addressed store, hash-verified

4799}
4800
4801func 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
4848func (s) TestClientResourceExhaustedCancelFullDuplex(t *testing.T) {
4849 for _, e := range listTestEnv() {

Callers 1

Calls 13

CodeMethod · 0.80
withServerTesterMethod · 0.80
writeHeadersGRPCMethod · 0.80
wantAnyFrameMethod · 0.80
wantRSTStreamMethod · 0.80
newTestFunction · 0.70
RecvMethod · 0.65
ErrorfMethod · 0.65
SendMsgMethod · 0.65
ErrorMethod · 0.65
startServerMethod · 0.45
tearDownMethod · 0.45

Tested by

no test coverage detected