Skip to content

Tls transport ping test#1151

Merged
seetadev merged 7 commits intomainfrom
tls-transport-ping-test
Jan 25, 2026
Merged

Tls transport ping test#1151
seetadev merged 7 commits intomainfrom
tls-transport-ping-test

Conversation

@acul71
Copy link
Copy Markdown
Contributor

@acul71 acul71 commented Jan 23, 2026

@seetadev @lla-dane @sumanjeet0012 @yashksaini-coder
Sorry dirty PR
libp2p/security/tls/transport-luca-test.py should not be needed just ping_demo.py

  • python x python OK
    with rust NOT OK

continue from here.

read interop/transport/NEW_SPEC_2026.md for help set up

./run.sh --test-ignore '~failing' --debug 

....
.....
.....

 DEBUG: docker compose file: /srv/cache/test-run/transport-6bb0b409-034124-23-01-2026/docker-compose/python-v0_x_x_python-v0_x__quic-v1_-compose.yaml
  → [12/41] rust-v0.56 x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [15/41] rust-v0.56 x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [11/41] rust-v0.56 x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [16/41] rust-v0.56 x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [19/41] rust-v0.56 x python-v0.x (quic-v1)...[SUCCESS]
  → [32/41] python-v0.x x python-v0.x (tcp, tls, mplex)...[SUCCESS]
  → [28/41] python-v0.x x rust-v0.56 (quic-v1)...[SUCCESS]
  → [27/41] python-v0.x x rust-v0.56 (ws, tls, mplex)...[FAILED]
  → [20/41] python-v0.x x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [25/41] python-v0.x x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [26/41] python-v0.x x rust-v0.56 (ws, tls, yamux)...[FAILED]
  → [30/41] python-v0.x x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [31/41] python-v0.x x python-v0.x (tcp, tls, yamux)...[SUCCESS]
  → [24/41] python-v0.x x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [29/41] python-v0.x x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [21/41] python-v0.x x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [22/41] python-v0.x x rust-v0.56 (tcp, tls, yamux)...[FAILED]
  → [23/41] python-v0.x x rust-v0.56 (tcp, tls, mplex)...[FAILED]
  → [33/41] python-v0.x x python-v0.x (wss, noise, yamux)...[SUCCESS]
  → [39/41] python-v0.x x python-v0.x (ws, tls, yamux)...[SUCCESS]
  → [37/41] python-v0.x x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [35/41] python-v0.x x python-v0.x (wss, tls, yamux)...[SUCCESS]
  → [34/41] python-v0.x x python-v0.x (wss, noise, mplex)...[SUCCESS]
  → [36/41] python-v0.x x python-v0.x (wss, tls, mplex)...[SUCCESS]
  → [41/41] python-v0.x x python-v0.x (quic-v1)...[SUCCESS]
  → [40/41] python-v0.x x python-v0.x (ws, tls, mplex)...[SUCCESS]
  → [38/41] python-v0.x x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [17/41] rust-v0.56 x python-v0.x (ws, tls, yamux)...[FAILED]
  → [14/41] rust-v0.56 x python-v0.x (tcp, tls, mplex)...[FAILED]
  → [13/41] rust-v0.56 x python-v0.x (tcp, tls, yamux)...[FAILED]
  → [18/41] rust-v0.56 x python-v0.x (ws, tls, mplex)...[FAILED]

╲ Stopping global services...
 ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    → Stopping Redis...stoppedNetwork removed: transport-networkGlobal services stoppedCollecting results...
 ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
  → Results:
    → Total: 41Passed: 33Failed: 8
    - python-v0.x x rust-v0.56 (ws, tls, mplex)
    - python-v0.x x rust-v0.56 (ws, tls, yamux)
    - python-v0.x x rust-v0.56 (tcp, tls, yamux)
    - python-v0.x x rust-v0.56 (tcp, tls, mplex)
    - rust-v0.56 x python-v0.x (ws, tls, yamux)
    - rust-v0.56 x python-v0.x (tcp, tls, mplex)
    - rust-v0.56 x python-v0.x (tcp, tls, yamux)
    - rust-v0.56 x python-v0.x (ws, tls, mplex)

  → Total time: 00:03:178 test(s) failed

some log:

############################
python-v0_x_x_rust-v0_56__tcp__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: python-v0.x x rust-v0.56 (tcp, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Creating 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Created 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Creating 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Created 
Attaching to python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer, python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Starting 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Started 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Starting 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Started 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Debug logging enabled via debug environment variable
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Setting up Redis connection...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Running as dialer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Waiting for listener address from Redis...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Got listener address: /ip4/172.17.0.36/tcp/37239/p2p/12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 2026-01-23 02:42:18,851 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Creating multiaddr from address: /ip4/172.17.0.36/tcp/37239/p2p/12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Multiaddr protocols: ['ip4', 'tcp', 'p2p']
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] WebSocket multiaddr validation: False
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Connecting to /ip4/172.17.0.36/tcp/37239/p2p/12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] About to call host.connect() for 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Peer info addresses: ['/ip4/172.17.0.36/tcp/37239']
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, Expected: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, Expected: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 739 bytes
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 739 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 739 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, Expected: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 660 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, Expected: 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Connection error type: SwarmException
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Connection error: unable to connect to 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Connection error cause: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] MultiError contains 1 exception(s):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG]   Exception 1: SwarmException: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG]     Caused by: Connection closed
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG]     Traceback for exception 1:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 295, in _dial_with_retry
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     return await self._dial_addr_single_attempt(addr, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 395, in _dial_addr_single_attempt
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     swarm_conn = await self.upgrade_outbound_raw_conn(raw_conn, peer_id, pre_scope)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 426, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     muxed_conn = await self.upgrader.upgrade_connection(secured_conn, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 77, in upgrade_connection
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     return await self.muxer_multistream.new_conn(conn, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/stream_muxer/muxer_multistream.py", line 104, in new_conn
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     protocol = await self.multistream_client.select_one_of(
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |         tuple(self.transports.keys()), communicator, self.negotiate_timeout
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     )
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     ^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 76, in select_one_of
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     await self.handshake(communicator)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 45, in handshake
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     handshake_contents = await communicator.read()
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                          ^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 52, in read
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     data = await read_delim(self.read_writer)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 133, in read_delim
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     msg_bytes = await read_varint_prefixed_bytes(reader)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 118, in read_varint_prefixed_bytes
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     len_msg = await decode_uvarint_from_stream(reader)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 76, in decode_uvarint_from_stream
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     byte = await read_exactly(reader, 1)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/io/utils.py", line 47, in read_exactly
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     buffer.extend(await reader.read(n))
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                   ^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/secure_session.py", line 88, in read
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     raise Exception("Connection closed")
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Exception: Connection closed
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 257, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     connection = await self._dial_with_retry(multiaddr, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 313, in _dial_with_retry
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |         f"Failed to connect after {self.retry_config.max_retries} attempts"
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     ) from last_exception
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | libp2p.network.exceptions.SwarmException: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | [DEBUG] Full traceback:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | libp2p.exceptions.MultiError: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     ...<2 lines>...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 2026-01-23 02:42:20,520 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRCfe>: _handle_cancelled triggering task cancellation
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | 2026-01-23 02:42:20,520 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SrCFe>: finished
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  | Dialer error: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   + Exception Group Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/app/ping_test.py", line 1044, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     async with self.host.run(listen_addrs=dialer_listen_addrs or []):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 357, in _run
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     async with background_trio_service(network):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 456, in background_trio_service
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     async with trio.open_nursery() as nursery:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~~~~~^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/trio/_core/_run.py", line 1125, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   |     raise combined_error_from_nursery
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   | ExceptionGroup: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |   +-+---------------- 1 ----------------
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | libp2p.exceptions.MultiError: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 461, in background_trio_service
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     yield manager
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 374, in _run
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     yield
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     ...<2 lines>...
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWMSheNQ3161eRXQzLqYDHzSScdvWJ4zXcrYSTp1HVzFq9, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer  |     +------------------------------------
python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer exited with code 1
 Compose Stopping Aborting on container exit...
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Stopped 
python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener exited with code 143

[2026-01-23 03:42:21] ERROR:   ✗ Test failed
[2026-01-23 03:42:21] DEBUG:   Cleaning up containers...
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Removing 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__dialer Removed 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Removing 
 Container python-v0_x_x_rust-v0_56__tcp__tls__mplex__listener Removed 
####################################



############################
python-v0_x_x_rust-v0_56__tcp__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: python-v0.x x rust-v0.56 (tcp, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Creating 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Created 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Creating 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Created 
Attaching to python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer, python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Starting 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Started 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Starting 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Started 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Debug logging enabled via debug environment variable
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Setting up Redis connection...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Running as dialer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Waiting for listener address from Redis...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Got listener address: /ip4/172.17.0.27/tcp/43485/p2p/12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 2026-01-23 02:42:18,335 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Creating multiaddr from address: /ip4/172.17.0.27/tcp/43485/p2p/12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Multiaddr protocols: ['ip4', 'tcp', 'p2p']
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] WebSocket multiaddr validation: False
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Connecting to /ip4/172.17.0.27/tcp/43485/p2p/12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] About to call host.connect() for 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Peer info addresses: ['/ip4/172.17.0.27/tcp/43485']
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 660 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, Expected: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, Expected: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 740 bytes
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 740 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 740 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 660 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, Expected: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 738 bytes
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 738 bytes from wire
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 738 bytes to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, Expected: 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Connection error type: SwarmException
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Connection error: unable to connect to 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Connection error cause: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] MultiError contains 1 exception(s):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG]   Exception 1: SwarmException: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG]     Caused by: Connection closed
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG]     Traceback for exception 1:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 295, in _dial_with_retry
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     return await self._dial_addr_single_attempt(addr, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 395, in _dial_addr_single_attempt
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     swarm_conn = await self.upgrade_outbound_raw_conn(raw_conn, peer_id, pre_scope)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 426, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     muxed_conn = await self.upgrader.upgrade_connection(secured_conn, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 77, in upgrade_connection
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     return await self.muxer_multistream.new_conn(conn, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/stream_muxer/muxer_multistream.py", line 104, in new_conn
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     protocol = await self.multistream_client.select_one_of(
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |         tuple(self.transports.keys()), communicator, self.negotiate_timeout
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     )
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     ^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 76, in select_one_of
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     await self.handshake(communicator)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 45, in handshake
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     handshake_contents = await communicator.read()
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                          ^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 52, in read
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     data = await read_delim(self.read_writer)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 133, in read_delim
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     msg_bytes = await read_varint_prefixed_bytes(reader)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 118, in read_varint_prefixed_bytes
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     len_msg = await decode_uvarint_from_stream(reader)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 76, in decode_uvarint_from_stream
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     byte = await read_exactly(reader, 1)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/io/utils.py", line 47, in read_exactly
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     buffer.extend(await reader.read(n))
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                   ^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/secure_session.py", line 88, in read
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     raise Exception("Connection closed")
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Exception: Connection closed
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 257, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     connection = await self._dial_with_retry(multiaddr, peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 313, in _dial_with_retry
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |         f"Failed to connect after {self.retry_config.max_retries} attempts"
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     ) from last_exception
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | libp2p.network.exceptions.SwarmException: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | [DEBUG] Full traceback:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | libp2p.exceptions.MultiError: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     ...<2 lines>...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 2026-01-23 02:42:20,334 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRCfe>: _handle_cancelled triggering task cancellation
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | 2026-01-23 02:42:20,334 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SrCFe>: finished
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  | Dialer error: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   + Exception Group Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/app/ping_test.py", line 1044, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     async with self.host.run(listen_addrs=dialer_listen_addrs or []):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 357, in _run
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     async with background_trio_service(network):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 456, in background_trio_service
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     async with trio.open_nursery() as nursery:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~~~~~^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/trio/_core/_run.py", line 1125, in __aexit__
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   |     raise combined_error_from_nursery
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   | ExceptionGroup: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |   +-+---------------- 1 ----------------
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | libp2p.exceptions.MultiError: Error 1: Failed to connect after 3 attempts
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 461, in background_trio_service
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     yield manager
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 374, in _run
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     yield
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     raise SwarmException(
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     ...<2 lines>...
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWP8aQmog7gMcQEkMu9b6obxuPqcDoVDkEK9X423ttYQDp, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer  |     +------------------------------------
python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer exited with code 1
 Compose Stopping Aborting on container exit...
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Stopped 
python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener exited with code 143

[2026-01-23 03:42:21] ERROR:   ✗ Test failed
[2026-01-23 03:42:21] DEBUG:   Cleaning up containers...
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Removing 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__dialer Removed 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Stopping 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Stopped 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Removing 
 Container python-v0_x_x_rust-v0_56__tcp__tls__yamux__listener Removed 
####################################



############################
python-v0_x_x_rust-v0_56__ws__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: python-v0.x x rust-v0.56 (ws, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Creating 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Created 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Creating 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Created 
Attaching to python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer, python-v0_x_x_rust-v0_56__ws__tls__mplex__listener
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Starting 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Started 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Starting 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Started 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Debug logging enabled via debug environment variable
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Setting up Redis connection...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Running as dialer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Waiting for listener address from Redis...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Got listener address: /ip4/172.17.0.8/tcp/36939/ws/p2p/12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Registering WS transport for dialer with addresses: ['/ip4/172.17.0.40/tcp/0/ws', '/ip4/127.0.0.1/tcp/0/ws']
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,237 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,238 [DEBUG] [trio-websocket] Listening on Endpoint(address="172.17.0.40", port=46661, is_ssl=False)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,239 [DEBUG] [trio-websocket] Listening on Endpoint(address="127.0.0.1", port=43829, is_ssl=False)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Creating multiaddr from address: /ip4/172.17.0.8/tcp/36939/ws/p2p/12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Multiaddr protocols: ['ip4', 'tcp', 'ws', 'p2p']
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] WebSocket multiaddr validation: True
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Connecting to /ip4/172.17.0.8/tcp/36939/ws/p2p/12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] About to call host.connect() for 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Peer info addresses: ['/ip4/172.17.0.8/tcp/36939/ws']
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,241 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.8:36939/
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,241 [DEBUG] [trio-websocket] client-0 sending 155 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,242 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,422 [DEBUG] [trio-websocket] client-0 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,422 [DEBUG] [trio-websocket] client-0 received 750 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,422 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,423 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,423 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 607 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 607 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 607 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,424 [DEBUG] [trio-websocket] client-0 sending 667 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, Expected: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,425 [DEBUG] [trio-websocket] client-0 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,425 [DEBUG] [trio-websocket] client-0 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,425 [DEBUG] [trio-websocket] client-0 sending 48 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,425 [DEBUG] [trio-websocket] client-0 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,519 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.8:36939/
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,520 [DEBUG] [trio-websocket] client-1 sending 155 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,521 [DEBUG] [trio-websocket] client-1 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,521 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,521 [DEBUG] [trio-websocket] client-1 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,522 [DEBUG] [trio-websocket] client-1 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,522 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,522 [DEBUG] [trio-websocket] client-1 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,523 [DEBUG] [trio-websocket] client-1 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,523 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,525 [DEBUG] [trio-websocket] client-1 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,525 [DEBUG] [trio-websocket] client-1 received 750 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,525 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,526 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,526 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 607 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 607 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 607 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 658 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,527 [DEBUG] [trio-websocket] client-1 sending 666 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, Expected: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,528 [DEBUG] [trio-websocket] client-1 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,528 [DEBUG] [trio-websocket] client-1 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,528 [DEBUG] [trio-websocket] client-1 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,726 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.8:36939/
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,726 [DEBUG] [trio-websocket] client-2 sending 155 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,727 [DEBUG] [trio-websocket] client-2 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,728 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,729 [DEBUG] [trio-websocket] client-2 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,729 [DEBUG] [trio-websocket] client-2 received 751 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,729 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,729 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,730 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 608 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 608 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 608 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 657 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,730 [DEBUG] [trio-websocket] client-2 sending 665 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, Expected: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,731 [DEBUG] [trio-websocket] client-2 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,731 [DEBUG] [trio-websocket] client-2 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:16,731 [DEBUG] [trio-websocket] client-2 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,110 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.8:36939/
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,111 [DEBUG] [trio-websocket] client-3 sending 155 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,111 [DEBUG] [trio-websocket] client-3 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,112 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,112 [DEBUG] [trio-websocket] client-3 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,112 [DEBUG] [trio-websocket] client-3 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,112 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,113 [DEBUG] [trio-websocket] client-3 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,113 [DEBUG] [trio-websocket] client-3 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,113 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,116 [DEBUG] [trio-websocket] client-3 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,117 [DEBUG] [trio-websocket] client-3 received 749 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,117 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,118 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,118 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 606 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 606 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 606 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 658 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,120 [DEBUG] [trio-websocket] client-3 sending 666 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, Expected: 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,121 [DEBUG] [trio-websocket] client-3 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,122 [DEBUG] [trio-websocket] client-3 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,122 [DEBUG] [trio-websocket] client-3 sending 48 bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,122 [DEBUG] [trio-websocket] client-3 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Connection error type: SwarmException
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Connection error: unable to connect to 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Connection error cause: Error 1: failed to upgrade mux for peer 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] MultiError contains 1 exception(s):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG]   Exception 1: SwarmException: failed to upgrade mux for peer 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG]     Caused by: failed to negotiate the multiplexer protocol
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG]     Traceback for exception 1:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 382, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     message = await self._ws_connection.get_message()
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/trio_websocket/_impl.py", line 1207, in get_message
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise ConnectionClosed(self._close_reason) from None
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | trio_websocket._impl.ConnectionClosed: CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | During handling of the above exception, another exception occurred:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 39, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     return await self.stream.read(n)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 419, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise self._handle_connection_closed_exception(e, "read")
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.io.exceptions.IOException: WebSocket connection closed by peer during read operation: code=1006, reason=Connection closed by peer.
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 52, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     data = await read_delim(self.read_writer)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 133, in read_delim
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     msg_bytes = await read_varint_prefixed_bytes(reader)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 118, in read_varint_prefixed_bytes
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     len_msg = await decode_uvarint_from_stream(reader)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/utils/varint.py", line 76, in decode_uvarint_from_stream
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     byte = await read_exactly(reader, 1)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/io/utils.py", line 47, in read_exactly
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     buffer.extend(await reader.read(n))
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                   ^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/secure_session.py", line 83, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     msg = await self.conn.read_msg()
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 434, in read_msg
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     incoming = await self.raw_connection.read(4096)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 41, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise RawConnError from error
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.network.connection.exceptions.RawConnError
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 45, in handshake
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     handshake_contents = await communicator.read()
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                          ^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 55, in read
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise MultiselectCommunicatorError(
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |         "fail to read from multiselect communicator"
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     ) from error
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.protocol_muxer.exceptions.MultiselectCommunicatorError: fail to read from multiselect communicator
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 77, in upgrade_connection
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     return await self.muxer_multistream.new_conn(conn, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/stream_muxer/muxer_multistream.py", line 104, in new_conn
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     protocol = await self.multistream_client.select_one_of(
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |         tuple(self.transports.keys()), communicator, self.negotiate_timeout
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     )
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     ^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 76, in select_one_of
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     await self.handshake(communicator)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 48, in handshake
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise MultiselectClientError(f"handshake read failed: {error}") from error
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.protocol_muxer.exceptions.MultiselectClientError: handshake read failed: fail to read from multiselect communicator
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 426, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     muxed_conn = await self.upgrader.upgrade_connection(secured_conn, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 79, in upgrade_connection
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise MuxerUpgradeFailure(
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |         "failed to negotiate the multiplexer protocol"
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     ) from error
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.transport.exceptions.MuxerUpgradeFailure: failed to negotiate the multiplexer protocol
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 257, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     connection = await self._dial_with_retry(multiaddr, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 311, in _dial_with_retry
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise last_exception
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 295, in _dial_with_retry
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     return await self._dial_addr_single_attempt(addr, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 395, in _dial_addr_single_attempt
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     swarm_conn = await self.upgrade_outbound_raw_conn(raw_conn, peer_id, pre_scope)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 430, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise SwarmException(f"failed to upgrade mux for peer {peer_id}") from error
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.network.exceptions.SwarmException: failed to upgrade mux for peer 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | [DEBUG] Full traceback:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.exceptions.MultiError: Error 1: failed to upgrade mux for peer 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     ...<2 lines>...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,131 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRCfe>: _handle_cancelled triggering task cancellation
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | Dialer error: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  | 2026-01-23 02:42:17,132 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SrCFe>: finished
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   + Exception Group Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/app/ping_test.py", line 1044, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     async with self.host.run(listen_addrs=dialer_listen_addrs or []):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 357, in _run
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     async with background_trio_service(network):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 456, in background_trio_service
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     async with trio.open_nursery() as nursery:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |                ~~~~~~~~~~~~~~~~~^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/trio/_core/_run.py", line 1125, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   |     raise combined_error_from_nursery
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   | ExceptionGroup: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |   +-+---------------- 1 ----------------
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | libp2p.exceptions.MultiError: Error 1: failed to upgrade mux for peer 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | 
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 461, in background_trio_service
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     yield manager
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 374, in _run
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     yield
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     raise SwarmException(
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     ...<2 lines>...
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWRaktWW1UA3QZh1HMNBwJJg1scWeFtkUdfzBLvd81TiCC, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer  |     +------------------------------------
python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer exited with code 1
 Compose Stopping Aborting on container exit...
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Stopped 
python-v0_x_x_rust-v0_56__ws__tls__mplex__listener exited with code 143

[2026-01-23 03:42:17] ERROR:   ✗ Test failed
[2026-01-23 03:42:17] DEBUG:   Cleaning up containers...
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Removing 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__dialer Removed 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Removing 
 Container python-v0_x_x_rust-v0_56__ws__tls__mplex__listener Removed 
####################################



############################
python-v0_x_x_rust-v0_56__ws__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: python-v0.x x rust-v0.56 (ws, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Creating 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Created 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Creating 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Created 
Attaching to python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer, python-v0_x_x_rust-v0_56__ws__tls__yamux__listener
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Starting 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Started 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Starting 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Started 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Debug logging enabled via debug environment variable
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Setting up Redis connection...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Running as dialer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Connecting to Redis...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Successfully connected to Redis on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Waiting for listener address from Redis...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Got listener address: /ip4/172.17.0.17/tcp/39933/ws/p2p/12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Registering WS transport for dialer with addresses: ['/ip4/172.17.0.41/tcp/0/ws', '/ip4/127.0.0.1/tcp/0/ws']
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,515 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,516 [DEBUG] [trio-websocket] Listening on Endpoint(address="172.17.0.41", port=39723, is_ssl=False)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,516 [DEBUG] [trio-websocket] Listening on Endpoint(address="127.0.0.1", port=38743, is_ssl=False)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Creating multiaddr from address: /ip4/172.17.0.17/tcp/39933/ws/p2p/12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Multiaddr protocols: ['ip4', 'tcp', 'ws', 'p2p']
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] WebSocket multiaddr validation: True
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Connecting to /ip4/172.17.0.17/tcp/39933/ws/p2p/12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] About to call host.connect() for 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Peer info addresses: ['/ip4/172.17.0.17/tcp/39933/ws']
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,517 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.17:39933/
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,518 [DEBUG] [trio-websocket] client-0 sending 156 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,518 [DEBUG] [trio-websocket] client-0 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,518 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,519 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,741 [DEBUG] [trio-websocket] client-0 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,742 [DEBUG] [trio-websocket] client-0 received 748 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,742 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,743 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,743 [DEBUG] [trio-websocket] client-0 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 605 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 605 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 605 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 660 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,745 [DEBUG] [trio-websocket] client-0 sending 668 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, Expected: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,746 [DEBUG] [trio-websocket] client-0 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,746 [DEBUG] [trio-websocket] client-0 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,746 [DEBUG] [trio-websocket] client-0 sending 48 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,747 [DEBUG] [trio-websocket] client-0 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,850 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.17:39933/
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,851 [DEBUG] [trio-websocket] client-1 sending 156 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,852 [DEBUG] [trio-websocket] client-1 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,852 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,853 [DEBUG] [trio-websocket] client-1 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,853 [DEBUG] [trio-websocket] client-1 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,853 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,853 [DEBUG] [trio-websocket] client-1 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,854 [DEBUG] [trio-websocket] client-1 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,854 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,856 [DEBUG] [trio-websocket] client-1 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,856 [DEBUG] [trio-websocket] client-1 received 749 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,856 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,857 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,857 [DEBUG] [trio-websocket] client-1 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 606 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 606 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 606 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,858 [DEBUG] [trio-websocket] client-1 sending 667 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, Expected: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,859 [DEBUG] [trio-websocket] client-1 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,859 [DEBUG] [trio-websocket] client-1 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:17,860 [DEBUG] [trio-websocket] client-1 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.17:39933/
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 sending 156 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,062 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,063 [DEBUG] [trio-websocket] client-2 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,063 [DEBUG] [trio-websocket] client-2 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,063 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,063 [DEBUG] [trio-websocket] client-2 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,064 [DEBUG] [trio-websocket] client-2 received 750 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,064 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,064 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,064 [DEBUG] [trio-websocket] client-2 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 607 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 607 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 607 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 659 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,064 [DEBUG] [trio-websocket] client-2 sending 667 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, Expected: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,065 [DEBUG] [trio-websocket] client-2 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,065 [DEBUG] [trio-websocket] client-2 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,065 [DEBUG] [trio-websocket] client-2 reader task finished
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,456 [DEBUG] [trio-websocket] Connecting to ws://172.17.0.17:39933/
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,456 [DEBUG] [trio-websocket] client-3 sending 156 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,456 [DEBUG] [trio-websocket] client-3 received 152 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.AcceptConnection'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 sending 26 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 received 22 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 sending 18 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 received 14 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,457 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=False, hostname=None)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting first handshake attempt
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 1473 bytes to wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,458 [DEBUG] [trio-websocket] client-3 sending 1481 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,458 [DEBUG] [trio-websocket] client-3 received 750 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,458 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,458 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 127 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 127 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 127 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,458 [DEBUG] [trio-websocket] client-3 received event: <class 'wsproto.events.BytesMessage'>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 6 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 6 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 6 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 2)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] Starting handshake attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 3
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 3: The operation did not complete (read) (_ssl.c:1032)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 3)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 607 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Read 607 bytes from wire
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 607 bytes to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: do_handshake() completed successfully after writing to in_bio
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 661 bytes after do_handshake() success
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,459 [DEBUG] [trio-websocket] client-3 sending 669 bytes
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-HANDSHAKE] No remaining handshake data to flush
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: TLS handshake completed, extracting peer certificate
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer certificate extracted: True
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Remote peer ID: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, Expected: 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [TLS-TRANSPORT] secure_outbound: Peer ID verified, creating SecureSession
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,459 [DEBUG] [trio-websocket] client-3 received zero bytes (connection closed)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,459 [DEBUG] [trio-websocket] client-3 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Connection error type: SwarmException
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Connection error: unable to connect to 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Connection error cause: Error 1: failed to upgrade mux for peer 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] MultiError contains 1 exception(s):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG]   Exception 1: SwarmException: failed to upgrade mux for peer 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG]     Caused by: failed to negotiate the multiplexer protocol
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG]     Traceback for exception 1:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 457, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self._ws_connection.send_message(data)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/trio_websocket/_impl.py", line 1263, in send_message
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise ConnectionClosed(self._close_reason)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | trio_websocket._impl.ConnectionClosed: CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | During handling of the above exception, another exception occurred:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 27, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.stream.write(data)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 464, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise self._handle_connection_closed_exception(e, "write")
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.io.exceptions.IOException: WebSocket connection closed by peer during write operation: code=1006, reason=Connection closed by peer.
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 40, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.read_writer.write(msg_bytes)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/secure_session.py", line 100, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.conn.write_msg(data)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 391, in write_msg
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.raw_connection.write(data)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 29, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise RawConnError from error
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.network.connection.exceptions.RawConnError
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 40, in handshake
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await communicator.write(MULTISELECT_PROTOCOL_ID)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_communicator.py", line 43, in write
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise MultiselectCommunicatorError(
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |         "fail to write to multiselect communicator"
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     ) from error
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.protocol_muxer.exceptions.MultiselectCommunicatorError: fail to write to multiselect communicator
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 77, in upgrade_connection
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     return await self.muxer_multistream.new_conn(conn, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/stream_muxer/muxer_multistream.py", line 104, in new_conn
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     protocol = await self.multistream_client.select_one_of(
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |         tuple(self.transports.keys()), communicator, self.negotiate_timeout
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     )
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     ^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 76, in select_one_of
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.handshake(communicator)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/protocol_muxer/multiselect_client.py", line 42, in handshake
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise MultiselectClientError(f"handshake write failed: {error}") from error
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.protocol_muxer.exceptions.MultiselectClientError: handshake write failed: fail to write to multiselect communicator
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 426, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     muxed_conn = await self.upgrader.upgrade_connection(secured_conn, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 79, in upgrade_connection
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise MuxerUpgradeFailure(
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |         "failed to negotiate the multiplexer protocol"
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     ) from error
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.transport.exceptions.MuxerUpgradeFailure: failed to negotiate the multiplexer protocol
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 257, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     connection = await self._dial_with_retry(multiaddr, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 311, in _dial_with_retry
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise last_exception
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 295, in _dial_with_retry
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     return await self._dial_addr_single_attempt(addr, peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 395, in _dial_addr_single_attempt
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     swarm_conn = await self.upgrade_outbound_raw_conn(raw_conn, peer_id, pre_scope)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 430, in upgrade_outbound_raw_conn
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise SwarmException(f"failed to upgrade mux for peer {peer_id}") from error
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.network.exceptions.SwarmException: failed to upgrade mux for peer 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | [DEBUG] Full traceback:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.exceptions.MultiError: Error 1: failed to upgrade mux for peer 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     raise SwarmException(
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     ...<2 lines>...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,461 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRCfe>: _handle_cancelled triggering task cancellation
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | 2026-01-23 02:42:18,462 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SrCFe>: finished
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  | Dialer error: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   + Exception Group Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/app/ping_test.py", line 1044, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     async with self.host.run(listen_addrs=dialer_listen_addrs or []):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 357, in _run
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     async with background_trio_service(network):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/usr/local/lib/python3.13/contextlib.py", line 235, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     await self.gen.athrow(value)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 456, in background_trio_service
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     async with trio.open_nursery() as nursery:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |                ~~~~~~~~~~~~~~~~~^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |   File "/app/venv/lib/python3.13/site-packages/trio/_core/_run.py", line 1125, in __aexit__
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   |     raise combined_error_from_nursery
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   | ExceptionGroup: Exceptions from Trio nursery (1 sub-exception)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |   +-+---------------- 1 ----------------
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | libp2p.exceptions.MultiError: Error 1: failed to upgrade mux for peer 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | The above exception was the direct cause of the following exception:
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | 
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | Traceback (most recent call last):
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/tools/async_service/trio_service.py", line 461, in background_trio_service
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     yield manager
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 374, in _run
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     yield
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |   File "/app/ping_test.py", line 1084, in run_dialer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     await self.host.connect(info)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/host/basic_host.py", line 675, in connect
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     connections = await self._network.dial_peer(peer_info.peer_id)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 275, in dial_peer
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     raise SwarmException(
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     ...<2 lines>...
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     |     ) from MultiError(exceptions)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     | libp2p.network.exceptions.SwarmException: unable to connect to 12D3KooWLvbnECLry6wf6tkjEopkbzv5dbGNUvgj92ACK19wQMwv, no addresses established a successful connection (with exceptions)
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer  |     +------------------------------------
python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer exited with code 1
 Compose Stopping Aborting on container exit...
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Stopped 
python-v0_x_x_rust-v0_56__ws__tls__yamux__listener exited with code 143

[2026-01-23 03:42:19] ERROR:   ✗ Test failed
[2026-01-23 03:42:19] DEBUG:   Cleaning up containers...
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Removing 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__dialer Removed 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Stopping 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Stopped 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Removing 
 Container python-v0_x_x_rust-v0_56__ws__tls__yamux__listener Removed 
####################################



############################
rust-v0_56_x_python-v0_x__tcp__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x python-v0.x (tcp, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Creating 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Created 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Creating 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Created 
Attaching to rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer, rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Starting 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Started 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Starting 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Started 
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Debug logging enabled via debug environment variable
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Setting up Redis connection...
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Registered protocols: ['/ipfs/id/1.0.0', '/ipfs/ping/1.0.0']
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | 2026-01-23 02:42:01,599 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Publishing address for transport tcp: /ip4/172.17.0.3/tcp/43641/p2p/12D3KooWFhkWLrxADm8TwXXagLmyXTcZ9ErbdNskE7ejHT9ccWyo
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Listener ready, waiting for dialer to connect...
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [SEC-MULTISTREAM] Starting secure_inbound negotiation
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [SEC-MULTISTREAM] Selected transport: TLSTransport
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-TRANSPORT] secure_inbound: Starting TLS handshake (server side)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-TRANSPORT] SSL context created
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-TRANSPORT] TLSReadWriter created, starting handshake
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=True, hostname=None)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] Starting first handshake attempt
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 213 bytes
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 213 bytes from wire
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 213 bytes to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] Starting handshake attempt 2
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 848 bytes to wire
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 30 bytes
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 30 bytes from wire
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 30 bytes to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Error during immediate do_handshake(): [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Failed to upgrade incoming connection on /ip4/172.17.0.3/tcp/0: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 136, in handshake
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ssl_obj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/usr/local/lib/python3.13/ssl.py", line 951, in do_handshake
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     self._sslobj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ~~~~~~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | During handling of the above exception, another exception occurred:
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 657, in conn_handler
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     await self.upgrade_inbound_raw_conn(raw_conn, maddr)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 716, in upgrade_inbound_raw_conn
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     secured_conn = await self.upgrader.upgrade_security(raw_conn, False)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 64, in upgrade_security
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     return await self.security_multistream.secure_inbound(raw_conn)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/security_multistream.py", line 92, in secure_inbound
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     secure_conn = await transport.secure_inbound(conn)
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/transport.py", line 233, in secure_inbound
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     await tls_reader_writer.handshake()
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 204, in handshake
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ssl_obj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |   File "/usr/local/lib/python3.13/ssl.py", line 951, in do_handshake
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     self._sslobj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  |     ~~~~~~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener  | ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
 Compose Stopping Gracefully Stopping... press Ctrl+C again to force
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Stopped 

[2026-01-23 03:44:40] ERROR:   ✗ Test timed out after 180s

[2026-01-23 03:44:40] ERROR: Test timed out after 180 seconds
[2026-01-23 03:44:40] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Removing 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__dialer Removed 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Removing 
 Container rust-v0_56_x_python-v0_x__tcp__tls__mplex__listener Removed 
####################################



############################
rust-v0_56_x_python-v0_x__tcp__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x python-v0.x (tcp, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Creating 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Created 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Creating 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Created 
Attaching to rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer, rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Starting 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Started 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Starting 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Started 
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Debug logging enabled via debug environment variable
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Setting up Redis connection...
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Registered protocols: ['/ipfs/id/1.0.0', '/ipfs/ping/1.0.0']
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | 2026-01-23 02:42:09,716 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Publishing address for transport tcp: /ip4/172.17.0.14/tcp/44549/p2p/12D3KooWHm6ZUnexZcfuxFkCxwsY4iZQpCkeGMtNhXaioSXvoBPr
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Listener ready, waiting for dialer to connect...
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [SEC-MULTISTREAM] Starting secure_inbound negotiation
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [SEC-MULTISTREAM] Selected transport: TLSTransport
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-TRANSPORT] secure_inbound: Starting TLS handshake (server side)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-TRANSPORT] SSL context created
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-TRANSPORT] TLSReadWriter created, starting handshake
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=True, hostname=None)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] Starting first handshake attempt
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 213 bytes
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 213 bytes from wire
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 213 bytes to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] Starting handshake attempt 2
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 848 bytes to wire
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 30 bytes
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 30 bytes from wire
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 30 bytes to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Error during immediate do_handshake(): [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Failed to upgrade incoming connection on /ip4/172.17.0.14/tcp/0: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 136, in handshake
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ssl_obj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/usr/local/lib/python3.13/ssl.py", line 951, in do_handshake
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     self._sslobj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ~~~~~~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | ssl.SSLWantReadError: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | During handling of the above exception, another exception occurred:
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 657, in conn_handler
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     await self.upgrade_inbound_raw_conn(raw_conn, maddr)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 716, in upgrade_inbound_raw_conn
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     secured_conn = await self.upgrader.upgrade_security(raw_conn, False)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 64, in upgrade_security
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     return await self.security_multistream.secure_inbound(raw_conn)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/security_multistream.py", line 92, in secure_inbound
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     secure_conn = await transport.secure_inbound(conn)
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/transport.py", line 233, in secure_inbound
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     await tls_reader_writer.handshake()
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 204, in handshake
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ssl_obj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |   File "/usr/local/lib/python3.13/ssl.py", line 951, in do_handshake
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     self._sslobj.do_handshake()
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  |     ~~~~~~~~~~~~~~~~~~~~~~~~~^^
rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener  | ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] ssl/tls alert certificate unknown (_ssl.c:1032)
 Compose Stopping Gracefully Stopping... press Ctrl+C again to force
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Stopped 

[2026-01-23 03:44:40] ERROR:   ✗ Test timed out after 180s

[2026-01-23 03:44:40] ERROR: Test timed out after 180 seconds
[2026-01-23 03:44:40] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Removing 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__dialer Removed 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Stopping 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Stopped 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Removing 
 Container rust-v0_56_x_python-v0_x__tcp__tls__yamux__listener Removed 
####################################



############################
rust-v0_56_x_python-v0_x__ws__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x python-v0.x (ws, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Creating 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Created 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Creating 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Created 
Attaching to rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer, rust-v0_56_x_python-v0_x__ws__tls__mplex__listener
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Starting 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Started 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Starting 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Started 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Debug logging enabled via debug environment variable
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Setting up Redis connection...
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Registered protocols: ['/ipfs/id/1.0.0', '/ipfs/ping/1.0.0']
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,529 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,530 [DEBUG] [trio-websocket] Listening on Endpoint(address="172.17.0.7", port=44247, is_ssl=False)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Publishing address for transport ws: /ip4/172.17.0.7/tcp/44247/ws/p2p/12D3KooWBe2cFBYNFNmupfGcqBZT3RqoYqpPB9boJhjrvAkDwR96
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,530 [DEBUG] [trio-websocket] Listening on Endpoint(address="127.0.0.1", port=38269, is_ssl=False)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Listener ready, waiting for dialer to connect...
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,532 [DEBUG] [trio-websocket] server-0 received 155 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,532 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.Request'>
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,532 [DEBUG] [trio-websocket] server-0 sending 129 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [SEC-MULTISTREAM] Starting secure_inbound negotiation
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,532 [DEBUG] [trio-websocket] server-0 received 259 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,532 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.BytesMessage'>
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,533 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.BytesMessage'>
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,533 [DEBUG] [trio-websocket] server-0 sending 22 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,533 [DEBUG] [trio-websocket] server-0 sending 14 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [SEC-MULTISTREAM] Selected transport: TLSTransport
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-TRANSPORT] secure_inbound: Starting TLS handshake (server side)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-TRANSPORT] SSL context created
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-TRANSPORT] TLSReadWriter created, starting handshake
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=True, hostname=None)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] Starting first handshake attempt
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 213 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 213 bytes from wire
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 213 bytes to in_bio
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] Starting handshake attempt 2
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 847 bytes to wire
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,755 [DEBUG] [trio-websocket] server-0 sending 851 bytes
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,756 [DEBUG] [trio-websocket] server-0 received zero bytes (connection closed)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,756 [DEBUG] [trio-websocket] server-0 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 2026-01-23 02:42:06,761 [DEBUG] [trio-websocket] server-0 reader task finished
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Failed to upgrade incoming connection on /ip4/172.17.0.7/tcp/0/ws: 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 382, in read
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     message = await self._ws_connection.get_message()
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/trio_websocket/_impl.py", line 1207, in get_message
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     raise ConnectionClosed(self._close_reason) from None
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | trio_websocket._impl.ConnectionClosed: CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | During handling of the above exception, another exception occurred:
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 39, in read
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     return await self.stream.read(n)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 419, in read
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     raise self._handle_connection_closed_exception(e, "read")
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | libp2p.io.exceptions.IOException: WebSocket connection closed by peer during read operation: code=1006, reason=Connection closed by peer.
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | The above exception was the direct cause of the following exception:
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 657, in conn_handler
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     await self.upgrade_inbound_raw_conn(raw_conn, maddr)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 716, in upgrade_inbound_raw_conn
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     secured_conn = await self.upgrader.upgrade_security(raw_conn, False)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 64, in upgrade_security
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     return await self.security_multistream.secure_inbound(raw_conn)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/security_multistream.py", line 92, in secure_inbound
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     secure_conn = await transport.secure_inbound(conn)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/transport.py", line 233, in secure_inbound
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     await tls_reader_writer.handshake()
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 186, in handshake
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     incoming = await self.raw_connection.read(4096)
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 41, in read
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  |     raise RawConnError from error
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | libp2p.network.connection.exceptions.RawConnError
rust-v0_56_x_python-v0_x__ws__tls__mplex__listener  | Connection upgrade failed: 
 Compose Stopping Gracefully Stopping... press Ctrl+C again to force
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Stopped 

[2026-01-23 03:44:40] ERROR:   ✗ Test timed out after 180s

[2026-01-23 03:44:40] ERROR: Test timed out after 180 seconds
[2026-01-23 03:44:40] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Removing 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__dialer Removed 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Removing 
 Container rust-v0_56_x_python-v0_x__ws__tls__mplex__listener Removed 
####################################



############################
rust-v0_56_x_python-v0_x__ws__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x python-v0.x (ws, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Creating 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Created 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Creating 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Created 
Attaching to rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer, rust-v0_56_x_python-v0_x__ws__tls__yamux__listener
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Starting 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Started 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Starting 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Started 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Debug logging enabled via debug environment variable
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Setting up Redis connection...
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Connecting to Redis...
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Successfully connected to Redis on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Registered protocols: ['/ipfs/id/1.0.0', '/ipfs/ping/1.0.0']
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,636 [DEBUG] [async_service.Manager] <Manager[Swarm] flags=SRcfe>: _handle_cancelled waiting for cancellation
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,637 [DEBUG] [trio-websocket] Listening on Endpoint(address="172.17.0.25", port=34425, is_ssl=False)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,638 [DEBUG] [trio-websocket] Listening on Endpoint(address="127.0.0.1", port=36991, is_ssl=False)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Publishing address for transport ws: /ip4/172.17.0.25/tcp/34425/ws/p2p/12D3KooWQRb9Chuoe5Fzc4mR4ipbhdTtBJBdLYfcASssQ3dQ74Eq
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Listener ready, waiting for dialer to connect...
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 received 156 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.Request'>
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 sending 129 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [SEC-MULTISTREAM] Starting secure_inbound negotiation
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 sending 22 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 received 259 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.BytesMessage'>
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,640 [DEBUG] [trio-websocket] server-0 received event: <class 'wsproto.events.BytesMessage'>
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [SEC-MULTISTREAM] Selected transport: TLSTransport
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-TRANSPORT] secure_inbound: Starting TLS handshake (server side)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,641 [DEBUG] [trio-websocket] server-0 sending 14 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-TRANSPORT] SSL context created
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-TRANSPORT] TLSReadWriter created, starting handshake
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] TLSReadWriter.handshake: Starting TLS handshake (server_side=True, hostname=None)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSL object created, starting handshake loop
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] Starting first handshake attempt
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 1
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 1: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 1)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read operation completed, got 213 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Read 213 bytes from wire
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Wrote 213 bytes to in_bio
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Trying do_handshake() immediately after writing to in_bio
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Still need more data after writing to in_bio, continuing loop (attempt 1)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to continue loop, next attempt will be 2
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] Starting handshake attempt 2
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] About to call do_handshake() on attempt 2
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError caught on attempt 2: The operation did not complete (read) (_ssl.c:1032)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: Flushing 850 bytes to wire
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,837 [DEBUG] [trio-websocket] server-0 sending 854 bytes
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | [TLS-HANDSHAKE] SSLWantReadError: About to read from connection (attempt 2)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,837 [DEBUG] [trio-websocket] server-0 received zero bytes (connection closed)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,837 [DEBUG] [trio-websocket] server-0 websocket closed ConnectionClosed<CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>>
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Failed to upgrade incoming connection on /ip4/172.17.0.25/tcp/0/ws: 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 382, in read
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     message = await self._ws_connection.get_message()
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/trio_websocket/_impl.py", line 1207, in get_message
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     raise ConnectionClosed(self._close_reason) from None
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | trio_websocket._impl.ConnectionClosed: CloseReason<code=1006, name=ABNORMAL_CLOSURE, reason=None>
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | During handling of the above exception, another exception occurred:
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 39, in read
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     return await self.stream.read(n)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/websocket/connection.py", line 419, in read
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     raise self._handle_connection_closed_exception(e, "read")
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | libp2p.io.exceptions.IOException: WebSocket connection closed by peer during read operation: code=1006, reason=Connection closed by peer.
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | The above exception was the direct cause of the following exception:
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Traceback (most recent call last):
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 657, in conn_handler
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     await self.upgrade_inbound_raw_conn(raw_conn, maddr)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/swarm.py", line 716, in upgrade_inbound_raw_conn
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     secured_conn = await self.upgrader.upgrade_security(raw_conn, False)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/transport/upgrader.py", line 64, in upgrade_security
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     return await self.security_multistream.secure_inbound(raw_conn)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/security_multistream.py", line 92, in secure_inbound
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     secure_conn = await transport.secure_inbound(conn)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/transport.py", line 233, in secure_inbound
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     await tls_reader_writer.handshake()
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/security/tls/io.py", line 186, in handshake
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     incoming = await self.raw_connection.read(4096)
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |   File "/app/venv/lib/python3.13/site-packages/libp2p/network/connection/raw_connection.py", line 41, in read
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  |     raise RawConnError from error
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | libp2p.network.connection.exceptions.RawConnError
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | Connection upgrade failed: 
rust-v0_56_x_python-v0_x__ws__tls__yamux__listener  | 2026-01-23 02:42:12,839 [DEBUG] [trio-websocket] server-0 reader task finished
 Compose Stopping Gracefully Stopping... press Ctrl+C again to force
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Stopped 

[2026-01-23 03:44:40] ERROR:   ✗ Test timed out after 180s

[2026-01-23 03:44:40] ERROR: Test timed out after 180 seconds
[2026-01-23 03:44:40] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Removing 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__dialer Removed 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Stopping 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Stopped 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Removing 
 Container rust-v0_56_x_python-v0_x__ws__tls__yamux__listener Removed 
####################################



############################
rust-v0_56_x_rust-v0_56__tcp__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x rust-v0.56 (tcp, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Creating 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Created 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Creating 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Created 
Attaching to rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer, rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Starting 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Started 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Starting 
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer  | latency:
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer  |   handshake_plus_one_rtt: 2.254
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer  |   ping_rtt: 0.043
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer  |   unit: ms
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Started 
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer exited with code 0
 Compose Stopping Aborting on container exit...
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Stopped 
rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener exited with code 143
[2026-01-23 03:41:39] INFO:   ✓ Test complete
[2026-01-23 03:41:39] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Removing 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__dialer Removed 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Removing 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__mplex__listener Removed 
####################################



############################
rust-v0_56_x_rust-v0_56__tcp__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x rust-v0.56 (tcp, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Creating 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Created 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Creating 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Created 
Attaching to rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer, rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Starting 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Started 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Starting 
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer  | latency:
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer  |   handshake_plus_one_rtt: 2.416
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer  |   ping_rtt: 0.052
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer  |   unit: ms
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Started 
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer exited with code 0
 Compose Stopping Aborting on container exit...
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Stopped 
rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener exited with code 143
[2026-01-23 03:41:40] INFO:   ✓ Test complete
[2026-01-23 03:41:40] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Removing 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__dialer Removed 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Stopped 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Removing 
 Container rust-v0_56_x_rust-v0_56__tcp__tls__yamux__listener Removed 
####################################



############################
rust-v0_56_x_rust-v0_56__ws__tls__mplex_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x rust-v0.56 (ws, tls, mplex)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Creating 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Created 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Creating 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Created 
Attaching to rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer, rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Starting 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Started 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Starting 
rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer  | latency:
rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer  |   handshake_plus_one_rtt: 3.363
rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer  |   ping_rtt: 0.053
rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer  |   unit: ms
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Started 
rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer exited with code 0
 Compose Stopping Aborting on container exit...
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Stopped 
rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener exited with code 143
[2026-01-23 03:41:38] INFO:   ✓ Test complete
[2026-01-23 03:41:38] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Removing 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__dialer Removed 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Removing 
 Container rust-v0_56_x_rust-v0_56__ws__tls__mplex__listener Removed 
####################################



############################
rust-v0_56_x_rust-v0_56__ws__tls__yamux_.log
[2026-01-23 03:41:29] INFO: Running: rust-v0.56 x rust-v0.56 (ws, tls, yamux)
time="2026-01-23T03:41:29+01:00" level=warning msg="No services to build"
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Creating 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Created 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Creating 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Created 
Attaching to rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer, rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Starting 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Started 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Starting 
rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer  | latency:
rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer  |   handshake_plus_one_rtt: 6.335
rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer  |   ping_rtt: 0.315
rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer  |   unit: ms
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Started 
rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer exited with code 0
 Compose Stopping Aborting on container exit...
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Stopped 
rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener exited with code 143
[2026-01-23 03:41:36] INFO:   ✓ Test complete
[2026-01-23 03:41:36] DEBUG:   Cleaning up containers...
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Removing 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__dialer Removed 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Stopping 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Stopped 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Removing 
 Container rust-v0_56_x_rust-v0_56__ws__tls__yamux__listener Removed 
####################################



luca@r17:/srv/cache/test-run/transport-6bb0b409-034124-23-01-2026/logs$ 

- Updated Dockerfile for transport testing
- Modified ping_test.py with new test specifications
- Updated pyproject.toml configuration
- Added newsfragment for issue #1148
@acul71
Copy link
Copy Markdown
Contributor Author

acul71 commented Jan 25, 2026

Verifying this hypothesis:

The spec (line 66) says:

"This extension MAY be marked critical. The certificate MAY contain other extensions. Implementations MUST ignore non-critical extensions with unknown OIDs. Endpoints MUST abort the connection attempt if the certificate contains critical extensions that the endpoint does not understand."

So:

  • The libp2p extension (OID 1.3.6.1.4.1.53594.1.1) MAY be critical
  • If marked critical, implementations MUST understand it
  • Unknown critical extensions MUST cause connection abort

The issue could be:

  1. Python includes an additional critical extension that Rust doesn't recognize
  2. Rust doesn't properly recognize the libp2p extension even though it should

Found the root cause!

Analysis

Rust's certificate generation (lines 107-114):

let mut params = rcgen::CertificateParams::default();
params.custom_extensions.push(make_libp2p_extension(...)?);
params.self_signed(&certificate_keypair)?

Rust only adds the libp2p extension - no BasicConstraints or KeyUsage.

Rust's certificate validation (lines 219-223):

if ext.critical {
    // Endpoints MUST abort the connection attempt if the certificate
    // contains critical extensions that the endpoint does not understand.
    return Err(webpki::Error::UnsupportedCriticalExtension);
}

Rust only understands the libp2p extension. Any OTHER critical extension causes the error.

Python's certificate includes:

  1. BasicConstraints - critical=True
  2. KeyUsage - critical=True
  3. libp2p extension - critical=False

The Problem

Python marks BasicConstraints and KeyUsage as critical, but Rust's libp2p-tls doesn't understand these extensions (only the libp2p extension), so it rejects the certificate.

The Fix

In Python's certificate.py, change the critical flag to False:

# Line 184: Change critical=True to critical=False
builder = builder.add_extension(
    x509.BasicConstraints(ca=False, path_length=None), critical=False
)

# Line 200: Change critical=True to critical=False  
builder = builder.add_extension(
    x509.KeyUsage(...), critical=False
)

This is valid per the spec:

"The certificate MAY contain other extensions. Implementations MUST ignore non-critical extensions with unknown OIDs."

@acul71
Copy link
Copy Markdown
Contributor Author

acul71 commented Jan 25, 2026

Hi @seetadev and @yashksaini-coder
Sorry for making long messages in PR but it's faster this way.

About TLS - rust failing test, the python for TLS has default options enabled that are not enforced by specs
It took some time because the rust ping demo wasn't setup to show debug messages, so I had to modify the rust code. So I find out that rust couldn't understand some certificate extensions we were using by default in out python TLS core module.
Then I just modified the ping_demo.py to create a certificate without extensions that make the rust python tls test failing.
should instead be the default in the TLS core module ?

#############

Commit: 10dd5e46085efdd9daeb9d1c188a2fcdcc4f71c9
Author: yashksaini-coder yashksaini89@gmail.com
Date: Sun Sep 28 14:48:02 2025 +0530
Message: "Enhance TLS certificate handling and handshake process"

The relevant code added in libp2p/security/tls/certificate.py:

# Add Basic Constraints extension - not a CA
builder = builder.add_extension(
    x509.BasicConstraints(ca=False, path_length=None), critical=True
)

# Add Key Usage - digital signature only
builder = builder.add_extension(
    x509.KeyUsage(
        digital_signature=True,
        ...
    ),
    critical=True,
)

This is the cause of Rust interop failures - Rust's libp2p-tls rejects certificates with critical extensions it doesn't understand (it only recognizes the libp2p extension). These should be critical=False for cross-implementation compatibility.

##############

Note: @yashksaini-coder About WSS Do we have a wss example with a real certificate (Since verify_mode = ssl.CERT_NONE, certificate validation is disabled anyway)

Here's the key evidence from line 66 of the spec:

"The certificate MAY contain other extensions. Implementations MUST ignore non-critical extensions with unknown OIDs. Endpoints MUST abort the connection attempt if the certificate contains critical extensions that the endpoint does not understand."

This explains exactly what happened:

Extension Python (before) Rust behavior Result
BasicConstraints critical=True Doesn't understand it MUST abort (spec compliant)
KeyUsage critical=True Doesn't understand it MUST abort (spec compliant)
Extension Python (after fix) Rust behavior Result
BasicConstraints critical=False Doesn't understand it MUST ignore (spec compliant)
KeyUsage critical=False Doesn't understand it MUST ignore (spec compliant)

Bottom line: The spec doesn't require or forbid BasicConstraints/KeyUsage - it just says if you include extra extensions, they should be critical=False unless you know all implementations will understand them. Python's original critical=True was technically valid but caused interop failures with any implementation that doesn't parse those extensions.

################################################

What are the two cases of certificates present in ping_demo.py ?

These are two different cases, not duplicated code:

  1. Lines 247-272 - libp2p TLS security certificate (create_security_options):

    • Used for the libp2p TLS security protocol (/tls/1.0.0)
    • This is for peer identity verification - the libp2p-specific TLS handshake that includes the libp2p public key extension
    • This is where we set critical=False for Rust interop
    • Used by all TLS-based connections (tcp+tls, ws+tls)
  2. Lines 349-368 - WSS transport certificate (create_tls_server_config):

    • Used for the WSS transport layer (WebSocket Secure)
    • This is standard HTTPS-style TLS for the underlying WebSocket connection
    • Only used when transport == "wss"
    • Since verify_mode = ssl.CERT_NONE, certificate validation is disabled anyway

Key difference:

  • The first certificate goes through libp2p's certificate validation (where Rust checks for critical extensions)
  • The second is for transport-level encryption only, with validation disabled

Note: The WSS cert doesn't even add BasicConstraints or KeyUsage extensions - it only adds SubjectAlternativeName. So there's no need to apply the same fix there.

  • Submit a PR to py-libp2p to fix certificate.py with critical=False (Option 2)
  • Keep the WSS cert generation in the test client

@acul71
Copy link
Copy Markdown
Contributor Author

acul71 commented Jan 25, 2026

Running tests... (32 workers)
 ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
  → [21/131] rust-v0.56 x js-v1.x (tcp, noise, mplex)...[SUCCESS]
  → [8/131] rust-v0.56 x rust-v0.56 (ws, tls, mplex)...[SUCCESS]
  → [10/131] rust-v0.56 x rust-v0.56 (webrtc-direct)...[SUCCESS]
  → [29/131] rust-v0.56 x js-v3.x (tcp, noise, mplex)...[SUCCESS]
  → [5/131] rust-v0.56 x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [3/131] rust-v0.56 x rust-v0.56 (tcp, tls, yamux)...[SUCCESS]
  → [7/131] rust-v0.56 x rust-v0.56 (ws, tls, yamux)...[SUCCESS]
  → [4/131] rust-v0.56 x rust-v0.56 (tcp, tls, mplex)...[SUCCESS]
  → [6/131] rust-v0.56 x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [30/131] rust-v0.56 x js-v3.x (ws, noise, yamux)...[SUCCESS]
  → [28/131] rust-v0.56 x js-v3.x (tcp, noise, yamux)...[SUCCESS]
  → [31/131] rust-v0.56 x js-v3.x (ws, noise, mplex)...[SUCCESS]
  → [9/131] rust-v0.56 x rust-v0.56 (quic-v1)...[SUCCESS]
  → [25/131] rust-v0.56 x js-v2.x (tcp, noise, mplex)...[SUCCESS]
  → [2/131] rust-v0.56 x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [26/131] rust-v0.56 x js-v2.x (ws, noise, yamux)...[SUCCESS]
  → [20/131] rust-v0.56 x js-v1.x (tcp, noise, yamux)...[SUCCESS]
  → [24/131] rust-v0.56 x js-v2.x (tcp, noise, yamux)...[SUCCESS]
  → [1/131] rust-v0.56 x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [18/131] rust-v0.56 x python-v0.x (ws, tls, mplex)...[SUCCESS]
  → [23/131] rust-v0.56 x js-v1.x (ws, noise, mplex)...[SUCCESS]
  → [22/131] rust-v0.56 x js-v1.x (ws, noise, yamux)...[SUCCESS]
  → [27/131] rust-v0.56 x js-v2.x (ws, noise, mplex)...[SUCCESS]
  → [13/131] rust-v0.56 x python-v0.x (tcp, tls, yamux)...[SUCCESS]
  → [17/131] rust-v0.56 x python-v0.x (ws, tls, yamux)...[SUCCESS]
  → [16/131] rust-v0.56 x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [14/131] rust-v0.56 x python-v0.x (tcp, tls, mplex)...[SUCCESS]
  → [12/131] rust-v0.56 x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [11/131] rust-v0.56 x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [15/131] rust-v0.56 x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [19/131] rust-v0.56 x python-v0.x (quic-v1)...[SUCCESS]
  → [32/131] python-v0.x x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [36/131] python-v0.x x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [34/131] python-v0.x x rust-v0.56 (tcp, tls, yamux)...[SUCCESS]
  → [33/131] python-v0.x x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [35/131] python-v0.x x rust-v0.56 (tcp, tls, mplex)...[SUCCESS]
  → [39/131] python-v0.x x rust-v0.56 (ws, tls, mplex)...[SUCCESS]
  → [41/131] python-v0.x x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [38/131] python-v0.x x rust-v0.56 (ws, tls, yamux)...[SUCCESS]
  → [37/131] python-v0.x x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [42/131] python-v0.x x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [44/131] python-v0.x x python-v0.x (tcp, tls, mplex)...[SUCCESS]
  → [40/131] python-v0.x x rust-v0.56 (quic-v1)...[SUCCESS]
  → [43/131] python-v0.x x python-v0.x (tcp, tls, yamux)...[SUCCESS]
  → [45/131] python-v0.x x python-v0.x (wss, noise, yamux)...[SUCCESS]
  → [50/131] python-v0.x x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [46/131] python-v0.x x python-v0.x (wss, noise, mplex)...[SUCCESS]
  → [48/131] python-v0.x x python-v0.x (wss, tls, mplex)...[SUCCESS]
  → [49/131] python-v0.x x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [47/131] python-v0.x x python-v0.x (wss, tls, yamux)...[SUCCESS]
  → [51/131] python-v0.x x python-v0.x (ws, tls, yamux)...[SUCCESS]
  → [52/131] python-v0.x x python-v0.x (ws, tls, mplex)...[SUCCESS]
  → [53/131] python-v0.x x python-v0.x (quic-v1)...[SUCCESS]
  → [55/131] python-v0.x x js-v1.x (tcp, noise, mplex)...[SUCCESS]
  → [54/131] python-v0.x x js-v1.x (tcp, noise, yamux)...[SUCCESS]
  → [56/131] python-v0.x x js-v1.x (ws, noise, yamux)...[SUCCESS]
  → [68/131] js-v1.x x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [67/131] js-v1.x x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [66/131] js-v1.x x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [58/131] python-v0.x x js-v2.x (tcp, noise, yamux)...[SUCCESS]
  → [57/131] python-v0.x x js-v1.x (ws, noise, mplex)...[SUCCESS]
  → [69/131] js-v1.x x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [76/131] js-v1.x x js-v1.x (tcp, noise, yamux)...[SUCCESS]
  → [77/131] js-v1.x x js-v1.x (tcp, noise, mplex)...[SUCCESS]
  → [79/131] js-v1.x x js-v1.x (ws, noise, mplex)...[SUCCESS]
  → [78/131] js-v1.x x js-v1.x (ws, noise, yamux)...[SUCCESS]
  → [80/131] js-v1.x x js-v2.x (tcp, noise, yamux)...[SUCCESS]
  → [82/131] js-v1.x x js-v2.x (ws, noise, yamux)...[SUCCESS]
  → [81/131] js-v1.x x js-v2.x (tcp, noise, mplex)...[SUCCESS]
  → [84/131] js-v1.x x js-v3.x (tcp, noise, yamux)...[SUCCESS]
  → [59/131] python-v0.x x js-v2.x (tcp, noise, mplex)...[SUCCESS]
  → [83/131] js-v1.x x js-v2.x (ws, noise, mplex)...[SUCCESS]
  → [60/131] python-v0.x x js-v2.x (ws, noise, yamux)...[SUCCESS]
  → [86/131] js-v1.x x js-v3.x (ws, noise, yamux)...[SUCCESS]
  → [85/131] js-v1.x x js-v3.x (tcp, noise, mplex)...[SUCCESS]
  → [87/131] js-v1.x x js-v3.x (ws, noise, mplex)...[SUCCESS]
  → [61/131] python-v0.x x js-v2.x (ws, noise, mplex)...[SUCCESS]
  → [62/131] python-v0.x x js-v3.x (tcp, noise, yamux)...[SUCCESS]
  → [63/131] python-v0.x x js-v3.x (tcp, noise, mplex)...[SUCCESS]
  → [88/131] js-v2.x x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [64/131] python-v0.x x js-v3.x (ws, noise, yamux)...[SUCCESS]
  → [91/131] js-v2.x x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [90/131] js-v2.x x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [89/131] js-v2.x x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [100/131] js-v2.x x js-v1.x (ws, noise, yamux)...[SUCCESS]
  → [98/131] js-v2.x x js-v1.x (tcp, noise, yamux)...[SUCCESS]
  → [101/131] js-v2.x x js-v1.x (ws, noise, mplex)...[SUCCESS]
  → [99/131] js-v2.x x js-v1.x (tcp, noise, mplex)...[SUCCESS]
  → [102/131] js-v2.x x js-v2.x (tcp, noise, yamux)...[SUCCESS]
  → [103/131] js-v2.x x js-v2.x (tcp, noise, mplex)...[SUCCESS]
  → [104/131] js-v2.x x js-v2.x (ws, noise, yamux)...[SUCCESS]
  → [105/131] js-v2.x x js-v2.x (ws, noise, mplex)...[SUCCESS]
  → [106/131] js-v2.x x js-v3.x (tcp, noise, yamux)...[SUCCESS]
  → [107/131] js-v2.x x js-v3.x (tcp, noise, mplex)...[SUCCESS]
  → [110/131] js-v3.x x rust-v0.56 (tcp, noise, yamux)...[SUCCESS]
  → [108/131] js-v2.x x js-v3.x (ws, noise, yamux)...[SUCCESS]
  → [109/131] js-v2.x x js-v3.x (ws, noise, mplex)...[SUCCESS]
  → [111/131] js-v3.x x rust-v0.56 (tcp, noise, mplex)...[SUCCESS]
  → [112/131] js-v3.x x rust-v0.56 (ws, noise, yamux)...[SUCCESS]
  → [113/131] js-v3.x x rust-v0.56 (ws, noise, mplex)...[SUCCESS]
  → [71/131] js-v1.x x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [73/131] js-v1.x x python-v0.x (wss, noise, mplex)...[SUCCESS]
  → [70/131] js-v1.x x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [74/131] js-v1.x x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [72/131] js-v1.x x python-v0.x (wss, noise, yamux)...[SUCCESS]
  → [75/131] js-v1.x x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [65/131] python-v0.x x js-v3.x (ws, noise, mplex)...[SUCCESS]
  → [121/131] js-v3.x x js-v1.x (tcp, noise, mplex)...[SUCCESS]
  → [122/131] js-v3.x x js-v1.x (ws, noise, yamux)...[SUCCESS]
  → [120/131] js-v3.x x js-v1.x (tcp, noise, yamux)...[SUCCESS]
  → [123/131] js-v3.x x js-v1.x (ws, noise, mplex)...[SUCCESS]
  → [127/131] js-v3.x x js-v2.x (ws, noise, mplex)...[SUCCESS]
  → [124/131] js-v3.x x js-v2.x (tcp, noise, yamux)...[SUCCESS]
  → [125/131] js-v3.x x js-v2.x (tcp, noise, mplex)...[SUCCESS]
  → [128/131] js-v3.x x js-v3.x (tcp, noise, yamux)...[SUCCESS]
  → [126/131] js-v3.x x js-v2.x (ws, noise, yamux)...[SUCCESS]
  → [131/131] js-v3.x x js-v3.x (ws, noise, mplex)...[SUCCESS]
  → [129/131] js-v3.x x js-v3.x (tcp, noise, mplex)...[SUCCESS]
  → [130/131] js-v3.x x js-v3.x (ws, noise, yamux)...[SUCCESS]
  → [92/131] js-v2.x x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [93/131] js-v2.x x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [94/131] js-v2.x x python-v0.x (wss, noise, yamux)...[SUCCESS]
  → [97/131] js-v2.x x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [96/131] js-v2.x x python-v0.x (ws, noise, yamux)...[SUCCESS]
  → [95/131] js-v2.x x python-v0.x (wss, noise, mplex)...[SUCCESS]
  → [114/131] js-v3.x x python-v0.x (tcp, noise, yamux)...[SUCCESS]
  → [115/131] js-v3.x x python-v0.x (tcp, noise, mplex)...[SUCCESS]
  → [116/131] js-v3.x x python-v0.x (wss, noise, yamux)...[SUCCESS]
  → [119/131] js-v3.x x python-v0.x (ws, noise, mplex)...[SUCCESS]
  → [117/131] js-v3.x x python-v0.x (wss, noise, mplex)...[SUCCESS]
  → [118/131] js-v3.x x python-v0.x (ws, noise, yamux)...[SUCCESS]

@seetadev seetadev merged commit 8524fbf into main Jan 25, 2026
38 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants