diff options
Diffstat (limited to '9ns/test/adv_bridge_hostile.py')
| -rwxr-xr-x | 9ns/test/adv_bridge_hostile.py | 11 |
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': |
