Merged revisions 74217,74224 via svnmerge from

svn+ssh://svn.python.org/python/branches/py3k

........
  r74217 | jack.diederich | 2009-07-27 00:23:04 +0200 (Mo, 27 Jul 2009) | 1 line

  - fix issue #6106, Telnet.process_rawq default handling of WILL/WONT/DO/DONT
........
  r74224 | jack.diederich | 2009-07-27 11:03:14 +0200 (Mo, 27 Jul 2009) | 1 line

  - belated ACK for issue #6106
........
This commit is contained in:
Georg Brandl 2009-08-13 08:39:33 +00:00
parent 01a30523f9
commit e6700e9a04
4 changed files with 88 additions and 37 deletions

View File

@ -459,7 +459,7 @@ class Telnet:
# unless we did a WILL/DO before.
self.msg('IAC %d not recognized' % ord(c))
elif len(self.iacseq) == 2:
cmd = self.iacseq[1]
cmd = self.iacseq[1:2]
self.iacseq = b''
opt = c
if cmd in (DO, DONT):

View File

@ -3,6 +3,8 @@ import threading
import telnetlib
import time
import queue
import sys
import io
from unittest import TestCase
from test import support
@ -304,6 +306,20 @@ class nego_collector(object):
self.sb_seen += sb_data
tl = telnetlib
class TelnetDebuglevel(tl.Telnet):
''' Telnet-alike that captures messages written to stdout when
debuglevel > 0
'''
_messages = ''
def msg(self, msg, *args):
orig_stdout = sys.stdout
sys.stdout = fake_stdout = io.StringIO()
tl.Telnet.msg(self, msg, *args)
self._messages += fake_stdout.getvalue()
sys.stdout = orig_stdout
return
class OptionTests(TestCase):
setUp = _read_setUp
tearDown = _read_tearDown
@ -363,6 +379,36 @@ class OptionTests(TestCase):
self.assertEqual(b'', telnet.read_sb_data())
nego.sb_getter = None # break the nego => telnet cycle
def _test_debuglevel(self, data, expected_msg):
""" helper for testing debuglevel messages """
self.setUp()
self.dataq.put(data)
telnet = TelnetDebuglevel(HOST, self.port)
telnet.set_debuglevel(1)
self.dataq.join()
txt = telnet.read_all()
self.assertTrue(expected_msg in telnet._messages,
msg=(telnet._messages, expected_msg))
self.tearDown()
def test_debuglevel(self):
# test all the various places that self.msg(...) is called
given_a_expect_b = [
# Telnet.fill_rawq
(b'a', ": recv b''\n"),
# Telnet.process_rawq
(tl.IAC + bytes([88]), ": IAC 88 not recognized\n"),
(tl.IAC + tl.DO + bytes([1]), ": IAC DO 1\n"),
(tl.IAC + tl.DONT + bytes([1]), ": IAC DONT 1\n"),
(tl.IAC + tl.WILL + bytes([1]), ": IAC WILL 1\n"),
(tl.IAC + tl.WONT + bytes([1]), ": IAC WONT 1\n"),
# Telnet.write
# XXX, untested
]
for a, b in given_a_expect_b:
self._test_debuglevel([a, EOF_sigil], b)
return
def test_main(verbose=None):
support.run_unittest(GeneralTests, ReadTests, OptionTests)

View File

@ -708,6 +708,7 @@ Michael Stone
Ken Stox
Dan Stromberg
Daniel Stutzbach
Pal Subbiah
Nathan Sullivan
Mark Summerfield
Hisao Suzuki
@ -800,6 +801,7 @@ Jean-Claude Wippler
Lars Wirzenius
Chris Withers
Stefan Witzel
Irek Wlizlo
David Wolever
Klaus-Juergen Wolf
Dan Wolfe

View File

@ -45,6 +45,9 @@ C-API
Library
-------
- Issue #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT
DO/DONT correctly.
- Issue #6126: Fixed pdb command-line usage.
- Issue #6629: Fix a data corruption issue in the new I/O library, which could