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))
| 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. |
| 3572 | func 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 { |
no test coverage detected