-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit d600ae0
committed
http2: add testClientConn for testing client RoundTrips
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]>1 parent 57a6a7a commit d600ae0Copy full SHA for d600ae0
File tree
Expand file treeCollapse file tree
4 files changed
+1414
-765
lines changedFilter options
- http2
Expand file treeCollapse file tree
4 files changed
+1414
-765
lines changed
0 commit comments