Add testing for connection window flow control violations.

This CL adds oghttp2 and nghttp2 tests for the following scenario:
  1. Server sends SETTINGS with a MAX_FRAME_SIZE value greater than the initial
     connection flow control window.
  2. Client sends a request with a DATA frame payload of the MAX_FRAME_SIZE.

The server should recognize that the client-sent DATA frame induces a
connection-level flow control error, and should send a GOAWAY.

[NGHTTP2]
Indeed, nghttp2 recognizes this error correctly when the DATA frame is
processed all at once. However, nghttp2 does not recognize this error when the
DATA frame is processed in multiple ProcessBytes() calls.

[OGHTTP2]
It is likely that oghttp2 would recognize the flow control error [*], but
oghttp2 does not handle outbound MAX_FRAME_SIZE. Thus, oghttp2 currently
GOAWAYs prematurely before exercising flow control validation. Addressing the
MAX_FRAME_SIZE feature gap will be the work of b/223471995.

This testing was inspired by attempts to enable GFE2 HTTP/2 flow control e2e
testing for GFE3 (WIP with pending cl/433228245).

[*] http://google3/third_party/http2/adapter/oghttp2_session.cc;l=1042-1049;rcl=432298189

PiperOrigin-RevId: 433539997
2 files changed
tree: f71fc795845b031fdd6e104837e96052b72e3801
  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/2, 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.