Minecraft-Friends-AI-ZeroGPU / tests /test_voyager_processes.py
Erinaldordso's picture
Repair Voyager deadlines and connect both bots to Mine
b31ff59 verified
Raw History Blame Contribute Delete
1.47 kB
"""A killed runner cannot leave a child holding its Mineflayer port."""
import os
import socket
import subprocess
import sys
import time
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from voyager_processes import stop_runner
@pytest.mark.skipif(os.name != "posix", reason="POSIX runner sessions")
def test_orphan_port_is_released_without_touching_the_parent():
child = "import socket,time; s=socket.socket(); s.bind(('127.0.0.1',0)); s.listen(); print(s.getsockname()[1],flush=True); time.sleep(30)"
leader = "import subprocess,sys,os; subprocess.Popen([sys.executable,'-u','-c',sys.argv[1]]); os._exit(75)"
proc = subprocess.Popen([sys.executable, "-u", "-c", leader, child],
stdout=subprocess.PIPE, text=True, start_new_session=True)
port = int(proc.stdout.readline())
proc.wait(timeout=5)
try:
with socket.create_connection(("127.0.0.1", port), timeout=1):
pass
stop_runner(proc)
deadline = time.monotonic() + 1
while True:
try:
connection = socket.create_connection(("127.0.0.1", port), timeout=0.1)
connection.close()
except OSError:
break
assert time.monotonic() < deadline, "orphan still holds the Mineflayer port"
time.sleep(0.01)
finally:
stop_runner(proc)