caddy/caddytest/integration
tomholford dad86ff10b caddyhttp: add terminating WebTransport handler
Introduces http.handlers.webtransport, an EXPERIMENTAL handler that
terminates an incoming WebTransport session on top of Caddy's HTTP/3
server and echoes bytes on each bidirectional stream. Primary use case
is as a test upstream for the forthcoming WebTransport reverse-proxy
transport; it also serves as the minimal proof that the server-side
WebTransport wiring works end-to-end.

Plumbing changes:

  * caddyhttp.Server gains a *webtransport.Server field alongside
    h3server. It's built in buildWebTransportServer(), wrapping the
    existing http3.Server. Exposed via WebTransportServer() any on the
    Server, so the caddyhttp public API does not name the upstream
    webtransport-go type (per AGENTS.md).

  * serveHTTP3 now runs a custom accept loop (serveH3AcceptLoop) that
    dispatches each accepted QUIC connection to
    webtransport.Server.ServeQUICConn instead of
    http3.Server.ServeListener. The WebTransport server transparently
    forwards non-WT streams to the underlying http3 request handler
    (cost: one varint peek per stream), so behavior for non-WT clients
    is unchanged.

  * ListenQUIC enables EnableDatagrams and
    EnableStreamResetPartialDelivery on the QUIC listener config.
    These are capability bits negotiated during the QUIC handshake and
    are prerequisites for any WebTransport session; they do not force
    usage so non-WT H3 traffic is unaffected.

  * Stop path closes wtServer after h3server.Shutdown to clean up any
    remaining WebTransport session state.

The handler uses caddyhttp.UnwrapResponseWriterAs to reach the naked
http3.Settingser/HTTPStreamer writer through Caddy's wrapping chain
before calling webtransport.Server.Upgrade.

Includes unit tests for request-shape detection plus an integration
test (caddytest/integration/webtransport_test.go) that spins up a
Caddy HTTP/3 server with the handler, dials it with a real
webtransport.Dialer, and asserts end-to-end bidirectional-stream
echo.
2026-06-23 19:04:23 +09:00
..
caddyfile_adapt caddyhttp: add URL pattern request matcher (#7787) 2026-06-22 10:25:43 -06:00
testdata fix(caddyfile): {block} in snippet (#7558) 2026-04-15 02:58:53 -04:00
acme_test.go logging: Ensure slog error level logs don't print stack traces (#7512) 2026-03-03 14:44:42 -07:00
acmeserver_test.go chore: Add nolints to work around haywire linters (#7493) 2026-02-17 16:52:54 -07:00
autohttps_test.go caddyhttp: prefer port 443 in auto-HTTPS and add tests (#7666) 2026-04-23 17:29:03 +10:00
caddyfile_adapt_test.go httpcaddyfile: Validates TLS DNS challenge options (#7099) 2025-06-30 23:58:16 +00:00
caddyfile_test.go httpcaddyfile: Prevent error handler from overriding sub-handler matchers (#6999) 2025-06-06 11:46:39 -06:00
forwardauth_test.go Merge commit from fork 2026-05-29 11:37:17 -06:00
h2listener_test.go caddyhttp: wrap accepted connection to suppress tls.ConnectionState (#7247) 2025-10-16 03:13:40 +00:00
handler_test.go staticresp: Use the evaluated response body for sniffing JSON content-type (#6249) 2024-04-18 20:31:00 +00:00
intercept_test.go intercept: fix replace_status being silently dropped (#7810) 2026-06-12 15:50:58 -06:00
leafcertloaders_test.go ci: fix the integration test TestLeafCertLoaders (#6149) 2024-03-06 02:09:13 +03:00
listener_test.go use math/rand/v2 instead of math/rand (#7413) 2026-02-11 09:15:51 -07:00
map_test.go
mockdns_test.go httpcaddyfile: Add missing DNS challenge check for acme_dns (#7270) 2025-10-03 14:05:46 -06:00
pki_test.go admin: Fix tests locally, properly isolate storage (#7486) 2026-02-17 13:14:06 -07:00
proxyprotocol_test.go proxyproto: Generated test coverage (#7540) 2026-03-03 15:08:09 -07:00
reverseproxy_test.go reverseproxy: validate on weighted_round_robin loadbalancing policy (#7807) 2026-06-08 02:18:20 +10:00
sni_test.go filesystem: Globally declared filesystems, fs directive (#5833) 2024-01-13 20:12:43 +00:00
stream_test.go chore: clean up wording and typo fixes (#7745) 2026-05-20 16:36:30 +10:00
webtransport_test.go caddyhttp: add terminating WebTransport handler 2026-06-23 19:04:23 +09:00