# Week 20 — Update ## TL;DR Started upstreaming QUIC interop support for `eth-p2p-z` into the libp2p test ecosystem by adding a new interop target to the `libp2p/test-plans` repository. This makes it possible to run automated QUIC interoperability tests between `eth-p2p-z` and other libp2p implementations. PR: https://github.com/libp2p/test-plans/pull/694 --- ## Test plan behavior - Add `eth-p2p-z` as a QUIC-capable libp2p node type in the test plans: - Uses the same interface/contract as other language implementations (go, rust, js, etc.). - Hooks into the existing QUIC topology and round-trip tests. - Ensure the new target can: - Participate as both dialer and listener in QUIC connections. - Exchange basic ping-style traffic and protocol messages as required by the test cases. - Cleanly open/close connections and streams so the harness can assert success/failure. - Align CLI / configuration shape with existing runners so the harness can: - Control listen addresses and ports. - Toggle transports (enable QUIC, optionally disable others). - Pass in test-case-specific parameters if needed. --- ## Per-node configuration & invariants For each `eth-p2p-z` node launched by the test harness: - Configuration surface: - `--listen-addr` / `--multiaddr`: specifies QUIC listen endpoint. - `--peer-id` / key configuration: deterministic identity for reproducible tests. - `--enable-quic`: explicit transport flag (where applicable). - Optional knobs for logging / debug to help inspect interop failures. - Invariants within the test environment: - Node must be able to start and reach “ready” state within a bounded time (startup timeout). - Node must expose its observed multiaddrs back to the harness so other peers can dial it. - When the test harness requests shutdown, the node must terminate cleanly (no hanging processes). - Exit codes are meaningful: - `0`: test-run success from the node’s perspective. - Non-zero: indicates failure that the harness can surface. --- ## Internal APIs / harness integration On the `libp2p/test-plans` side, the PR wires an `eth-p2p-z` runner into the existing test framework: - `eth_p2p_z.spawn(config) -> NodeHandle` - Spawns an `eth-p2p-z` binary/container with the proper flags for QUIC interop. - Waits until the node is reachable on the configured multiaddr. - `eth_p2p_z.get_multiaddrs(handle) -> [Multiaddr]` - Returns the addresses to be used by other nodes in the test plan. - `eth_p2p_z.stop(handle)` - Sends a shutdown signal and waits for clean termination. These entry points are then plugged into existing QUIC-focused test scenarios, so `eth-p2p-z` can be used as: - A dialer against other libp2p QUIC implementations. - A listener that other implementations connect to for handshake/stream tests. --- ## Example pseudocode ```pseudo function setup_eth_p2p_z_node(role, config): args = [ "--listen-addr", config.listen_addr, "--enable-quic", "--peer-key", config.key_path, ] if role == "dialer": args.append("--dial-target") args.append(config.target_multiaddr) handle = spawn_process("eth-p2p-z", args) wait_until_ready(handle, timeout=config.startup_timeout) return handle function run_quic_interop_scenario(): listener = setup_eth_p2p_z_node("listener", listener_config) listener_addrs = get_multiaddrs(listener) dialer = setup_other_impl_node("dialer", target=listener_addrs) run_quic_roundtrip_test(dialer, listener) stop_node(dialer) stop_node(listener) ``` --- ## Next - Iterate on the `eth-p2p-z` test target based on feedback from libp2p maintainers and interop runs. --- ## References - PR: https://github.com/libp2p/test-plans/pull/694