mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2026-02-12 16:10:57 +00:00
Add interoperability test for py-libp2p and js-libp2p with enhanced logging
This commit is contained in:
81
tests/interop/js_libp2p/README.md
Normal file
81
tests/interop/js_libp2p/README.md
Normal file
@ -0,0 +1,81 @@
|
||||
# py-libp2p and js-libp2p Interoperability Tests
|
||||
|
||||
This repository contains interoperability tests for py-libp2p and js-libp2p using the /ipfs/ping/1.0.0 protocol. The goal is to verify compatibility in stream multiplexing, protocol negotiation, ping handling, transport layer, and multiaddr parsing.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
- js_node/ping.js: JavaScript implementation of a ping server and client using libp2p.
|
||||
- py_node/ping.py: Python implementation of a ping server and client using py-libp2p.
|
||||
- scripts/run_test.sh: Shell script to automate running the server and client for testing.
|
||||
- README.md: This file.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.8+ with `py-libp2p` and dependencies (`pip install libp2p trio cryptography multiaddr`).
|
||||
- Node.js 16+ with `libp2p` dependencies (`npm install @libp2p/core @libp2p/tcp @chainsafe/libp2p-noise @chainsafe/libp2p-yamux @libp2p/ping @libp2p/identify @multiformats/multiaddr`).
|
||||
- Bash shell for running `run_test.sh`.
|
||||
|
||||
## Running Tests
|
||||
|
||||
1. Change directory:
|
||||
|
||||
```
|
||||
cd tests/interop/js_libp2p
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
|
||||
```
|
||||
For JavaScript: cd js_node && npm install && cd ...
|
||||
```
|
||||
|
||||
3. Run the automated test:
|
||||
|
||||
For Linux and Mac users:
|
||||
|
||||
```
|
||||
chmod +x scripts/run_test.sh
|
||||
./scripts/run_test.sh
|
||||
```
|
||||
|
||||
For Windows users:
|
||||
|
||||
```
|
||||
.\scripts\run_test.ps1
|
||||
```
|
||||
|
||||
This starts the Python server on port 8000 and runs the JavaScript client to send 5 pings.
|
||||
|
||||
## Debugging
|
||||
|
||||
- Logs are saved in py_node/py_server.log and js_node/js_client.log.
|
||||
- Check for:
|
||||
- Successful connection establishment.
|
||||
- Protocol negotiation (/ipfs/ping/1.0.0).
|
||||
- 32-byte payload echo in server logs.
|
||||
- RTT and payload hex in client logs.
|
||||
|
||||
## Test Plan
|
||||
|
||||
### The test verifies:
|
||||
|
||||
- Stream Multiplexer Compatibility: Yamux is used and negotiates correctly.
|
||||
- Multistream Protocol Negotiation: /ipfs/ping/1.0.0 is selected via multistream-select.
|
||||
- Ping Protocol Handler: Handles 32-byte payloads per the libp2p ping spec.
|
||||
- Transport Layer Support: TCP is used; WebSocket support is optional.
|
||||
- Multiaddr Parsing: Correctly resolves multiaddr strings.
|
||||
- Logging: Includes peer ID, RTT, and payload hex for debugging.
|
||||
|
||||
## Current Status
|
||||
|
||||
### Working:
|
||||
|
||||
- TCP transport and Noise encryption are functional.
|
||||
- Yamux multiplexing is implemented in both nodes.
|
||||
- Multiaddr parsing works correctly.
|
||||
- Logging provides detailed debug information.
|
||||
|
||||
## Not Working:
|
||||
|
||||
- Ping protocol handler fails to complete pings (JS client reports "operation aborted").
|
||||
- Potential issues with stream handling or protocol negotiation.
|
||||
Reference in New Issue
Block a user