Skip to content

Commit

Permalink
http2: add testClientConn for testing client RoundTrips
Browse files Browse the repository at this point in the history
Many RoundTrip tests involve testing against a test-defined
server with specific behaviors. For example: Testing
RoundTrip's behavior when the server violates flow
control limits.

Existing tests mostly use the clientTester type, which
starts separate goroutines for the Transport and a fake
server. This results in tests where the control flow
bounces around the test function, and requires each
test to manage its own synchronization.

Introduce a new framework for writing RoundTrip tests.
testClientConn allows client tests to be written linearly,
with synchronization provided by the test framework.
For example, a testClientConn test can, as a linear
sequence of actions:

  - start RoundTrip;
  - check the request headers sent;
  - provide data to the request body;
  - check that a DATA frame is sent;
  - send response headers from the server to the client;
  - check that RoundTrip returns.

See TestTestClientConn at the top of clientconn_test.go
for a full example.

To enable synchronization with tests, this CL
instruments the RoundTrip path to record when
goroutines start, exit, and block waiting for events.
This adds a certain amount of noise and bookkeeping
to the client implementation, but (in my opinion)
this is more than repaid in improved testability.

The testClientConn also permits use of synthetic
time in tests. At the moment, this is limited to
the response header timeout, but extending it to
other timeouts (read, 100-continue) should be
straightforward.

This CL converts a number of existing clientTester tests
to use the new framework, but not all.

Change-Id: Ief963889969363ec8469cd3c3de0becb2fc548f9
Reviewed-on: https://go-review.googlesource.com/c/net/+/563540
LUCI-TryBot-Result: Go LUCI <[email protected]>
Reviewed-by: Jonathan Amsterdam <[email protected]>
  • Loading branch information
neild committed Mar 11, 2024
1 parent 57a6a7a commit d600ae0
Show file tree
Hide file tree
Showing 4 changed files with 1,414 additions and 765 deletions.
Loading

0 comments on commit d600ae0

Please sign in to comment.