make[1]: Entering directory '/home/runner/work/moq-interop-runner/moq-interop-runner/main' rm -rf mlog/ mkdir -p mlog/relay mlog/client Running interop tests... Relay: aiomoqt-interop-relay:latest Client: ghcr.io/englishm/moq-interop-runner-moq-dev-js-client:latest URL: https://relay:4443 time="2026-06-28T00:51:07Z" level=warning msg="The \"PORT\" variable is not set. Defaulting to a blank string." time="2026-06-28T00:51:07Z" level=warning msg="The \"PORT\" variable is not set. Defaulting to a blank string." time="2026-06-28T00:51:07Z" level=warning msg="The \"PORT\" variable is not set. Defaulting to a blank string." time="2026-06-28T00:51:07Z" level=warning msg="The \"HEX\" variable is not set. Defaulting to a blank string." time="2026-06-28T00:51:07Z" level=warning msg="The \"HEX\" variable is not set. Defaulting to a blank string." Container main-relay-1 Recreate Container main-relay-1 Recreated Container main-test-client-1 Recreate Container main-test-client-1 Recreated Attaching to relay-1, test-client-1 relay-1 | 2026-06-28 00:51:08.513 INFO : Starting MOQT server on 0.0.0.0:4443 relay-1 | ================================================================ relay-1 | EXPERIMENTAL aiomoqt interop relay — control-plane only. relay-1 | NOT a production relay: no data forwarding, no auth, relay-1 | no scale handling. Use moxygen / moq-rs for real workloads. relay-1 | ================================================================ relay-1 | Listening on 0.0.0.0:4443 (H3/WebTransport, draft-[16, 18]) test-client-1 | TAP version 14 test-client-1 | # moq-dev-js-client v0.1.0 test-client-1 | # Relay: https://relay:4443 test-client-1 | 1..6 test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:14.272 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:14.273 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:14,273 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:14.274 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:14.274 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:14.274 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 1 - setup-only test-client-1 | --- test-client-1 | duration_ms: 2004 test-client-1 | message: "timeout after 2000ms: connect" test-client-1 | ... test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:16.171 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:16.171 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:16,171 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:16.172 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:16.172 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:16.172 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 2 - announce-only test-client-1 | --- test-client-1 | duration_ms: 2001 test-client-1 | message: "timeout after 2000ms: connect" test-client-1 | ... test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:18.172 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:18.173 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:18,173 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:18.173 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:18.173 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:18.173 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 3 - publish-namespace-done test-client-1 | --- test-client-1 | duration_ms: 2001 test-client-1 | message: "timeout after 2000ms: connect" test-client-1 | ... test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:20.173 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:20.173 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:20,173 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:20.174 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:20.174 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:20.174 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 4 - subscribe-error test-client-1 | --- test-client-1 | duration_ms: 2001 test-client-1 | message: "timeout after 2000ms: connect" test-client-1 | ... test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:22.174 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:22.175 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:22,175 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:22.175 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:22.175 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:22.175 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 5 - announce-subscribe test-client-1 | --- test-client-1 | duration_ms: 2002 test-client-1 | message: "timeout after 2000ms: publisher connect" test-client-1 | ... test-client-1 | https://relay:4443/ connected via WebTransport test-client-1 | https://relay:4443/ negotiated ALPN: moqt-18 relay-1 | 2026-06-28 00:51:24.176 ERROR: handle_control_message: error handling control message: BufferReadError: BufferReadError('read out of bounds') relay-1 | 2026-06-28 00:51:24.176 ERROR: handle_control_message: traceback: relay-1 | Traceback (most recent call last): relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | relay-1 | 2026-06-28 00:51:24,176 ERROR asyncio: Exception in callback _Dispatcher._drain() relay-1 | handle: relay-1 | Traceback (most recent call last): relay-1 | File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run relay-1 | self._context.run(self._callback, *self._args) relay-1 | File "/usr/local/lib/python3.12/site-packages/aiopquic/asyncio/webtransport.py", line 840, in _drain relay-1 | session._on_event(ev) relay-1 | File "/app/aiomoqt/protocol.py", line 2838, in _on_event relay-1 | self.quic_event_received(StreamDataReceived( relay-1 | File "/app/aiomoqt/protocol.py", line 1238, in quic_event_received relay-1 | self._d18_handle_control_uni(data, event.end_stream) relay-1 | File "/app/aiomoqt/protocol.py", line 1149, in _d18_handle_control_uni relay-1 | self._drain_control_buffer(msg_buf, msg_buf.capacity) relay-1 | File "/app/aiomoqt/protocol.py", line 1118, in _drain_control_buffer relay-1 | msg = self._moqt_handle_control_message(msg_buf) relay-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ relay-1 | File "/app/aiomoqt/protocol.py", line 489, in _moqt_handle_control_message relay-1 | msg_len = buf.pull_uint16() relay-1 | ^^^^^^^^^^^^^^^^^ relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 144, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | File "src/aiopquic/_binding/_buffer.pyx", line 146, in aiopquic._binding._buffer.Buffer.pull_uint16 relay-1 | aiopquic._binding._buffer.BufferReadError: read out of bounds relay-1 | 2026-06-28 00:51:24.177 ERROR: MOQT control: truncated msg type=0x0 msg_len=3335 tell=3 buf_len=15 head_hex=000d070b6d6f712d6c6974652d6a73 relay-1 | 2026-06-28 00:51:24.177 ERROR: MOQT error: control stream: parsing failed at position: 15 of 15 bytes relay-1 | 2026-06-28 00:51:24.177 ERROR: MOQT error: closing: control stream: parsing failed at position: 15 of 15 bytes (3) test-client-1 | not ok 6 - subscribe-before-announce test-client-1 | --- test-client-1 | duration_ms: 2002 test-client-1 | message: "timeout after 2000ms: subscriber connect" test-client-1 | ... test-client-1 exited with code 1 Aborting on container exit... Container main-test-client-1 Stopping Container main-test-client-1 Stopped Container main-relay-1 Stopping Container main-relay-1 Stopped make[1]: *** [Makefile:85: test] Error 1 make[1]: Leaving directory '/home/runner/work/moq-interop-runner/moq-interop-runner/main'