quic: framework for testing blocking operations

For some tests, we want to start a blocking operation
and then subsequently control the progress of that
operation.

For example, we might write to a stream, and then
feed the connection MAX_STREAM_DATA frames to permit
it to gradually send the written data.

This is difficult to coordinate: We can start the
write in a goroutine, but we have no way to synchronize
with it.

Add support for testing this sort of operation,
instrumenting locations where operations can block
and tracking when operations are in progress and when
they are blocked.

This is all rather terribly complicated, but it mostly
puts the complexity in one place rather than in every test.

For golang/go#58547

Change-Id: I09d8f0e359f3c9fd0d444bc0320e9d53391d4877
Reviewed-on: https://go-review.googlesource.com/c/net/+/515340
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Olif Oftimis <oftimisolif@gmail.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
6 files changed
tree: 856608a453608b9f78c0ee29a1a58a7249aef681
  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. route/
  19. trace/
  20. webdav/
  21. websocket/
  22. xsrftoken/
  23. .gitattributes
  24. .gitignore
  25. codereview.cfg
  26. CONTRIBUTING.md
  27. go.mod
  28. go.sum
  29. LICENSE
  30. PATENTS
  31. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking libraries.

Download/Install

The easiest way to install is to run go get -u golang.org/x/net. You can also manually git clone the repository to $GOPATH/src/golang.org/x/net.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html. The main issue tracker for the net repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.