§13.5
Chapter 13 · Implementation Guidance and Interoperability Testing

§13.5Practical Example: Test Plan for Production Readiness

RFC 9000RFC 9114RFC 9002

Learning objective. Assemble everything the book has covered into a single production-readiness test plan (six categories of gate that together decide whether a QUIC/HTTP-3 stack is ready to ship) and see how each category traces back to the chapters that grounded it.

From knowledge to a go/no-go decision #

The book has moved from the first handshake to migration, real-time media, observability, and interop. Shipping a stack (whether you wrote it or you operate someone else's) means turning all of that into a decision: is this ready for production traffic? The answer is a set of gates, one per category, and the stack ships only when every category passes. This final section is that checklist, and each gate points back to where the book built it.

all categories pass

any gap

conformance
handshake · ALPN · SETTINGS · QPACK · request/response

interoperability
ignore-unknown + GREASE · reject HTTP/2 code points · real browsers

robustness
negative tests · frame-layer fuzzing · bounded resources

security
cert + ALPN · 3× amplification · AEAD limits · 0-RTT replay

performance
golden signals · regression gates · emulated profiles

resilience + deployment
migration · NAT rebind · resumption · CID load balancing · TCP fallback

production-readiness gate

ship

fix + re-run

Fig. 13.5-1The production-readiness gate. Six categories — conformance, interoperability, robustness, security, performance, and resilience/deployment — each feed a go/no-go gate; the stack ships only when all pass, and any gap sends it back to fix and re-run. Each category is a checklist grounded in the book's chapters.RFC 9000 §12; RFC 9114 §4; RFC 9002 §5

The six categories #

1. Conformance: does it do the right thing on valid input? The baseline: a complete 1-RTT handshake with h3 ALPN (Chapter 2); SETTINGS as the first control-stream frame (§5.1); requests and responses with correct frame ordering (§5.3); QPACK encode/decode, including the dynamic table once enabled (Chapter 6); loss recovery and congestion control that match RFC 9002 (Chapter 3). The §5.5 HTTP/3-client lab is the seed of this gate.

2. Interoperability: does it talk to other stacks? Ignore unknown and reserved (GREASE) code points, reject the HTTP/2-inherited ones, and honour SETTINGS ordering and the QPACK default-zero rule (§13.2). The decisive test is not your own conformance suite but real peers: the community interop runner and real browsers, which grease aggressively. Two conformant-in-isolation stacks that fail here fail in the field.

3. Robustness: does it survive hostile input? Every MUST-error is a test case: malformed frames, limit violations, illegal state transitions, and resource-exhaustion attempts must each yield the specific error code with bounded memory and no crash (§13.3). A frame-layer fuzzer runs continuously; boundary conditions are covered explicitly.

4. Security: is it safe against a hostile peer? Certificate and ALPN authentication; the 3× anti-amplification limit and unforgeable, replay-resistant tokens; key updates before the AEAD confidentiality limit; 0-RTT confined to idempotent requests; and anti-abuse checks (optimistic ACK, constant-time reset comparison) (§13.4). These are invisible until exploited, so they need an explicit adversarial plan.

5. Performance: is it fast, and does it stay fast? The golden signals (queueing delay, goodput with its limiting ceiling, loss and PTO, TTFB; §11.2) tracked at p50 and p99, gated against a baseline under emulated network profiles (LAN, mobile, long-fat-network, lossy-satellite; §11.4). The §11.5 regression checklist is this gate, run across profiles.

6. Resilience and deployment: does it hold up in the real topology? Connection migration and NAT rebinding keep connections alive across network changes (Chapter 10); resumption and 0-RTT give cheap cold starts (§10.4); the load balancer routes by connection ID so migration and scaling coexist (§13.1); and the client falls back to HTTP/2 over TCP where UDP is blocked. The §10.5 migration lab verifies the core of this on the wire.

Wiring the plan to run itself #

A test plan that a human runs by hand rots. The chapters have supplied the machinery to automate all six:

  • Deterministic network emulation (§11.4), the in-process proxies, lets every category run in ordinary CI, no lab hardware, so conformance, performance, and resilience tests execute on every change.
  • qlog and key-log artifacts (§11.3) on every run turn a failing gate into a trace to debug, not just a red build.
  • The interop runner and real browsers cover the peers your own suite cannot simulate.

The result is a gate that runs continuously and produces evidence, so "is it ready?" has a reproducible answer rather than an opinion.

Worked example: a release goes through the gate #

A team prepares to enable HTTP/3 for a fraction of traffic. Conformance and interop are green: the stack handshakes, greases, and passes the interop runner. Robustness surfaces one crash on a truncated DATA Length, fixed with a bounds check (§13.3). Security flags that 0-RTT was executing a non-idempotent endpoint; it is restricted to safe methods (§13.4). Performance, run across the emulated profiles, shows goodput within baseline on all but the lossy-satellite profile, where a too-small flow-control window caps it, raised per §8.4. Resilience confirms a migration survives on the wire (§10.5) and that the load balancer keeps a migrated client on its backend (§13.1). With every category green, the team ships to 1% of traffic behind the HTTP/2 fallback, watches the golden signals, and ramps. The decision was not a leap of faith; it was the output of a gate.

Note

Ship incrementally even after the gate is green. The gate proves the stack is ready, not that your particular traffic and network paths hold no surprises: real users traverse middleboxes, carriers, and loss patterns no emulation fully captures (§11.4). So enable HTTP/3 for a small fraction first, keep the HTTP/2-over-TCP fallback for everyone, and watch the golden signals and the QUIC-connect-failure rate as you ramp. The gate and the gradual rollout are complementary: the gate catches what you can reproduce, and the ramp catches what you cannot.

In practice

editorial Encode the six categories as six CI stages, each a hard gate, and refuse to ship on any red. If you are adopting an existing stack rather than writing one, you still run categories 2, 4, 5, and 6 (interop against your peers, security against your threat model, performance on your network profiles, and resilience in your topology) because a library that is conformant in general can still be misconfigured for you (wrong windows, no fallback, a CID encoding your load balancer can't read). The single highest-leverage habit is to make every gate emit a qlog artifact: over a project's life, the traces you capture from failing gates become the regression corpus that keeps all six categories honest.

Takeaways #

Production readiness is a six-category gate — conformance, interoperability, robustness, security, performance, and resilience/deployment — each a checklist grounded in the book's chapters, and the stack ships only when all pass. Automate it with deterministic emulation and qlog artifacts so it runs in CI and produces evidence, test against real peers your own suite can't simulate, and ramp behind an HTTP/2 fallback even once the gate is green. That closes the book: from the combined QUIC+TLS handshake through streams, QPACK, transport tuning, high-latency and real-time behavior, MASQUE proxying, migration, observability, and now the test plan that ships it — the whole path from the first packet to production. The chapter quiz checks the model one last time.