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

Function setupRSTStreamOnEOSTest

internal/transport/transport_test.go:3572–3707  ·  view source on GitHub ↗

setupRSTStreamOnEOSTest sets up a test scenario where a client and a manual server are connected. The server invokes the provided sendServerFrames function to send frames to the client (using the framer and the stream ID provided by the test). Callers should not read from the framer passed to this

(ctx context.Context, t *testing.T, sendServerFrames func(*testing.T, *http2.Framer, uint32))

Source from the content-addressed store, hash-verified

3570// Returns the client stream created for the test and a function that will wait
3571// for the server to be done processing the test scenario.
3572func setupRSTStreamOnEOSTest(ctx context.Context, t *testing.T, sendServerFrames func(*testing.T, *http2.Framer, uint32)) (*ClientStream, func()) {
3573 // Set up a listener for a manual server.
3574 lis, err := net.Listen("tcp", "localhost:0")
3575 if err != nil {
3576 t.Fatalf("Failed to listen: %v", err)
3577 }
3578 t.Cleanup(func() { lis.Close() })
3579
3580 // Set up a manual server.
3581 seenHeadersFrame := make(chan struct{})
3582 serverDone := make(chan struct{})
3583 go func() {
3584 defer close(serverDone)
3585 conn, err := lis.Accept()
3586 if err != nil {
3587 t.Errorf("Server failed to accept connection: %v", err)
3588 return
3589 }
3590 defer conn.Close()
3591
3592 // Read client preface.
3593 if _, err := io.ReadFull(conn, make([]byte, len(clientPreface))); err != nil {
3594 t.Errorf("Server failed to read client preface: %v", err)
3595 return
3596 }
3597
3598 // Read client's initial SETTINGS frame.
3599 framer := http2.NewFramer(conn, conn)
3600 frame, err := framer.ReadFrame()
3601 if err != nil {
3602 t.Errorf("Server failed to read client SETTINGS frame: %v", err)
3603 return
3604 }
3605 if _, ok := frame.(*http2.SettingsFrame); !ok {
3606 t.Errorf("Server read unexpected frame of type %T, want *http2.SettingsFrame", frame)
3607 return
3608 }
3609
3610 // Write server SETTINGS and ACK frame.
3611 if err := framer.WriteSettings(); err != nil {
3612 t.Errorf("Server failed to write SETTINGS frame: %v", err)
3613 return
3614 }
3615 if err := framer.WriteSettingsAck(); err != nil {
3616 t.Errorf("Server failed to write SETTINGS ACK frame: %v", err)
3617 return
3618 }
3619
3620 // Read client headers. Loop until we get a HEADERS frame, skipping
3621 // any SETTINGS ACK frames.
3622 var hframe *http2.HeadersFrame
3623 for {
3624 frame, err = framer.ReadFrame()
3625 if err != nil {
3626 t.Errorf("Server failed to read client headers: %v", err)
3627 return
3628 }
3629 if f, ok := frame.(*http2.HeadersFrame); ok {

Calls 11

DefaultBufferPoolFunction · 0.92
NewHTTP2ClientFunction · 0.85
FatalfMethod · 0.65
CloseMethod · 0.65
ErrorfMethod · 0.65
HeaderMethod · 0.65
StringMethod · 0.65
NewStreamMethod · 0.65
AcceptMethod · 0.45
DoneMethod · 0.45
AddrMethod · 0.45

Tested by

no test coverage detected