libp2p / libp2p/unified-testing

rust-v0.53 WebRTC-direct connection timeout

Open
#18 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

rust
Dominant language
Shell
Stars
7
Forks
19
PR merge metrics
No merged PRs in 30d

Description

**Repo:** [libp2p/rust-libp2p](https://github.com/libp2p/rust-libp2p)
**Source:** local build (`images/rust/v0.53`, based on commit `b7914e407da34c99fb76dcc300b3d44b9af97fac`)
**Transport:** webrtc-direct

## Summary

rust-v0.53 times out when establishing WebRTC-direct connections with go-v0.38 (as native dialer) and with rust-v0.53 itself (as WASM/Chromium dialer). Both containers start and connect to Redis via the proxy, but no WebRTC connection is ever established. The tests hit the 180-second timeout with no output from either the dialer or listener beyond initial startup.

## Failing tests (2)

- `rust-v0.53 x go-v0.38 (webrtc-direct)` — rust-v0.53 native dials go-v0.38
- `chromium-rust-v0.53 x rust-v0.53 (webrtc-direct)` — rust-v0.53 WASM (Chromium) dials rust-v0.53 native

## Error output

Both tests show identical behavior — timeout with no connection:

```
proxy | redis-proxy: listening on :6379, upstream=transport-redis:6379, test_key=b29a1a36
proxy | redis-proxy: new connection from 172.18.0.5:37462
listener | My multiaddr is: [/ip4/172.18.0.5/udp/46178/webrtc-direct/certhash/uEiBR1dWw...]
proxy | redis-proxy: new connection from 172.18.0.6:49296

[180 seconds of silence]

ERROR: ✗ Test timed out after 180s
```

The go listener publishes its multiaddr. The rust dialer connects to the proxy. But no WebRTC signaling or connection attempt appears in the logs.

## Root cause analysis

This is distinct from the `rust-v056-webrtc-direct-srtp-panic.md` bug (which is a SRTP key derivation crash in v0.56). Here, rust-v0.53 simply never initiates the WebRTC connection.

Possible causes:
- rust-v0.53's WebRTC-direct dialer may fail to parse the listener's multiaddr from Redis (legacy key format through proxy)
- The ICE candidate exchange may fail silently in the legacy Redis key translation
- The WASM (Chromium) build may have additional WebRTC API limitations

Note that rust-v0.53 is a legacy implementation connecting through the Redis proxy. The WebRTC-direct multiaddr includes a certhash component which the dialer must retrieve from Redis to initiate the connection. If the proxy's key translation loses or corrupts the certhash data, the dialer would silently fail to connect.

## Notes

- rust-v0.53 is `legacy: true` and uses the Redis proxy for coordination
- Other rust-v0.53 webrtc-direct tests may also fail but were not included in this filtered test run
- The go-v0.38 listener starts correctly and publishes its multiaddr — the issue is on the dialer side
- No proxy hostname issues — correct `proxy-` format used

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the legacy implementation under images/rust/v0.53 and trace the Redis proxy coordination used by the two failing tests: rust-v0.53 x go-v0.38 and chromium-rust-v0.53 x rust-v0.53. Check how the listener multiaddr and certhash move through the proxy; done means both tests establish WebRTC-direct connections without timing out.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, redis, rust, wasm
Domain
distributed-systems, networking, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.