summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 17:51:35 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commit7de6d8304f563023c4a5fa9f8223f9ed626c5f91 (patch)
treec406339964e6af5383d49cf8a23fe26dd8c634fb /test
parent9f6de14934df03c2e3d521af78ce2e5d7362cc88 (diff)
downloadpardes-7de6d8304f563023c4a5fa9f8223f9ed626c5f91.tar.gz
pardes-7de6d8304f563023c4a5fa9f8223f9ed626c5f91.zip
Sixteen 9P connections, and the next one is told there is no room instead of being reset
Four slots ran out under scripts plus a mount, and the fifth client was closed without a word, which through a mount looks exactly like a dead session. pardes now serves sixteen, and builds against cloud9 09b77cf, whose runner answers the Tversion of a client it cannot seat with an Rerror "too many connections" and tells pardes, which logs `err - 9p: too many connections`. QUIC keeps its own sixteen and still just closes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'test')
-rw-r--r--test/fs.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/fs.py b/test/fs.py
index 72c52b7e..62e78655 100644
--- a/test/fs.py
+++ b/test/fs.py
@@ -371,6 +371,22 @@ def discovery(binary, embedded=False):
assert f'err {unsaved} ctl: Save /nonexistent-pardes-dir/x.txt: '.encode() in client.read('/log'), client.read('/log')
client.remove(f'/pane/{unsaved}')
+ # Sixteen connections fill the slots; the next is told why.
+ extra = [Client(address) for _ in range(15)]
+ try:
+ try:
+ Client(address).__exit__()
+ raise AssertionError('a seventeenth connection was served')
+ except OSError as refused:
+ assert 'too many connections' in str(refused), refused
+ finally:
+ for other in extra:
+ other.__exit__()
+ deadline = time.monotonic() + 5
+ while b'err - 9p: too many connections' not in client.read('/log'):
+ assert time.monotonic() < deadline, client.read('/log')
+ time.sleep(.01)
+
print('9P discovery: listing/stat/find are inert; new, remove, look, exec, name, sel, log, ctl lock, focus, the ctl split and commands behave')