- relay, a kind of its own, with the suite moqt in the live area: the new corpus moqt-conformance/cases.json lists the eight interop test cases and wai-receipts, each with the drafts it is a test at, so a record names its corpus by digest. joule-moq-interop runs each case against the relay's moqt:// or https:// URL at --draft 22, 18 or 16, and its TAP version 14 is read as the cases: ok passes; not ok, TODO, no point, exit 127 or a timeout fails; a skip passes only at a draft the case lists no test for. The client is found as wai dev finds its daemons (WAI_MOQ_INTEROP_BIN, beside wai, PATH). The record's adapter is command, its impl the client's command line with the URL and draft, its files the client. - joule-moq-interop closes every session's endpoint and waits it idle after each test: run a test a process, it exited before the CONNECTION_CLOSE left, the relay kept the dead publisher's namespace, and subscribe-before-announce and announce-subscribe failed against wai-relay at every draft. Now every case passes at 22, 18 and 16 over QUIC and at 22 over WebTransport. - verifier pq: pq-conformance case by case, each case given as the corpus with it alone; its independent verifier pq_verify.py now has its verdicts file in its # independent: line. - wai conformance gen --suite <corpus>[,...] [--verify] [--bin-dir <dir>] (conformance.generate, maintainer toolset): build.rs reads .github/wai-conformance/corpora/*.txt into the table of generators, and a corpus file whose dir: names no corpus, or whose bin: is no [[bin]] of wai-rs, fails the build. The files gain gen: where a tool's generator is not its gen mode (pin, staged-measure; oer: none). One cargo build serves every tool a run names. - wai-breaking.yml runs the new tests with pq_signatures, pq_verify.py through wai conform beside the claim, JWP and signer verifiers, and the reference relay at each draft, every record admitted. Co-Authored-By: Claude Opus 5.5 <[email protected]>
3.5 KiB
moqt-conformance — a relay held to the MOQT interop cases
The corpus of wai conform relay --suite moqt: the cases a MOQT relay is held to, each a test
the interop client joule-moq-interop runs against the relay at one draft of the transport (22,
18 or 16). cases.json lists them, each named as the client names it, with what the relay must
do for the case to pass and the drafts at which it is a test. A record of a run names the corpus
by the digest of cases.json (extensions/conformance-results.md §2.1).
| case | the relay passes when |
|---|---|
setup-only |
it completes the session's setup at the draft within 2 s |
announce-only |
it accepts a PUBLISH_NAMESPACE within 2 s |
publish-namespace-done |
after a published namespace is withdrawn, the session still answers a SUBSCRIBE within 2 s |
subscribe-namespace-lifecycle |
a subscriber to a prefix is told of a namespace published under it and of its withdrawal, each within 2 s |
subscribe-error |
a SUBSCRIBE to a track no one publishes is refused with REQUEST_ERROR within 2 s |
rendezvous-timeout |
a SUBSCRIBE with a RENDEZVOUS_TIMEOUT of 500 ms to a track no one publishes is refused with REQUEST_ERROR TIMEOUT within 2 s (drafts 22 and 18; draft 16 has no such parameter) |
announce-subscribe |
a SUBSCRIBE to a track of a published namespace reaches its publisher, and the subscriber receives its SUBSCRIBE_OK within 3 s |
subscribe-before-announce |
a SUBSCRIBE sent before its namespace is published is answered within 3.5 s |
wai-receipts |
a publisher's WAI track, its receipts track and its catalog reach a subscriber, every object verified against the publisher's signed receipts: the group receipt's signature, the object's inclusion, the object receipt carried as a property and on the receipts track, the WAI_RECEIPT property, the chain's links and the envelope |
The first eight are the MOQT interop runner's test cases, written against
draft-ietf-moq-transport-18; wai-receipts is WAI's.
Running
wai conform relay --suite moqt --impl moqt://127.0.0.1:4443/moq --tls-disable-verify
wai conform relay --suite moqt --impl https://relay.example/moq --draft 22
--impl is the relay's URL: moqt:// reaches it over QUIC with the draft's ALPN, https://
over WebTransport. --draft is the draft the client speaks (18 unless given), and the record
names it in the client's command line. --tls-disable-verify is for a relay whose certificate
is its own (wai-relay --dev). Each case is one run of the client,
joule-moq-interop --relay <url> --draft <n> --test <case>, and its TAP (version 14) is the
case's outcome: the case passes when its test point is ok. A point the client skips passes
only at a draft the case lists no test for (the client skips rendezvous-timeout at draft 16);
not ok, a TODO, no point of the case's name, a client that does not run the test or a run
past --timeout (60 s a case) fails it. The record is conformant when every case passed.
The client is found as wai dev finds its daemons: WAI_MOQ_INTEROP_BIN, else beside wai,
else on PATH. It builds from joule-code/joule-code-rs:
cargo build --release -p joule-moq-interop
The reference relay, wai-relay --dev (crate joule-moq-relay), passes every case at each
draft.
Provenance. Written here, by hand, from the client's test cases (joule-moq-interop,
src/main.rs), whose names and order wai-rs's tests hold cases.json to. No test vector:
each case is run live against the relay.