annotate Lib/test/test_telnetlib.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents f48f302f54aa
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 import socket
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
2 import selectors
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import telnetlib
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import time
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
5 import contextlib
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 from unittest import TestCase
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
8 from test import support
61073
493bb4585e38 Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 58415
diff changeset
9 threading = support.import_module('threading')
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
11 HOST = support.HOST
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
13 def server(evt, serv):
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 serv.listen(5)
44999
7c02182e2979 Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42532
diff changeset
15 evt.set()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 conn, addr = serv.accept()
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
18 conn.close()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 except socket.timeout:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 pass
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 serv.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 class GeneralTests(TestCase):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 def setUp(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 self.evt = threading.Event()
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46161
diff changeset
28 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
29 self.sock.settimeout(60) # Safety net. Look issue 11812
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46370
diff changeset
30 self.port = support.bind_port(self.sock)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
31 self.thread = threading.Thread(target=server, args=(self.evt,self.sock))
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
32 self.thread.setDaemon(True)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
33 self.thread.start()
44999
7c02182e2979 Merged revisions 60284-60349 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 42532
diff changeset
34 self.evt.wait()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 def tearDown(self):
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
37 self.thread.join()
71744
e86a12167cf5 Silence altered execution state warnings from test_telnetlib involving threads.
Brett Cannon <brett@python.org>
parents: 68257
diff changeset
38 del self.thread # Clear out any dangling Thread objects.
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 def testBasic(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 # connects
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46161
diff changeset
42 telnet = telnetlib.Telnet(HOST, self.port)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 def testTimeoutDefault(self):
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
46 self.assertTrue(socket.getdefaulttimeout() is None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
47 socket.setdefaulttimeout(30)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
48 try:
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
49 telnet = telnetlib.Telnet(HOST, self.port)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
50 finally:
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
51 socket.setdefaulttimeout(None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 self.assertEqual(telnet.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 def testTimeoutNone(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 # None, having other default
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
57 self.assertTrue(socket.getdefaulttimeout() is None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 socket.setdefaulttimeout(30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 try:
46370
2e917b0c8f6e Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46161
diff changeset
60 telnet = telnetlib.Telnet(HOST, self.port, timeout=None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 finally:
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
62 socket.setdefaulttimeout(None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
63 self.assertTrue(telnet.sock.gettimeout() is None)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
64 telnet.sock.close()
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
65
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
66 def testTimeoutValue(self):
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
67 telnet = telnetlib.Telnet(HOST, self.port, timeout=30)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 self.assertEqual(telnet.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
71 def testTimeoutOpen(self):
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
72 telnet = telnetlib.Telnet()
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
73 telnet.open(HOST, self.port, timeout=30)
47559
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
74 self.assertEqual(telnet.sock.gettimeout(), 30)
2925b568aacc Merged revisions 63562,63570,63728,63734,63784,63788,63802,63817,63827,63839,63887,63975,63998 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
75 telnet.sock.close()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
85400
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
77 def testGetters(self):
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
78 # Test telnet getter methods
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
79 telnet = telnetlib.Telnet(HOST, self.port, timeout=30)
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
80 t_sock = telnet.sock
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
81 self.assertEqual(telnet.get_socket(), t_sock)
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
82 self.assertEqual(telnet.fileno(), t_sock.fileno())
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
83 telnet.sock.close()
1b42e483e520 #18833: add a test for test_telnetlib. Patch by Alex Volkov.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 78143
diff changeset
84
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
85 class SocketStub(object):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
86 ''' a socket proxy that re-defines sendall() '''
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
87 def __init__(self, reads=()):
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
88 self.reads = list(reads) # Intentionally make a copy.
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
89 self.writes = []
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
90 self.block = False
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
91 def sendall(self, data):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
92 self.writes.append(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
93 def recv(self, size):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
94 out = b''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
95 while self.reads and len(out) < size:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
96 out += self.reads.pop(0)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
97 if len(out) > size:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
98 self.reads.insert(0, out[size:])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
99 out = out[:size]
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
100 return out
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
101
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
102 class TelnetAlike(telnetlib.Telnet):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
103 def fileno(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
104 raise NotImplementedError()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
105 def close(self): pass
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
106 def sock_avail(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
107 return (not self.sock.block)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
108 def msg(self, msg, *args):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
109 with support.captured_stdout() as out:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
110 telnetlib.Telnet.msg(self, msg, *args)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
111 self._messages += out.getvalue()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
112 return
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
113
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
114 class MockSelector(selectors.BaseSelector):
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
115
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
116 def __init__(self):
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
117 self.keys = {}
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
118
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
119 def register(self, fileobj, events, data=None):
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
120 key = selectors.SelectorKey(fileobj, 0, events, data)
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
121 self.keys[fileobj] = key
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
122 return key
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
123
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
124 def unregister(self, fileobj):
87677
f48f302f54aa Issue #19842: Refactor BaseSelector to make it an actual usable ABC.
Charles-François Natali <cf.natali@gmail.com>
parents: 86549
diff changeset
125 return self.keys.pop(fileobj)
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
126
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
127 def select(self, timeout=None):
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
128 block = False
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
129 for fileobj in self.keys:
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
130 if isinstance(fileobj, TelnetAlike):
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
131 block = fileobj.sock.block
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
132 break
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
133 if block:
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
134 return []
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
135 else:
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
136 return [(key, key.events) for key in self.keys.values()]
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
137
87677
f48f302f54aa Issue #19842: Refactor BaseSelector to make it an actual usable ABC.
Charles-François Natali <cf.natali@gmail.com>
parents: 86549
diff changeset
138 def get_map(self):
f48f302f54aa Issue #19842: Refactor BaseSelector to make it an actual usable ABC.
Charles-François Natali <cf.natali@gmail.com>
parents: 86549
diff changeset
139 return self.keys
f48f302f54aa Issue #19842: Refactor BaseSelector to make it an actual usable ABC.
Charles-François Natali <cf.natali@gmail.com>
parents: 86549
diff changeset
140
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
141
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
142 @contextlib.contextmanager
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
143 def test_socket(reads):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
144 def new_conn(*ignored):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
145 return SocketStub(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
146 try:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
147 old_conn = socket.create_connection
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
148 socket.create_connection = new_conn
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
149 yield None
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
150 finally:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
151 socket.create_connection = old_conn
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
152 return
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
153
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
154 def test_telnet(reads=(), cls=TelnetAlike):
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
155 ''' return a telnetlib.Telnet object that uses a SocketStub with
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
156 reads queued up to be read '''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
157 for x in reads:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
158 assert type(x) is bytes, x
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
159 with test_socket(reads):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
160 telnet = cls('dummy', 0)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
161 telnet._messages = '' # debuglevel output
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
162 return telnet
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
163
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
164 class ExpectAndReadTestCase(TestCase):
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
165 def setUp(self):
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
166 self.old_selector = telnetlib._TelnetSelector
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
167 telnetlib._TelnetSelector = MockSelector
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
168 def tearDown(self):
86549
f713d9b6393c Issue #19170: telnetlib: use selectors.
Charles-François Natali <cf.natali@gmail.com>
parents: 85400
diff changeset
169 telnetlib._TelnetSelector = self.old_selector
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
170
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
171 class ReadTests(ExpectAndReadTestCase):
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
172 def test_read_until(self):
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
173 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
174 read_until(expected, timeout=None)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
175 test the blocking version of read_util
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
176 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
177 want = [b'xxxmatchyyy']
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
178 telnet = test_telnet(want)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
179 data = telnet.read_until(b'match')
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
180 self.assertEqual(data, b'xxxmatch', msg=(telnet.cookedq, telnet.rawq, telnet.sock.reads))
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
181
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
182 reads = [b'x' * 50, b'match', b'y' * 50]
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
183 expect = b''.join(reads[:-1])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
184 telnet = test_telnet(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
185 data = telnet.read_until(b'match')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
186 self.assertEqual(data, expect)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
187
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
188
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
189 def test_read_all(self):
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
190 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
191 read_all()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
192 Read all data until EOF; may block.
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
193 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
194 reads = [b'x' * 500, b'y' * 500, b'z' * 500]
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
195 expect = b''.join(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
196 telnet = test_telnet(reads)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
197 data = telnet.read_all()
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
198 self.assertEqual(data, expect)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
199 return
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
200
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
201 def test_read_some(self):
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
202 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
203 read_some()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
204 Read at least one byte or EOF; may block.
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
205 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
206 # test 'at least one byte'
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
207 telnet = test_telnet([b'x' * 500])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
208 data = telnet.read_some()
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
209 self.assertTrue(len(data) >= 1)
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
210 # test EOF
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
211 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
212 data = telnet.read_some()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
213 self.assertEqual(b'', data)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
214
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
215 def _read_eager(self, func_name):
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
216 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
217 read_*_eager()
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
218 Read all data available already queued or on the socket,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
219 without blocking.
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
220 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
221 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
222 telnet = test_telnet([want])
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
223 func = getattr(telnet, func_name)
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
224 telnet.sock.block = True
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
225 self.assertEqual(b'', func())
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
226 telnet.sock.block = False
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
227 data = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
228 while True:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
229 try:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
230 data += func()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
231 except EOFError:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
232 break
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
233 self.assertEqual(data, want)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
234
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
235 def test_read_eager(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
236 # read_eager and read_very_eager make the same gaurantees
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
237 # (they behave differently but we only test the gaurantees)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
238 self._read_eager('read_eager')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
239 self._read_eager('read_very_eager')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
240 # NB -- we need to test the IAC block which is mentioned in the
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
241 # docstring but not in the module docs
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
242
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
243 def read_very_lazy(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
244 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
245 telnet = test_telnet([want])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
246 self.assertEqual(b'', telnet.read_very_lazy())
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
247 while telnet.sock.reads:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
248 telnet.fill_rawq()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
249 data = telnet.read_very_lazy()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
250 self.assertEqual(want, data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
251 self.assertRaises(EOFError, telnet.read_very_lazy)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
252
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
253 def test_read_lazy(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
254 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
255 telnet = test_telnet([want])
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
256 self.assertEqual(b'', telnet.read_lazy())
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
257 data = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
258 while True:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
259 try:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
260 read_data = telnet.read_lazy()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
261 data += read_data
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
262 if not read_data:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
263 telnet.fill_rawq()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
264 except EOFError:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
265 break
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
266 self.assertTrue(want.startswith(data))
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
267 self.assertEqual(data, want)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
268
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
269 class nego_collector(object):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
270 def __init__(self, sb_getter=None):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
271 self.seen = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
272 self.sb_getter = sb_getter
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
273 self.sb_seen = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
274
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
275 def do_nego(self, sock, cmd, opt):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
276 self.seen += cmd + opt
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
277 if cmd == tl.SE and self.sb_getter:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
278 sb_data = self.sb_getter()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
279 self.sb_seen += sb_data
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
280
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
281 tl = telnetlib
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
282
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
283 class WriteTests(TestCase):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
284 '''The only thing that write does is replace each tl.IAC for
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
285 tl.IAC+tl.IAC'''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
286
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
287 def test_write(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
288 data_sample = [b'data sample without IAC',
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
289 b'data sample with' + tl.IAC + b' one IAC',
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
290 b'a few' + tl.IAC + tl.IAC + b' iacs' + tl.IAC,
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
291 tl.IAC,
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
292 b'']
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
293 for data in data_sample:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
294 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
295 telnet.write(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
296 written = b''.join(telnet.sock.writes)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
297 self.assertEqual(data.replace(tl.IAC,tl.IAC+tl.IAC), written)
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
298
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
299 class OptionTests(TestCase):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
300 # RFC 854 commands
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
301 cmds = [tl.AO, tl.AYT, tl.BRK, tl.EC, tl.EL, tl.GA, tl.IP, tl.NOP]
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
302
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
303 def _test_command(self, data):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
304 """ helper for testing IAC + cmd """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
305 telnet = test_telnet(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
306 data_len = len(b''.join(data))
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
307 nego = nego_collector()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
308 telnet.set_option_negotiation_callback(nego.do_nego)
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
309 txt = telnet.read_all()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
310 cmd = nego.seen
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
311 self.assertTrue(len(cmd) > 0) # we expect at least one command
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 57127
diff changeset
312 self.assertIn(cmd[:1], self.cmds)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
313 self.assertEqual(cmd[1:2], tl.NOOPT)
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
314 self.assertEqual(data_len, len(txt + cmd))
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
315 nego.sb_getter = None # break the nego => telnet cycle
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
316
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
317 def test_IAC_commands(self):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
318 for cmd in self.cmds:
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
319 self._test_command([tl.IAC, cmd])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
320 self._test_command([b'x' * 100, tl.IAC, cmd, b'y'*100])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
321 self._test_command([b'x' * 10, tl.IAC, cmd, b'y'*10])
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
322 # all at once
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
323 self._test_command([tl.IAC + cmd for (cmd) in self.cmds])
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
324
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
325 def test_SB_commands(self):
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
326 # RFC 855, subnegotiations portion
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
327 send = [tl.IAC + tl.SB + tl.IAC + tl.SE,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
328 tl.IAC + tl.SB + tl.IAC + tl.IAC + tl.IAC + tl.SE,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
329 tl.IAC + tl.SB + tl.IAC + tl.IAC + b'aa' + tl.IAC + tl.SE,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
330 tl.IAC + tl.SB + b'bb' + tl.IAC + tl.IAC + tl.IAC + tl.SE,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
331 tl.IAC + tl.SB + b'cc' + tl.IAC + tl.IAC + b'dd' + tl.IAC + tl.SE,
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
332 ]
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
333 telnet = test_telnet(send)
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
334 nego = nego_collector(telnet.read_sb_data)
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
335 telnet.set_option_negotiation_callback(nego.do_nego)
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
336 txt = telnet.read_all()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
337 self.assertEqual(txt, b'')
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
338 want_sb_data = tl.IAC + tl.IAC + b'aabb' + tl.IAC + b'cc' + tl.IAC + b'dd'
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
339 self.assertEqual(nego.sb_seen, want_sb_data)
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
340 self.assertEqual(b'', telnet.read_sb_data())
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
341 nego.sb_getter = None # break the nego => telnet cycle
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
342
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
343 def test_debuglevel_reads(self):
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
344 # test all the various places that self.msg(...) is called
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
345 given_a_expect_b = [
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
346 # Telnet.fill_rawq
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
347 (b'a', ": recv b''\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
348 # Telnet.process_rawq
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
349 (tl.IAC + bytes([88]), ": IAC 88 not recognized\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
350 (tl.IAC + tl.DO + bytes([1]), ": IAC DO 1\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
351 (tl.IAC + tl.DONT + bytes([1]), ": IAC DONT 1\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
352 (tl.IAC + tl.WILL + bytes([1]), ": IAC WILL 1\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
353 (tl.IAC + tl.WONT + bytes([1]), ": IAC WONT 1\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
354 ]
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
355 for a, b in given_a_expect_b:
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
356 telnet = test_telnet([a])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
357 telnet.set_debuglevel(1)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
358 txt = telnet.read_all()
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 57127
diff changeset
359 self.assertIn(b, telnet._messages)
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
360 return
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
361
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
362 def test_debuglevel_write(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
363 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
364 telnet.set_debuglevel(1)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
365 telnet.write(b'xxx')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
366 expected = "send b'xxx'\n"
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 57127
diff changeset
367 self.assertIn(expected, telnet._messages)
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
368
66891
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
369 def test_debug_accepts_str_port(self):
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
370 # Issue 10695
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
371 with test_socket([]):
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
372 telnet = TelnetAlike('dummy', '0')
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
373 telnet._messages = ''
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
374 telnet.set_debuglevel(1)
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
375 telnet.msg('test')
66890
da20e7a01fa6 #10695: use %s not %d so that a string 'port' does not cause a debug traceback
R. David Murray <rdmurray@bitdance.com>
parents: 65998
diff changeset
376 self.assertRegex(telnet._messages, r'0.*test')
66891
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
377
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
378
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
379 class ExpectTests(ExpectAndReadTestCase):
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
380 def test_expect(self):
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
381 """
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
382 expect(expected, [timeout])
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
383 Read until the expected string has been seen, or a timeout is
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
384 hit (default is no timeout); may block.
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
385 """
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
386 want = [b'x' * 10, b'match', b'y' * 10]
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
387 telnet = test_telnet(want)
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
388 (_,_,data) = telnet.expect([b'match'])
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
389 self.assertEqual(data, b''.join(want[:-1]))
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
390
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
391
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 def test_main(verbose=None):
78129
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
393 support.run_unittest(GeneralTests, ReadTests, WriteTests, OptionTests,
de229dde486b Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents: 73452
diff changeset
394 ExpectTests)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
395
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 if __name__ == '__main__':
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 test_main()