Mercurial > cpython-lru_cache-weakref
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 |
| 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() |
