This directory contains the integration for the QUIC Interop Runner.
# Build client image
docker build -t erlang-quic-client -f interop/Dockerfile.client .
# Build server image
docker build -t erlang-quic-server -f interop/Dockerfile.server .# Run server
docker run -p 443:443/udp \
-v $(pwd)/certs:/certs \
-v $(pwd)/www:/www \
-e TESTCASE=handshake \
erlang-quic-server
# Run client
docker run \
-e REQUESTS="https://host.docker.internal:443/test.txt" \
-e TESTCASE=handshake \
-e DOWNLOADS=/downloads \
-v $(pwd)/downloads:/downloads \
erlang-quic-clientAll core test cases pass:
| Test Case | Client | Server | Notes |
|---|---|---|---|
handshake |
✓ | ✓ | Basic QUIC handshake |
transfer |
✓ | ✓ | File download with flow control |
retry |
✓ | ✓ | Retry packet handling |
keyupdate |
✓ | ✓ | Key rotation during transfer |
chacha20 |
✓ | ✓ | ChaCha20-Poly1305 only |
multiconnect |
✓ | ✓ | Multiple connections |
v2 |
✓ | ✓ | QUIC v2 support |
resumption |
✓ | ✓ | Session resumption with PSK |
zerortt |
✓ | ✓ | 0-RTT early data |
connectionmigration |
✓ | ✓ | Active path migration |
To add erlang-quic to the official interop runner:
- Fork https://github.com/quic-interop/quic-interop-runner
- Add entry to
implementations.json:
{
"erlang-quic": {
"name": "erlang-quic",
"url": "https://github.com/benoitc/erlang_quic",
"image": "erlang-quic"
}
}- Push Docker images to a registry (e.g., Docker Hub, GitHub Container Registry)
- Submit PR to the interop runner repository
REQUESTS- Space-separated list of URLs to downloadTESTCASE- Test case nameDOWNLOADS- Directory for downloaded filesSSLKEYLOGFILE- Optional: Path for TLS key log
TESTCASE- Test case namePORT- Listen port (default: 443)CERTS- Certificate directory (expects cert.pem, priv.key)WWW- Directory to serve files fromSSLKEYLOGFILE- Optional: Path for TLS key log
0- Success1- Failure127- Test case not supported
Run the local compliance tests:
rebar3 ct --suite=quic_client_compliance_SUITERun interop tests against aioquic:
# Start aioquic server
docker compose -f docker/docker-compose.yml up -d
# Run tests
rebar3 ct --suite=quic_interop_SUITE