Initial commit: multi-peer torrent download engine
Reactor/loop-pool engine with TCP/µTP/MSE transports, per-connection pipelining, priority-driven piece selection with endgame, and the Python FFI test harness. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
commit
d8208685a2
55 changed files with 9989 additions and 0 deletions
379
interop/docker-compose.yml
Normal file
379
interop/docker-compose.yml
Normal file
|
|
@ -0,0 +1,379 @@
|
|||
name: torrent-peer-interop
|
||||
|
||||
services:
|
||||
fixture:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- >
|
||||
python3 /work/interop/make_fixture.py --out /fixture --size ${FIXTURE_SIZE:-32M}
|
||||
&& touch /tmp/fixture-ready
|
||||
&& tail -f /dev/null
|
||||
volumes:
|
||||
- fixture:/fixture
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/fixture-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 30
|
||||
|
||||
seed-libtorrent-plain:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_libtorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6881"
|
||||
- --mode
|
||||
- plain
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 30
|
||||
|
||||
seed-libtorrent-mse:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_libtorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6882"
|
||||
- --mode
|
||||
- mse
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 30
|
||||
|
||||
seed-libtorrent-utp:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_libtorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6883"
|
||||
- --mode
|
||||
- utp
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 30
|
||||
|
||||
seed-libtorrent-utp-mse:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_libtorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6884"
|
||||
- --mode
|
||||
- utp-mse
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 30
|
||||
|
||||
seed-transmission:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_transmission.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --peer-port
|
||||
- "6891"
|
||||
- --rpc-port
|
||||
- "9091"
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-transmission-utp:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_transmission.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --peer-port
|
||||
- "6896"
|
||||
- --rpc-port
|
||||
- "9092"
|
||||
- --utp
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-transmission-mse:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_transmission.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --peer-port
|
||||
- "6897"
|
||||
- --rpc-port
|
||||
- "9093"
|
||||
- --encryption
|
||||
- required
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-aria2:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_aria2.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6892"
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-qbittorrent:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_qbittorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6893"
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-deluge:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_deluge.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6894"
|
||||
- --daemon-port
|
||||
- "58846"
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
seed-rtorrent:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
fixture:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/seed_rtorrent.py
|
||||
- --torrent
|
||||
- /fixture/test.torrent
|
||||
- --data
|
||||
- /fixture
|
||||
- --port
|
||||
- "6895"
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
networks:
|
||||
- torrent_lab
|
||||
healthcheck:
|
||||
test: ["CMD", "test", "-f", "/tmp/seed-ready"]
|
||||
interval: 2s
|
||||
timeout: 1s
|
||||
retries: 45
|
||||
|
||||
runner:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: interop/Dockerfile
|
||||
depends_on:
|
||||
seed-libtorrent-plain:
|
||||
condition: service_healthy
|
||||
seed-libtorrent-mse:
|
||||
condition: service_healthy
|
||||
seed-libtorrent-utp:
|
||||
condition: service_healthy
|
||||
seed-libtorrent-utp-mse:
|
||||
condition: service_healthy
|
||||
seed-transmission:
|
||||
condition: service_healthy
|
||||
seed-transmission-utp:
|
||||
condition: service_healthy
|
||||
seed-transmission-mse:
|
||||
condition: service_healthy
|
||||
seed-aria2:
|
||||
condition: service_healthy
|
||||
seed-qbittorrent:
|
||||
condition: service_healthy
|
||||
seed-deluge:
|
||||
condition: service_healthy
|
||||
seed-rtorrent:
|
||||
condition: service_healthy
|
||||
command:
|
||||
- python3
|
||||
- /work/interop/run_matrix.py
|
||||
- --fixture
|
||||
- /fixture
|
||||
- --clients
|
||||
- /work/interop/clients.json
|
||||
- --results
|
||||
- /results/results.json
|
||||
- --timeout
|
||||
- ${TEST_TIMEOUT:-90}
|
||||
volumes:
|
||||
- fixture:/fixture:ro
|
||||
- ./results:/results
|
||||
networks:
|
||||
- torrent_lab
|
||||
|
||||
volumes:
|
||||
fixture:
|
||||
|
||||
networks:
|
||||
torrent_lab:
|
||||
internal: true
|
||||
Loading…
Add table
Add a link
Reference in a new issue