Commit Graph

649 Commits

Author SHA1 Message Date
Marten Seemann
32c9c81962 improve stream limit 0-RTT integration test (#4761) 2024-12-18 14:34:48 +08:00
Marten Seemann
0192a17a3d fix flaky multiplex integration test (#4760) 2024-12-18 14:07:03 +08:00
Marten Seemann
9083be4322 fix connection ID length integration test (#4757) 2024-12-18 12:25:09 +08:00
Marten Seemann
3886be4e95 introduce a test helper function to create a UDP socket on localhost (#4756) 2024-12-17 23:30:00 +08:00
Marten Seemann
8cb88ee145 fix timeout integration tests on Windows (#4758)
The Go timer resolution on Windows leaves a lot to be desired. By
bumping the timeout duration the test will take longer, but at least it
won't be flaky.
2024-12-17 21:22:42 +08:00
Marten Seemann
691086db7f migrate integration tests away from Ginkgo (#4736)
* use require in benchmark tests

* translate the QLOGDIR test

* translate handshake tests

* translate the handshake RTT tests

* translate the early data test

* translate the MTU tests

* translate the key update test

* translate the stateless reset tests

* translate the packetization test

* translate the close test

* translate the resumption test

* translate the tracer test

* translate the connection ID length test

* translate the RTT tests

* translate the multiplexing tests

* translate the drop tests

* translate the handshake drop tests

* translate the 0-RTT tests

* translate the hotswap test

* translate the stream test

* translate the unidirectional stream test

* translate the timeout tests

* translate the MITM test

* rewrite the datagram tests

* translate the cancellation tests

* translate the deadline tests

* translate the test helpers
2024-12-16 23:43:59 +08:00
Marten Seemann
2dca400b5c migrate HTTP/3 integration tests away from Ginkgo (#4746) 2024-12-05 14:58:29 +08:00
Marten Seemann
71a27d40c9 wait until handshaking connections have terminated when closing server (#4743) 2024-12-03 11:10:13 +08:00
Marten Seemann
a302d7ba4d enable DPLPMTUD on macOS dual-stack sockets (#4723)
* enable DPLPMTUD on macOS dual-stack sockets

https://datatracker.ietf.org/doc/draft-seemann-tsvwg-udp-fragmentation/
contains details on how IP fragmentation is handled on different
platforms.

* only enable DF on macOS Sequoia (and newer) dual-stack sockets

* fix macOS version numbers

* fix comment in MTU integration test

* skip dual-stack test on old macOS versions
2024-12-01 14:50:49 +08:00
Marten Seemann
a7795541c9 logging: use code generation to generate the multiplexed tracers (#4677)
* logging: use code generation to generate the multiplexed tracers

* logging: ignore auto-generated files for code coverage

* logging: move code generation comment to generator script
2024-11-28 23:57:11 +08:00
Marten Seemann
6af2b1a478 http3: rename Server.CloseGracefully to Shutdown (#4701)
This is more consistent with standard library naming for graceful
shutdown methods for HTTP/1 and HTTP/2.
2024-10-15 02:14:47 -07:00
Marten Seemann
1db805ce4f http3: improve the client API (#4693)
* http3: rename RoundTripper to Transport

* http3: rename SingleDestinationRoundTripper to ClientConn

* http3: construct the ClientConn via Transport.NewClientConn
2024-10-13 22:17:50 -07:00
Marten Seemann
eaa879f32f http3: send GOAWAY when server is shutting down (#4691)
* send goaway when server is shutting down

* http3: track next stream ID instead of last stream ID for GOAWAYs

* refactor the graceful shutdown integration tests

* http3: improve GOAWAY frame parsing tests

* http3: simplify server graceful shutdown logic

* http3: simplify parsing of GOAWAY frames

* http3: clean up initialization of server contexts

* http3: fix race condition in graceful shutdown logic

---------

Co-authored-by: WeidiDeng <weidi_deng@icloud.com>
2024-10-11 21:47:17 -07:00
Marten Seemann
e5693d0ad7 http3: immediately close all connections on Server.Close (#4689)
* http3: immediately close all connections on Server.Close

* http3: document connection closing when using ServeQUICConn
2024-10-09 13:24:13 -07:00
Marten Seemann
aef34d59a9 proxy: migrate tests away from Ginkgo (#4680) 2024-09-21 05:15:13 -07:00
Marten Seemann
72c6180ce5 versionnegotiation: migrate tests away from Ginkgo (#4676)
* fix race condition in version negotiation tests

* versionnegotiation: migrate tests away from Ginkgo
2024-09-14 00:03:12 -07:00
Kevin McDonald
b92bf0c80d http3: initialize trailer map with empty trailer entries when parsing the header (#4656)
* feat: pre-populate trailers on response with empty values

* fix: improve comment/func name
2024-09-06 23:59:07 -07:00
Marten Seemann
4f48b2ce25 update qpack to v0.5.1 (#4664)
This release now doesn't reject N=1 values in Literal Field Line with
Name Reference.
2024-09-06 22:08:47 -07:00
Kevin McDonald
09c2ac8aab http3: add HTTP Trailer support for servers (#4630) 2024-09-06 21:51:54 -07:00
Marten Seemann
26a3525337 http3: reject connection-specific header fields, check value of TE (#4655) 2024-09-01 02:20:35 -07:00
Marten Seemann
1a25053e5e update qpack to v0.5.0 (#4653)
No features were added in v0.5.0, nor were any bugs fixed.
No functional change expected.
2024-08-31 19:58:51 -07:00
Marten Seemann
7c3544ca34 http3: set ContentLength to -1 if no Content-Length header is set (#4645)
This applies to both the http.Response and the http.Request.
2024-08-30 05:28:06 -07:00
Marten Seemann
d067fe4156 bump Go version in go.mod, stop testing on Go 1.21 (#4633)
* bump Go version in go.mod, stop testing on Go 1.21

* ci: update golangci-lint to v1.60.1

* ignore Go 1.23 0-RTT events in exhaustive linter
2024-08-17 00:30:03 -07:00
Olivier Poitrey
7c471aac74 http3: implement server idle timeout support (#4587)
* http3: implement server idle timeout support

This update introduces the ability for an HTTP/3 server to enforce an idle
timeout on connections. This timeout will trigger when no new requests are
received on a connection, irrespective of any PING frames received at the
QUIC level.

* fix deadlock when http3 idle timeout is not enabled

* fix typo

* Switch to a more efficient implementation

* Avoid a goroutine
* Avoid constent re-adjusting of a timer
* Works with hijacked streams

* Generalize the idle timeout description

* Add an integration test for http server idle timeout

* Attempt to fix other tests impacted by the new idle timeout test
2024-08-04 15:53:33 -07:00
Marten Seemann
d1f9af4cc6 implement qlog JSONSEQ format, bump qlog version (#4609) 2024-08-03 20:19:51 -07:00
Marten Seemann
f96923b5b2 logging: rename VersionNumber to Version (#4621) 2024-08-03 19:32:11 -07:00
Marten Seemann
f5ceb73171 handshake: generate CRYPTO_ERRORs for internal_error TLS alerts (#4601)
* handshake: generate CRYPTO_ERRORs for internal_error TLS alerts

* remove stray comment
2024-08-03 17:04:03 -07:00
Marten Seemann
8451b0afd7 utils: remove scarcely used time helper functions (#4593) 2024-07-23 14:16:12 -07:00
Marten Seemann
5f8d146836 wire: optimize parsing of long header packets (#4589) 2024-07-21 14:22:32 -07:00
Marten Seemann
2a082f973a http3: allow re-dialing of connection after a dial error (#4573)
* http3: do not cache dial error

* add an integration test

* http3: add a unit test for dial failures

---------

Co-authored-by: 世界 <i@sekai.icu>
2024-06-22 21:38:49 -07:00
Marten Seemann
b19f2f9e3a metrics: use the default metrics tracer in integration tests (#4562) 2024-06-10 14:58:47 +08:00
Marten Seemann
cc9a5ee744 qlog: rename DefaultTracer to DefaultConnectionTracer (#4556) 2024-06-05 03:50:01 -07:00
Marten Seemann
44e0147f2e pass a context to Transport.ConnContext (#4536)
* pass a context to Transport.ConnContext

This context is cancelled when the QUIC connection is closed, or when
the QUIC handshake fails. This allows the application to easily build
and garbage collect a map of active connections.

* correctly handle fresh contexts returned from ConnContext
2024-06-04 21:37:18 -07:00
Marten Seemann
07acaad2f7 add context to EarlyConnection.NextConnection, handle handshake failures (#4551) 2024-06-04 20:51:54 -07:00
Marten Seemann
0db354456a make Path MTU Discovery resilient to random packet loss (#4545) 2024-06-04 02:10:11 -07:00
Marten Seemann
e66a925d64 metrics: add a basic setup, collect metrics for the server 2024-06-04 13:19:29 +08:00
Marten Seemann
459a6f3df9 fix the server's 0-RTT rejection logic when using GetConfigForClient (#4550) 2024-06-03 03:42:58 -07:00
Marten Seemann
5446b5f912 http3: use the connection, not the stream context, on the server side (#4510) 2024-06-03 10:23:35 +08:00
Marten Seemann
0d1e27d77c introduce Transport.ConnContext, use client's context on the connection (#4507)
* introduce Transport.ConnContext, use client's context on the connection

* panic if ConnContext returns nil
2024-05-26 21:30:19 -07:00
Marten Seemann
e41d1f9dd7 logging / qlog: add support for DPLPMTUD (#4517)
* logging / qlog: add support for DPLPMTUD

* improve the MTU discovery integration test
2024-05-14 02:37:54 -07:00
Marten Seemann
056a332ac4 retry the PMTUD integration test up to 3 times (#4519)
This test is very sensitive to packet loss, as the loss of a single Path MTU
probe packet makes DPLPMTUD clip the assumed MTU at that value.
2024-05-14 02:14:02 -07:00
Marten Seemann
508b402a19 update all golang.org/x dependencies (#4506) 2024-05-10 20:02:07 -07:00
Marten Seemann
f3d76b39bf make the initial packet size configurable (#4503) 2024-05-08 21:41:08 -07:00
Marten Seemann
e90a0d4e03 increase initial packet size to 1280 bytes (for both IPv4 and IPv6) (#4500) 2024-05-08 20:55:19 -07:00
Marten Seemann
66f968b9ff reject sending of DATAGRAM frames that exceed the current MTU (#4497)
* reject sending of datagrams that exceed the current MTU

* check datagram size in PMTUD integration test
2024-05-07 00:06:00 -07:00
Marten Seemann
f1b473d925 add an integration test for DPLPMTUD (#4498)
* add an integration test for DPLPMTUD

* use a v4-only socket in DPLPMTUD test

* increase DPLPMTUD test timeout
2024-05-06 22:15:20 -07:00
Marten Seemann
4f4da0423f ci: disable exhaustive linter for test files (#4499) 2024-05-06 21:36:22 -07:00
Marten Seemann
83eeb9cc66 fix incorrect reuse of UDP connection in handshake benchmark (#4491) 2024-05-05 06:17:08 -07:00
Marten Seemann
bb6f066aa5 http3: use the stream context to detect when the send side is closed (#4489) 2024-05-04 19:15:35 -07:00
Marten Seemann
c7b58b568f http3: refuse to send datagrams associated with a closed stream (#4488)
It's only valid to send datagrams associated with a stream whose send
direction is not closed.
2024-05-04 17:48:07 -07:00