summaryrefslogtreecommitdiff
path: root/9ns/test/adv_bridge_hostile.py
diff options
context:
space:
mode:
Diffstat (limited to '9ns/test/adv_bridge_hostile.py')
-rwxr-xr-x9ns/test/adv_bridge_hostile.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/9ns/test/adv_bridge_hostile.py b/9ns/test/adv_bridge_hostile.py
index d353541..f676d2f 100755
--- a/9ns/test/adv_bridge_hostile.py
+++ b/9ns/test/adv_bridge_hostile.py
@@ -62,7 +62,8 @@ name_huge / has an entry with a 60000-byte name
name_dots / lists "." and ".." too
rerror_big Twalk to nope: Rerror with 65535 bytes of text
extra_reply Rread on /f: an unsolicited Rclunk (tag 9) precedes the real reply
-never Tread on /f: never reply (hang)
+never Tread on /f: never reply (hang); the server stops reading, so a Tflush is never seen
+never_flush Tread on /f: never reply, but keep serving: log every Tflush and answer Rflush
close_mid Tread on /f: close the socket without replying
renegotiate Tread on /f: an unsolicited Rversion precedes the real reply
length_max Tstat on /f: length = 2**64-1
@@ -142,6 +143,9 @@ class Server:
parent.children[name] = n
return n
+ def log(self, text):
+ print(text, flush=True)
+
# -- framing ---------------------------------------------------------
def frame(self, typ, tag, body):
return s32(7 + len(body)) + s8(typ) + s16(tag) + body
@@ -196,6 +200,8 @@ class Server:
self.fids[fid] = [self.root, False]
return self.frame(Rattach, tag, self.root.qid(self))
if typ == Tflush:
+ oldtag = r.u16()
+ self.log('Tflush tag=%d oldtag=%d' % (tag, oldtag))
return self.frame(Rflush, tag, b'')
if typ == Twalk:
fid, newfid, nw = r.u32(), r.u32(), r.u16()
@@ -292,6 +298,9 @@ class Server:
if m == 'never':
time.sleep(3600)
return None
+ if m == 'never_flush':
+ self.log('Tread tag=%d fid=%d hang' % (tag, fid))
+ return b''
if m == 'close_mid':
return None
if m == 'renegotiate':