moq-test-client
A standardized MoQT (Media over QUIC Transport) interoperability test client.
Overview
This tool enables automated interoperability testing between MoQT implementations. It can run test scenarios against any MoQT relay to verify interoperability with moq-rs-based clients.
Key Features:
- Test scenarios for basic MoQT operations
- Human-readable output with timing information
- Machine-parseable result format (
MOQT_TEST_RESULT: SUCCESS/FAILURE) - Designed to be implementation-agnostic (interface can be reproduced by other implementations)
Usage
# List available test cases
# Run all tests against a relay with proper TLS
# Run a specific test
# Verbose output
TLS Certificate Verification
By default, TLS certificate verification is enabled (secure). For local development with self-signed certificates, you can disable verification:
# Local development only - use --tls-disable-verify for self-signed certs
Note: Never disable TLS verification in production environments.
Test Cases
| Test | Description |
|---|---|
setup-only |
Connect, complete SETUP exchange, close gracefully |
announce-only |
Connect, announce namespace, receive OK, close |
subscribe-error |
Subscribe to non-existent track, expect error |
announce-subscribe |
Publisher announces, subscriber subscribes, verify handshake |
subscribe-before-announce |
Subscriber subscribes before publisher announces |
publish-namespace-done |
Announce namespace, send PUBLISH_NAMESPACE_DONE |
Running with moq-relay
# Terminal 1: Start the relay
# Terminal 2: Run tests (with --tls-disable-verify for self-signed dev certs)
Exit Codes
| Code | Meaning |
|---|---|
| 0 | All tests passed |
| 1 | One or more tests failed |
Output Format
The tool outputs human-readable results during execution and ends with a machine-parseable line:
MoQT Interop Test Client
========================
Relay: https://localhost:4443
✓ setup-only (42 ms)
✓ announce-only (38 ms)
✓ subscribe-error (51 ms)
✓ announce-subscribe (127 ms)
✓ subscribe-before-announce (89 ms)
✓ publish-namespace-done (45 ms)
Results: 6 passed, 0 failed
MOQT_TEST_RESULT: SUCCESS
Environment Variable Interface
For Docker/containerized testing, the following environment variables are supported:
| Variable | Description |
|---|---|
RELAY_URL |
URL of relay (https:// for WebTransport, moqt:// for raw QUIC) |
TESTCASE |
Test case identifier (optional, runs all if not set) |
TLS_DISABLE_VERIFY |
Set to 1 to skip TLS certificate verification |
Multi-Implementation Testing
This tool implements the test client interface defined by moq-interop-runner, a framework for testing interoperability between MoQT implementations.
For Docker-based testing against multiple relays (moxygen, libquicr, moqtransport, etc.), see the moq-interop-runner repository.
Test Case Specifications
The test cases implemented here correspond to the specifications in moq-interop-runner/docs/tests/TEST-CASES.md:
| Test Case | Protocol References |
|---|---|
setup-only |
MoQT §3.3, §9.3 |
announce-only |
MoQT §6.2, §9.23-9.24 |
publish-namespace-done |
MoQT §6.2, §9.26 |
subscribe-error |
MoQT §5.1, §9.7, §9.9 |
announce-subscribe |
MoQT §5.1, §6.2, §9.7-9.8, §9.23-9.24 |
subscribe-before-announce |
MoQT §5.1, §6.2 |
Protocol references are to draft-ietf-moq-transport-14.
Design Goals
- Interoperability: Test that implementation A works with implementation B
- Reproducibility: Same test, same inputs = same results
- Specifiability: Interface documented precisely enough for independent implementation
- Incrementality: Start simple, evolve to full automation
Contributing
Contributions welcome! See moq-rs for the main project.