Add oghttp2 and nghttp2 adapter tests for receiving a GOAWAY with active streams.

This CL introduces adapter tests for the following scenario, inspired directly
by the Envoy test added in [1]:
  1. Client opens two streams, stream IDs 1 and 3.
  2. Server sends RST_STREAM for stream 1.
  3. Server sends GOAWAY with last_stream_id 1.
  4. Server sends WINDOW_UPDATE.
  5. Client should close stream 3.

When receiving a GOAWAY, both nghttp2 [2] and GFE2 [3] close the streams above
the last_stream_id of the GOAWAY. This is a feature gap that oghttp2 needs to
fill. The added tests also show that oghttp2 should avoid invoking the visitor
OnWindowUpdate() for a closed stream (though delivering the common header is
okay/consistent with (o|n)http2 behavior for other frames on closed streams).

[1] http://go/envoy-upstream/pull/20576/files#diff-671fe996ff6537911528a7f54c931b68b93aa199411740ff407b1116ac96a43b
[2] http://google3/third_party/nghttp2/src/lib/nghttp2_session.c;l=4750;rcl=433094660
[3] http://google3/gfe/gfe2/http2/http2_backend_dispatcher.cc;l=642-659;rcl=438051287

PiperOrigin-RevId: 439628963
2 files changed
tree: 847c7f833bc489446d07708755801a234399c6fc
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
README.md

QUICHE

QUICHE stands for QUIC, Http, Etc. It is Google‘s production-ready implementation of QUIC, HTTP/2, HTTP/3, and related protocols and tools. It powers Google’s servers, Chromium, Envoy, and other projects. It is actively developed and maintained.

There are two public QUICHE repositories. Either one may be used by embedders, as they are automatically kept in sync:

To embed QUICHE in your project, platform APIs need to be implemented and build files need to be created. Note that it is on the QUICHE team's roadmap to include default implementation for all platform APIs and to open-source build files. In the meanwhile, take a look at open source embedders like Chromium and Envoy to get started:

To contribute to QUICHE, follow instructions at CONTRIBUTING.md.

QUICHE is only supported on little-endian platforms.