summaryrefslogtreecommitdiff
path: root/test/fs.py
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-14 21:26:47 -0300
committerGabriel Schneider <[email protected]>2026-09-15 17:24:42 -0300
commita624a56e289e4a02a411f83741f0f2c9fc0f0b2e (patch)
treeb87e3ca10dd1c4417112164f792b5da1e26de0a6 /test/fs.py
parent95681ff7017b8a9e4c8f9fa6a7371d1233432f2f (diff)
downloadpardes-a624a56e289e4a02a411f83741f0f2c9fc0f0b2e.tar.gz
pardes-a624a56e289e4a02a411f83741f0f2c9fc0f0b2e.zip
Add Linux Tty9p mounted terminals and forward raw TTY keys
Diffstat (limited to 'test/fs.py')
-rw-r--r--test/fs.py40
1 files changed, 39 insertions, 1 deletions
diff --git a/test/fs.py b/test/fs.py
index 85cf6855..2ffd5098 100644
--- a/test/fs.py
+++ b/test/fs.py
@@ -122,6 +122,41 @@ def execute(client, serial, command):
client.write(f'/self/pane/{serial}/event', f'MX0 {len(text)}\n'.encode())
+def discovery(binary):
+ with tempfile.TemporaryDirectory(prefix='pardes-discovery-') as directory:
+ with session(binary, Path(directory), 'discovery') as (client, _):
+ before = client.read('/self/index')
+ entries = client.list('/self/new')
+ assert {'README', 'ctl', 'body', 'addr', 'data', 'event'} <= set(entries)
+ guide = client.read('/self/README')
+ assert guide == client.read('/self/new/README')
+ assert b'Each open creates a separate pane' in guide
+ # Walk and stat each entry, as a filesystem browser does, without open.
+ from ninep import string
+ for name in entries:
+ client.fid += 1
+ fid = client.fid
+ client.rpc(110, struct.pack('<IIH', 1, fid, 3) +
+ string('self') + string('new') + string(name))
+ try:
+ client.rpc(124, struct.pack('<I', fid))
+ finally:
+ client.close(fid)
+ assert client.read('/self/index') == before, 'browsing created a pane'
+ first = int(client.read('/self/new/ctl').split()[0])
+ second = int(client.read('/self/new/ctl').split()[0])
+ assert first != second
+ client.write(f'/self/pane/{first}/body', b'first pane', truncate=True)
+ assert client.read(f'/self/pane/{first}/body') == b'first pane'
+ assert client.read(f'/self/pane/{second}/body') == b''
+ before_ids = set(client.list('/self/pane'))
+ client.write('/self/new/body', b'created with text', truncate=True)
+ made = set(client.list('/self/pane')) - before_ids
+ assert len(made) == 1
+ assert client.read('/self/pane/' + made.pop() + '/body') == b'created with text'
+ print('9P discovery: listing/stat/README are inert; opens create independent panes')
+
+
def test(binary, quic=False):
started = time.monotonic()
for options, message in [
@@ -549,6 +584,9 @@ def quic_test(binary):
if __name__ == '__main__':
+ if len(sys.argv) == 3 and sys.argv[2] == '--discovery':
+ discovery(str(Path(sys.argv[1]).resolve()))
+ raise SystemExit(0)
if len(sys.argv) not in [2, 3] or (len(sys.argv) == 3 and sys.argv[2] != '--quic'):
- raise SystemExit('usage: fs.py <pardes> [--quic]')
+ raise SystemExit('usage: fs.py <pardes> [--quic | --discovery]')
test(str(Path(sys.argv[1]).resolve()), quic=len(sys.argv) == 3)