http2: fix a few issues revealed by the net/http unified pool

TestAPITransportCoalescedDial attempts to be agnostic on the
legacy behavior (in which a connection is needlessly discarded)
and the desired behavior (in which it is used). Add a missing
read of the client preface in the case where we use the conn.

TestAPITransportIdleConnTimeout exercises the IdleConnTimeout
field, but uses an http.ClientConn. It doesn't make sense for
ClientConn to apply idle timeouts (that's the responsibility
of the pool using the conn). Change the test to use an
http.Transport instead.

The existing net/http HTTP/2 ClientConn has a bug in reporting
in-flight requests, where it does not report requests waiting
for a concurrency slot as active. Fixing this bug breaks an
x/net/http2 test, but the real issue is that the
http2.ClientConnState includes information that
http.ClientConn does not provide. Add a way for net/http to
provide that information to x/net/http2.
The net/http change which fixes the in-flight request reporting
will include the other half of this change, keeping x/net
tests passing before and after.

Fixes golang/go#83005

Change-Id: I599c4f4381c4f029c2e0138e2016e53f6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/860083
Reviewed-by: Nicholas Husin <nsh@golang.org>
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2 files changed
tree: 18514d608426e53871df255950dabbbd2f691611
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. icmp/
  9. idna/
  10. internal/
  11. ipv4/
  12. ipv6/
  13. lif/
  14. nettest/
  15. netutil/
  16. proxy/
  17. publicsuffix/
  18. quic/
  19. route/
  20. trace/
  21. webdav/
  22. websocket/
  23. xsrftoken/
  24. .gitattributes
  25. .gitignore
  26. codereview.cfg
  27. CONTRIBUTING.md
  28. go.mod
  29. go.sum
  30. LICENSE
  31. PATENTS
  32. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.