annotate Lib/test/test_telnetlib.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 3b9f58f85d3e
children de229dde486b ca8a0dfb2176
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
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
2 import select
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()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def testBasic(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # 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
41 telnet = telnetlib.Telnet(HOST, self.port)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 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
45 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
46 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
47 try:
73452
3b9f58f85d3e Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents: 73451
diff changeset
48 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
49 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
50 socket.setdefaulttimeout(None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 self.assertEqual(telnet.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 def testTimeoutNone(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # 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
56 self.assertTrue(socket.getdefaulttimeout() is None)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 socket.setdefaulttimeout(30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 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
59 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
60 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
61 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
62 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
63 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
64
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 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
66 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
67 self.assertEqual(telnet.sock.gettimeout(), 30)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 telnet.sock.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
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
70 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
71 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
72 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
73 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
74 telnet.sock.close()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
76 class SocketStub(object):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
77 ''' a socket proxy that re-defines sendall() '''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
78 def __init__(self, reads=[]):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
79 self.reads = reads
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
80 self.writes = []
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
81 self.block = False
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
82 def sendall(self, data):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
83 self.writes.append(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
84 def recv(self, size):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
85 out = b''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
86 while self.reads and len(out) < size:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
87 out += self.reads.pop(0)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
88 if len(out) > size:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
89 self.reads.insert(0, out[size:])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
90 out = out[:size]
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
91 return out
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
92
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
93 class TelnetAlike(telnetlib.Telnet):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
94 def fileno(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
95 raise NotImplementedError()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
96 def close(self): pass
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
97 def sock_avail(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
98 return (not self.sock.block)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
99 def msg(self, msg, *args):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
100 with support.captured_stdout() as out:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
101 telnetlib.Telnet.msg(self, msg, *args)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
102 self._messages += out.getvalue()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
103 return
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
104
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
105 def new_select(*s_args):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
106 block = False
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
107 for l in s_args:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
108 for fob in l:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
109 if isinstance(fob, TelnetAlike):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
110 block = fob.sock.block
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
111 if block:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
112 return [[], [], []]
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
113 else:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
114 return s_args
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
115
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
116 @contextlib.contextmanager
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
117 def test_socket(reads):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
118 def new_conn(*ignored):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
119 return SocketStub(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
120 try:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
121 old_conn = socket.create_connection
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
122 socket.create_connection = new_conn
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
123 yield None
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
124 finally:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
125 socket.create_connection = old_conn
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
126 return
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
127
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
128 def test_telnet(reads=[], cls=TelnetAlike):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
129 ''' 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
130 reads queued up to be read '''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
131 for x in reads:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
132 assert type(x) is bytes, x
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
133 with test_socket(reads):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
134 telnet = cls('dummy', 0)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
135 telnet._messages = '' # debuglevel output
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
136 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
137
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
138 class ReadTests(TestCase):
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
139 def setUp(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
140 self.old_select = select.select
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
141 select.select = new_select
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
142 def tearDown(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
143 select.select = self.old_select
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
144
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
145 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
146 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
147 read_until(expected, timeout=None)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
148 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
149 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
150 want = [b'xxxmatchyyy']
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
151 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
152 data = telnet.read_until(b'match')
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
153 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
154
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
155 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
156 expect = b''.join(reads[:-1])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
157 telnet = test_telnet(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
158 data = telnet.read_until(b'match')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
159 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
160
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
161
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
162 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
163 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
164 read_all()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
165 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
166 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
167 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
168 expect = b''.join(reads)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
169 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
170 data = telnet.read_all()
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
171 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
172 return
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 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
175 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
176 read_some()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
177 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
178 """
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
179 # test 'at least one byte'
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
180 telnet = test_telnet([b'x' * 500])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
181 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
182 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
183 # test EOF
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
184 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
185 data = telnet.read_some()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
186 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
187
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
188 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
189 """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
190 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
191 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
192 without blocking.
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 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
195 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
196 func = getattr(telnet, func_name)
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
197 telnet.sock.block = True
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
198 self.assertEqual(b'', func())
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
199 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
200 data = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
201 while True:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
202 try:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
203 data += func()
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
204 except EOFError:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
205 break
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
206 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
207
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
208 def test_read_eager(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
209 # 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
210 # (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
211 self._read_eager('read_eager')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
212 self._read_eager('read_very_eager')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
213 # 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
214 # 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
215
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
216 def read_very_lazy(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
217 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
218 telnet = test_telnet([want])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
219 self.assertEqual(b'', telnet.read_very_lazy())
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
220 while telnet.sock.reads:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
221 telnet.fill_rawq()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
222 data = telnet.read_very_lazy()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
223 self.assertEqual(want, data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
224 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
225
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
226 def test_read_lazy(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
227 want = b'x' * 100
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
228 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
229 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
230 data = b''
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
231 while True:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
232 try:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
233 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
234 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
235 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
236 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
237 except EOFError:
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
238 break
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
239 self.assertTrue(want.startswith(data))
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
240 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
241
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
242 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
243 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
244 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
245 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
246 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
247
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
248 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
249 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
250 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
251 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
252 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
253
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
254 tl = telnetlib
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
255
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
256 class WriteTests(TestCase):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
257 '''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
258 tl.IAC+tl.IAC'''
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
259
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
260 def test_write(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
261 data_sample = [b'data sample without IAC',
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
262 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
263 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
264 tl.IAC,
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
265 b'']
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
266 for data in data_sample:
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
267 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
268 telnet.write(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
269 written = b''.join(telnet.sock.writes)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
270 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
271
53021
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
272 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
273 # 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
274 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
275
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
276 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
277 """ helper for testing IAC + cmd """
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
278 telnet = test_telnet(data)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
279 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
280 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
281 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
282 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
283 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
284 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
285 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
286 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
287 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
288 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
289
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
290 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
291 for cmd in self.cmds:
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
292 self._test_command([tl.IAC, cmd])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
293 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
294 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
295 # all at once
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
296 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
297
cbaa1bc350ba -fixes telnetlib constants to be one-length byte arrays instead of ints
Jack Diederich <jackdied@gmail.com>
parents: 47559
diff changeset
298 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
299 # 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
300 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
301 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
302 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
303 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
304 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
305 ]
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
306 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
307 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
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 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
311 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
312 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
313 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
314 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
315
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
316 def test_debuglevel_reads(self):
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
317 # 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
318 given_a_expect_b = [
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
319 # Telnet.fill_rawq
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
320 (b'a', ": recv b''\n"),
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
321 # Telnet.process_rawq
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
322 (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
323 (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
324 (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
325 (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
326 (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
327 ]
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
328 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
329 telnet = test_telnet([a])
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
330 telnet.set_debuglevel(1)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
331 txt = telnet.read_all()
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 57127
diff changeset
332 self.assertIn(b, telnet._messages)
55585
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
333 return
58c10cf04616 Merged revisions 74217,74224 via svnmerge from
Georg Brandl <georg@python.org>
parents: 53021
diff changeset
334
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
335 def test_debuglevel_write(self):
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
336 telnet = test_telnet()
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
337 telnet.set_debuglevel(1)
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
338 telnet.write(b'xxx')
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
339 expected = "send b'xxx'\n"
58415
f6a626f34840 use assert[Not]In where appropriate
Benjamin Peterson <benjamin@python.org>
parents: 57127
diff changeset
340 self.assertIn(expected, telnet._messages)
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
341
66891
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
342 def test_debug_accepts_str_port(self):
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
343 # Issue 10695
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
344 with test_socket([]):
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
345 telnet = TelnetAlike('dummy', '0')
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
346 telnet._messages = ''
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
347 telnet.set_debuglevel(1)
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
348 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
349 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
350
69b85964ec88 Merged revisions 87230 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 66000
diff changeset
351
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 def test_main(verbose=None):
57128
d346ffb8cfd7 Merged revisions 74638,76133 via svnmerge from
Jack Diederich <jackdied@gmail.com>
parents: 55585
diff changeset
353 support.run_unittest(GeneralTests, ReadTests, WriteTests, OptionTests)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
354
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 if __name__ == '__main__':
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 test_main()