diff options
| author | Gabriel Schneider <[email protected]> | 2026-10-01 09:54:20 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 10:16:45 -0300 |
| commit | caa8ed077e8b9b67d18f18b3ec46891bd8d310a7 (patch) | |
| tree | 05c09ee65e1a68aacffd90b137690d5b39ed9457 /test/fs.py | |
| parent | eda60572013d046d08e253e5847a0ba588c10339 (diff) | |
| download | pardes-caa8ed077e8b9b67d18f18b3ec46891bd8d310a7.tar.gz pardes-caa8ed077e8b9b67d18f18b3ec46891bd8d310a7.zip | |
A command line runs when its newline comes, or at its open's close, never because a write was short: a long line cut by a mount is one line
A write shorter than its message, and not a multiple of 4096, was taken
as whole, its tail a line. 9ns cuts a FUSE write of up to 512 KiB into
65512-byte Twrites, the last one short, so a 600 KiB `Edit ,c/.../`
arrived cut and its tail ran as an unknown control message; the 1 MiB
refusal failed the same way. Each open now holds a partial line until
its newline, or its release, which ends the last line; an Edit block is
whole when it closes, as before. A name write with a NUL still fails
its write at once. selfmount writes a 600 KiB Edit line and a 1.1 MiB
line through a real 9ns mount; building.typ says how lines are cut.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'test/fs.py')
| -rw-r--r-- | test/fs.py | 15 |
1 files changed, 6 insertions, 9 deletions
@@ -1034,20 +1034,17 @@ def test(binary, quic=False): with Client(address, msize=256) as small: assert set(small.list('/os' + str(listing))) == { f'entry-{number:02}' for number in range(24)} - # 64 KiB frames: a ctl line with no newline, whole in its one - # Twrite, runs with it however long -- the cutoff for a write - # that may go on is the frame the client asked for, less 24. + # 64 KiB frames: a ctl line with no newline is held whatever the + # size of its write -- a mount cuts lines anywhere -- and runs at + # the close, its failure then in the log. with Client(address, msize=65536) as big: assert big.msize == 65536 ctl = big.open('/pane/1/ctl', 1) line = b'bogus' + b'x' * 20000 - try: - big.rpc(118, struct.pack('<IQI', ctl, 0, len(line)) + line) - except OSError: - pass # refused with its write (a line over 1024 bytes), not held - else: - raise AssertionError('a whole 20000-byte line waited for a newline') + big.rpc(118, struct.pack('<IQI', ctl, 0, len(line)) + line) + assert b'ctl: unknown control message' not in client.read('/log') big.close(ctl) + assert b'ctl: unknown control message' in client.read('/log') frozen = client.open('/screen') before = bytearray(client.read_fid(frozen, count=31)) |
