From ae234388a630663a7c26e3583d6e5a61fabb9d3c Mon Sep 17 00:00:00 2001 From: Yu You Date: Tue, 14 Apr 2026 12:58:43 +0300 Subject: [PATCH 1/4] added Nokia impl --- Makefile | 5 +++++ builds/moq-rs/Dockerfile.client | 2 ++ implementations.json | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/Makefile b/Makefile index 6d07f18e..acb84e4f 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,9 @@ CLIENT_IMAGE ?= moq-test-client:latest # For test-external (direct URL, not docker-compose) RELAY_URL ?= https://relay:4443 TLS_DISABLE_VERIFY ?= false +# Optional extra args for `docker run` in test-external. +# Example: EXTRA_DOCKER_RUN_ARGS="--add-host local.nokiaresearch.com:host-gateway" +EXTRA_DOCKER_RUN_ARGS ?= ############################################################################# # Certificate Generation (following QUIC interop runner conventions) @@ -88,7 +91,9 @@ test-single: test-external: @echo "Running tests against $(RELAY_URL)..." @echo " Client: $(CLIENT_IMAGE)" + @if [ -n "$(EXTRA_DOCKER_RUN_ARGS)" ]; then echo " Extra docker args: $(EXTRA_DOCKER_RUN_ARGS)"; fi docker run --rm \ + $(EXTRA_DOCKER_RUN_ARGS) \ --network host \ -e RELAY_URL=$(RELAY_URL) \ -e TLS_DISABLE_VERIFY=$(TLS_DISABLE_VERIFY) \ diff --git a/builds/moq-rs/Dockerfile.client b/builds/moq-rs/Dockerfile.client index 72018859..7d8c13eb 100644 --- a/builds/moq-rs/Dockerfile.client +++ b/builds/moq-rs/Dockerfile.client @@ -46,6 +46,8 @@ FROM debian:bookworm-slim AS runtime RUN apt-get update && apt-get install -y \ ca-certificates \ + iputils-ping \ + iproute2 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/implementations.json b/implementations.json index ffe93e75..5a818c54 100644 --- a/implementations.json +++ b/implementations.json @@ -307,6 +307,39 @@ } } } + }, + "streamforge": { + "name": "streamforge", + "organization": "Nokia", + "repository": "", + "draft_versions": ["draft-16"], + "notes": "QUIC-Go and Wentransport-GO implementation.", + "roles": { + "relay": { + "docker": { + "image": "streamforge:latest", + "notes": "Pre-built from Nokia streamforge repo." + }, + "remote": [ + { + "url": "moqt://local.nokiaresearch.com:8443/moq", + "transport": "quic", + "notes": "Raw QUIC endpoint" + }, + { + "url": "https://local.nokiaresearch.com:8080/moq", + "transport": "webtransport", + "notes": "WebTransport endpoint" + } + ] + }, + "client": { + "docker": { + "image": "streamforge-client:latest", + "notes": "External pre-built image" + } + } + } } }, From 627733dabb9a15c8c1ba71912094e948e32b90c6 Mon Sep 17 00:00:00 2001 From: Yu You Date: Wed, 15 Apr 2026 14:04:34 +0300 Subject: [PATCH 2/4] fixed the url --- implementations.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/implementations.json b/implementations.json index 5a818c54..53383260 100644 --- a/implementations.json +++ b/implementations.json @@ -312,7 +312,7 @@ "name": "streamforge", "organization": "Nokia", "repository": "", - "draft_versions": ["draft-16"], + "draft_versions": ["draft-17"], "notes": "QUIC-Go and Wentransport-GO implementation.", "roles": { "relay": { @@ -320,18 +320,18 @@ "image": "streamforge:latest", "notes": "Pre-built from Nokia streamforge repo." }, - "remote": [ - { - "url": "moqt://local.nokiaresearch.com:8443/moq", - "transport": "quic", - "notes": "Raw QUIC endpoint" - }, - { - "url": "https://local.nokiaresearch.com:8080/moq", - "transport": "webtransport", - "notes": "WebTransport endpoint" - } - ] + "remote": [ + { + "url": "moqt://local.nokiaresearch.com:4443/moq", + "transport": "quic", + "notes": "Raw QUIC endpoint" + }, + { + "url": "https://local.nokiaresearch.com:4443/moq", + "transport": "webtransport", + "notes": "WebTransport endpoint" + } + ] }, "client": { "docker": { From 26c7ea8c0bb3cfeab62ebcfba2083d0bb0c3e824 Mon Sep 17 00:00:00 2001 From: Yu You Date: Tue, 21 Apr 2026 10:35:11 +0300 Subject: [PATCH 3/4] Add support for configurable RELAY_URL in Docker tests and schema --- Makefile | 50 ++++++++++++++++++++++++++++--------- docker-compose.test.yml | 2 +- implementations.schema.json | 5 ++++ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index acb84e4f..a40430e8 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,26 @@ TLS_DISABLE_VERIFY ?= false # Example: EXTRA_DOCKER_RUN_ARGS="--add-host local.nokiaresearch.com:host-gateway" EXTRA_DOCKER_RUN_ARGS ?= +# Track whether RELAY_URL was set by user (command line or environment) +RELAY_URL_ORIGIN := $(origin RELAY_URL) + +# Resolve relay URL for docker-compose tests. +# Priority: +# 1) Explicit RELAY_URL from CLI/environment +# 2) Matched implementations.json roles.relay.docker.url for RELAY_IMAGE +# 3) RELAY_URL default value from this Makefile +define RESOLVE_RELAY_URL +resolved_relay_url="$(RELAY_URL)"; \ +if [ "$(RELAY_URL_ORIGIN)" = "file" ] || [ "$(RELAY_URL_ORIGIN)" = "default" ] || [ "$(RELAY_URL_ORIGIN)" = "undefined" ]; then \ + if command -v jq >/dev/null 2>&1; then \ + config_relay_url=$$(jq -r --arg image "$(RELAY_IMAGE)" '.implementations | to_entries[] | select(.value.roles.relay?.docker?.image? == $$image) | .value.roles.relay.docker.url // empty' implementations.json | head -n1); \ + if [ -n "$$config_relay_url" ]; then \ + resolved_relay_url="$$config_relay_url"; \ + fi; \ + fi; \ +fi +endef + ############################################################################# # Certificate Generation (following QUIC interop runner conventions) ############################################################################# @@ -62,27 +82,33 @@ _ensure-certs: # Run tests with configured images (requires Docker images to exist) test: _ensure-certs mlog-clean - @echo "Running interop tests..." - @echo " Relay: $(RELAY_IMAGE)" - @echo " Client: $(CLIENT_IMAGE)" - RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) \ + @$(RESOLVE_RELAY_URL); \ + echo "Running interop tests..."; \ + echo " Relay: $(RELAY_IMAGE)"; \ + echo " Client: $(CLIENT_IMAGE)"; \ + echo " URL: $$resolved_relay_url"; \ + RELAY_URL="$$resolved_relay_url" RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) \ docker compose -f docker-compose.test.yml up --abort-on-container-exit @echo "" @echo "Test results in mlog/" test-verbose: _ensure-certs mlog-clean - @echo "Running interop tests (verbose)..." - @echo " Relay: $(RELAY_IMAGE)" - @echo " Client: $(CLIENT_IMAGE)" - RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) VERBOSE=1 \ + @$(RESOLVE_RELAY_URL); \ + echo "Running interop tests (verbose)..."; \ + echo " Relay: $(RELAY_IMAGE)"; \ + echo " Client: $(CLIENT_IMAGE)"; \ + echo " URL: $$resolved_relay_url"; \ + RELAY_URL="$$resolved_relay_url" RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) VERBOSE=1 \ docker compose -f docker-compose.test.yml up --abort-on-container-exit # Run a specific test test-single: - @echo "Running test: $(TESTCASE)" - @echo " Relay: $(RELAY_IMAGE)" - @echo " Client: $(CLIENT_IMAGE)" - RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) \ + @$(RESOLVE_RELAY_URL); \ + echo "Running test: $(TESTCASE)"; \ + echo " Relay: $(RELAY_IMAGE)"; \ + echo " Client: $(CLIENT_IMAGE)"; \ + echo " URL: $$resolved_relay_url"; \ + RELAY_URL="$$resolved_relay_url" RELAY_IMAGE=$(RELAY_IMAGE) CLIENT_IMAGE=$(CLIENT_IMAGE) \ docker compose -f docker-compose.test.yml run --rm \ -e TESTCASE=$(TESTCASE) \ test-client diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 94ca0acf..bfde2a7e 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -50,7 +50,7 @@ services: relay: condition: service_healthy environment: - - RELAY_URL=https://relay:4443 + - RELAY_URL=${RELAY_URL:-https://relay:4443} # TLS verification disabled for self-signed test certs # In production, use proper certificates and set to 0 - TLS_DISABLE_VERIFY=1 diff --git a/implementations.schema.json b/implementations.schema.json index 480f92a0..0de13e43 100644 --- a/implementations.schema.json +++ b/implementations.schema.json @@ -109,6 +109,11 @@ "type": "string", "description": "Docker image name:tag" }, + "url": { + "type": "string", + "pattern": "^(https://|moqt://)[a-zA-Z0-9][a-zA-Z0-9.-]*(:[0-9]+)?(/.*)?$", + "description": "Optional relay URL to pass to clients for docker-compose tests (overrides default RELAY_URL)" + }, "build": { "type": "object", "description": "Build configuration if image needs to be built locally", From 596384bfff32ece0aa859c1055160c3a34c4ee6a Mon Sep 17 00:00:00 2001 From: Yu You Date: Tue, 21 Apr 2026 10:39:07 +0300 Subject: [PATCH 4/4] Add relay URL configuration to Docker implementation and clean up implementations.json --- builds/moq-rs/Dockerfile.client | 2 -- implementations.json | 36 ++------------------------------- 2 files changed, 2 insertions(+), 36 deletions(-) diff --git a/builds/moq-rs/Dockerfile.client b/builds/moq-rs/Dockerfile.client index 7d8c13eb..72018859 100644 --- a/builds/moq-rs/Dockerfile.client +++ b/builds/moq-rs/Dockerfile.client @@ -46,8 +46,6 @@ FROM debian:bookworm-slim AS runtime RUN apt-get update && apt-get install -y \ ca-certificates \ - iputils-ping \ - iproute2 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/implementations.json b/implementations.json index 53383260..5fdb7e6e 100644 --- a/implementations.json +++ b/implementations.json @@ -297,6 +297,7 @@ "relay": { "docker": { "image": "ghcr.io/englishm/moq-interop-runner-xquic-moq-relay:latest", + "url": "moqt://relay:4443", "notes": "Pre-built on GHCR (amd64). To build from source: ./builds/xquic/build.sh --target relay" } }, @@ -307,39 +308,6 @@ } } } - }, - "streamforge": { - "name": "streamforge", - "organization": "Nokia", - "repository": "", - "draft_versions": ["draft-17"], - "notes": "QUIC-Go and Wentransport-GO implementation.", - "roles": { - "relay": { - "docker": { - "image": "streamforge:latest", - "notes": "Pre-built from Nokia streamforge repo." - }, - "remote": [ - { - "url": "moqt://local.nokiaresearch.com:4443/moq", - "transport": "quic", - "notes": "Raw QUIC endpoint" - }, - { - "url": "https://local.nokiaresearch.com:4443/moq", - "transport": "webtransport", - "notes": "WebTransport endpoint" - } - ] - }, - "client": { - "docker": { - "image": "streamforge-client:latest", - "notes": "External pre-built image" - } - } - } } }, @@ -349,7 +317,7 @@ "2. Fill in metadata: name, organization, repository, draft_versions", "3. Add 'roles' object with supported roles (relay, client, publisher, subscriber)", "4. For each role, specify either/both:", - " - 'docker': image name, build info, and any adapter needed", + " - 'docker': image name, optional relay 'url' override, build info, and any adapter needed", " - 'remote': array of endpoints with transport type (quic or webtransport)", "5. Transport types:", " - 'quic': Raw QUIC (moqt:// URL scheme)",