Skip to content

quic-interop/quic-interop-runner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

601 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interop Test Runner

The Interop Test Runner automatically generates interoperability matrices by running test cases across different implementations. It currently supports two protocols:

Registered implementations and their Docker images are listed in implementations_quic.json and implementations_webtransport.json.

Live results are published at interop.seemann.io.

Publications

Requirements

The Interop Runner is written in Python 3. You'll need:

  • Python 3 modules:
pip3 install -r requirements.txt

Running the Interop Runner

Run the QUIC interop tests:

python3 run.py

Run WebTransport interop tests:

python3 run.py -p webtransport

Use -s and -c to select specific server and client implementations, and -t to select specific test cases:

python3 run.py -s quic-go -c ngtcp2 -t handshake,transfer

Building an Endpoint

Each implementation is packaged as a Docker image. The test runner communicates with implementations entirely through environment variables and mounted directories.

The test case is passed using the TESTCASE environment variable. If your implementation doesn't support a test case, it MUST exit with status code 127. This allows new test cases to be added without breaking existing implementations.

See quic.md and webtransport.md for protocol-specific setup instructions and test case definitions.

To add your implementation, create a Docker image following the instructions for setting up an endpoint in the quic-network-simulator, publish it on Docker Hub and add it to implementations_quic.json or implementations_webtransport.json. Once your implementation is ready to interop, please send us a PR with this addition.

Multi-Platform Builds

The online interop runner requires linux/amd64 images. If you build on a different architecture (e.g. Apple silicon), use --platform linux/amd64 with docker build.

The recommended approach is a multi-platform build providing both amd64 and arm64 images:

docker buildx create --use
docker buildx build --pull --push --platform linux/amd64,linux/arm64 -t <name:tag> .

IPv6 Support

To enable IPv6 support for the simulator on Linux, the ip6table_filter kernel module needs to be loaded on the host:

sudo modprobe ip6table_filter

Logs

The Interop Runner saves log files to the logs directory (overwritten on each run).

Log files are organized as <server>_<client>/<testcase>/. Each directory contains:

  • output.txt — console output from the test runner (including failure reasons).
  • server/ and client/ — server and client log files.
  • sim/ — pcaps recorded by the simulator.

Implementations that export TLS secrets should use the NSS Key Log format. The SSLKEYLOGFILE environment variable points to a file in the logs directory.

Implementations that support qlog should export log files to the directory specified by the QLOGDIR environment variable.

About

QUIC interop runner

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors