Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_telnetlib.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | cd2d4fe57c0e |
| children | 6b33d786b46d |
| rev | line source |
|---|---|
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
1 import socket |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
2 import telnetlib |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
3 import time |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
4 import Queue |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
5 |
|
78139
cd2d4fe57c0e
Fix the with_poll tests for platforms without poll. missing import.
Gregory P. Smith <greg@krypto.org>
parents:
78127
diff
changeset
|
6 import unittest |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
7 from unittest import TestCase |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
8 from test import test_support |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
58460
diff
changeset
|
9 threading = test_support.import_module('threading') |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
10 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46147
diff
changeset
|
11 HOST = test_support.HOST |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
12 EOF_sigil = object() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
13 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
14 def server(evt, serv, dataq=None): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
15 """ Open a tcp server in three steps |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
16 1) set evt to true to let the parent know we are ready |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
17 2) [optional] if is not False, write the list of data from dataq.get() |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
18 to the socket. |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
19 """ |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
20 serv.listen(5) |
|
44983
dca3f646e8a1
Reduce the race condition by signalling when the server is ready
Neal Norwitz <nnorwitz@gmail.com>
parents:
41532
diff
changeset
|
21 evt.set() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
22 try: |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
23 conn, addr = serv.accept() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
24 if dataq: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
25 data = '' |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
26 new_data = dataq.get(True, 0.5) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
27 dataq.task_done() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
28 for item in new_data: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
29 if item == EOF_sigil: |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
30 break |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
31 if type(item) in [int, float]: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
32 time.sleep(item) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
33 else: |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
34 data += item |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
35 written = conn.send(data) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
36 data = data[written:] |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
37 conn.close() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
38 except socket.timeout: |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
39 pass |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
40 finally: |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
41 serv.close() |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
42 |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
43 class GeneralTests(TestCase): |
|
41532
4b9fa8092e82
Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents:
41323
diff
changeset
|
44 |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
45 def setUp(self): |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
46 self.evt = threading.Event() |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46147
diff
changeset
|
47 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
48 self.sock.settimeout(60) # Safety net. Look issue 11812 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46147
diff
changeset
|
49 self.port = test_support.bind_port(self.sock) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
50 self.thread = threading.Thread(target=server, args=(self.evt,self.sock)) |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
51 self.thread.setDaemon(True) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
52 self.thread.start() |
|
44983
dca3f646e8a1
Reduce the race condition by signalling when the server is ready
Neal Norwitz <nnorwitz@gmail.com>
parents:
41532
diff
changeset
|
53 self.evt.wait() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
54 |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
55 def tearDown(self): |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
56 self.thread.join() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
57 |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
58 def testBasic(self): |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
59 # connects |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46147
diff
changeset
|
60 telnet = telnetlib.Telnet(HOST, self.port) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
61 telnet.sock.close() |
|
41532
4b9fa8092e82
Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents:
41323
diff
changeset
|
62 |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
63 def testTimeoutDefault(self): |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
64 self.assertTrue(socket.getdefaulttimeout() is None) |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
65 socket.setdefaulttimeout(30) |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
66 try: |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
67 telnet = telnetlib.Telnet(HOST, self.port) |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
68 finally: |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
69 socket.setdefaulttimeout(None) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
70 self.assertEqual(telnet.sock.gettimeout(), 30) |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
71 telnet.sock.close() |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
72 |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
73 def testTimeoutNone(self): |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
74 # None, having other default |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
75 self.assertTrue(socket.getdefaulttimeout() is None) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
76 socket.setdefaulttimeout(30) |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
77 try: |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46147
diff
changeset
|
78 telnet = telnetlib.Telnet(HOST, self.port, timeout=None) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
79 finally: |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
80 socket.setdefaulttimeout(None) |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
81 self.assertTrue(telnet.sock.gettimeout() is None) |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
82 telnet.sock.close() |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
83 |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
84 def testTimeoutValue(self): |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
85 telnet = telnetlib.Telnet(HOST, self.port, timeout=30) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
86 self.assertEqual(telnet.sock.gettimeout(), 30) |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
87 telnet.sock.close() |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
88 |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
89 def testTimeoutOpen(self): |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
90 telnet = telnetlib.Telnet() |
|
73450
554802e562fa
Partial patch for issue #11812: Take care of test_telnetlib.py
Jesus Cea <jcea@jcea.es>
parents:
73449
diff
changeset
|
91 telnet.open(HOST, self.port, timeout=30) |
|
47372
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
92 self.assertEqual(telnet.sock.gettimeout(), 30) |
|
e2c5ae30cffe
Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents:
46362
diff
changeset
|
93 telnet.sock.close() |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
94 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
95 def _read_setUp(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
96 self.evt = threading.Event() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
97 self.dataq = Queue.Queue() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
98 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
74079
2228d985fdcc
Issue #13453: Try to increase some socket timeouts to make some buildbots stop
Charles-François Natali <neologix@free.fr>
parents:
73450
diff
changeset
|
99 self.sock.settimeout(10) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
100 self.port = test_support.bind_port(self.sock) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
101 self.thread = threading.Thread(target=server, args=(self.evt,self.sock, self.dataq)) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
102 self.thread.start() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
103 self.evt.wait() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
104 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
105 def _read_tearDown(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
106 self.thread.join() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
107 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
108 class ReadTests(TestCase): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
109 setUp = _read_setUp |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
110 tearDown = _read_tearDown |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
111 |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
112 # use a similar approach to testing timeouts as test_timeout.py |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
113 # these will never pass 100% but make the fuzz big enough that it is rare |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
114 block_long = 0.6 |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
115 block_short = 0.3 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
116 def test_read_until_A(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
117 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
118 read_until(expected, [timeout]) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
119 Read until the expected string has been seen, or a timeout is |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
120 hit (default is no timeout); may block. |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
121 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
122 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
123 self.dataq.put(want) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
124 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
125 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
126 data = telnet.read_until('match') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
127 self.assertEqual(data, ''.join(want[:-2])) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
128 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
129 def test_read_until_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
130 # test the timeout - it does NOT raise socket.timeout |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
131 want = ['hello', self.block_long, 'not seen', EOF_sigil] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
132 self.dataq.put(want) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
133 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
134 self.dataq.join() |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
135 data = telnet.read_until('not seen', self.block_short) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
136 self.assertEqual(data, want[0]) |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
137 self.assertEqual(telnet.read_all(), 'not seen') |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
138 |
|
78127
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
139 def test_read_until_with_poll(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
140 """Use select.poll() to implement telnet.read_until().""" |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
141 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
142 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
143 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
144 if not telnet._has_poll: |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
145 raise unittest.SkipTest('select.poll() is required') |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
146 telnet._has_poll = True |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
147 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
148 data = telnet.read_until('match') |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
149 self.assertEqual(data, ''.join(want[:-2])) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
150 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
151 def test_read_until_with_select(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
152 """Use select.select() to implement telnet.read_until().""" |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
153 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
154 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
155 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
156 telnet._has_poll = False |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
157 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
158 data = telnet.read_until('match') |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
159 self.assertEqual(data, ''.join(want[:-2])) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
160 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
161 def test_read_all_A(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
162 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
163 read_all() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
164 Read all data until EOF; may block. |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
165 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
166 want = ['x' * 500, 'y' * 500, 'z' * 500, EOF_sigil] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
167 self.dataq.put(want) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
168 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
169 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
170 data = telnet.read_all() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
171 self.assertEqual(data, ''.join(want[:-1])) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
172 return |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
173 |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
174 def _test_blocking(self, func): |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
175 self.dataq.put([self.block_long, EOF_sigil]) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
176 self.dataq.join() |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
177 start = time.time() |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
178 data = func() |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
179 self.assertTrue(self.block_short <= time.time() - start) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
180 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
181 def test_read_all_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
182 self._test_blocking(telnetlib.Telnet(HOST, self.port).read_all) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
183 |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
184 def test_read_all_C(self): |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
185 self.dataq.put([EOF_sigil]) |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
186 telnet = telnetlib.Telnet(HOST, self.port) |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
187 self.dataq.join() |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
188 telnet.read_all() |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
189 telnet.read_all() # shouldn't raise |
|
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
190 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
191 def test_read_some_A(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
192 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
193 read_some() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
194 Read at least one byte or EOF; may block. |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
195 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
196 # test 'at least one byte' |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
197 want = ['x' * 500, EOF_sigil] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
198 self.dataq.put(want) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
199 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
200 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
201 data = telnet.read_all() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
202 self.assertTrue(len(data) >= 1) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
203 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
204 def test_read_some_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
205 # test EOF |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
206 self.dataq.put([EOF_sigil]) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
207 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
208 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
209 self.assertEqual('', telnet.read_some()) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
210 |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
211 def test_read_some_C(self): |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
212 self._test_blocking(telnetlib.Telnet(HOST, self.port).read_some) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
213 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
214 def _test_read_any_eager_A(self, func_name): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
215 """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
216 read_very_eager() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
217 Read all data available already queued or on the socket, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
218 without blocking. |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
219 """ |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
220 want = [self.block_long, 'x' * 100, 'y' * 100, EOF_sigil] |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
221 expects = want[1] + want[2] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
222 self.dataq.put(want) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
223 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
224 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
225 func = getattr(telnet, func_name) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
226 data = '' |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
227 while True: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
228 try: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
229 data += func() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
230 self.assertTrue(expects.startswith(data)) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
231 except EOFError: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
232 break |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
233 self.assertEqual(expects, data) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
234 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
235 def _test_read_any_eager_B(self, func_name): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
236 # test EOF |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
237 self.dataq.put([EOF_sigil]) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
238 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
239 self.dataq.join() |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
240 time.sleep(self.block_short) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
241 func = getattr(telnet, func_name) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
242 self.assertRaises(EOFError, func) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
243 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
244 # read_eager and read_very_eager make the same gaurantees |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
245 # (they behave differently but we only test the gaurantees) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
246 def test_read_very_eager_A(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
247 self._test_read_any_eager_A('read_very_eager') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
248 def test_read_very_eager_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
249 self._test_read_any_eager_B('read_very_eager') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
250 def test_read_eager_A(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
251 self._test_read_any_eager_A('read_eager') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
252 def test_read_eager_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
253 self._test_read_any_eager_B('read_eager') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
254 # NB -- we need to test the IAC block which is mentioned in the docstring |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
255 # but not in the module docs |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
256 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
257 def _test_read_any_lazy_B(self, func_name): |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
258 self.dataq.put([EOF_sigil]) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
259 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
260 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
261 func = getattr(telnet, func_name) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
262 telnet.fill_rawq() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
263 self.assertRaises(EOFError, func) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
264 |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
265 def test_read_lazy_A(self): |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
266 want = ['x' * 100, EOF_sigil] |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
267 self.dataq.put(want) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
268 telnet = telnetlib.Telnet(HOST, self.port) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
269 self.dataq.join() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
270 time.sleep(self.block_short) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
271 self.assertEqual('', telnet.read_lazy()) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
272 data = '' |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
273 while True: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
274 try: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
275 read_data = telnet.read_lazy() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
276 data += read_data |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
277 if not read_data: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
278 telnet.fill_rawq() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
279 except EOFError: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
280 break |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
281 self.assertTrue(want[0].startswith(data)) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
282 self.assertEqual(data, want[0]) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
283 |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
284 def test_read_lazy_B(self): |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
285 self._test_read_any_lazy_B('read_lazy') |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
286 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
287 def test_read_very_lazy_A(self): |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
288 want = ['x' * 100, EOF_sigil] |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
289 self.dataq.put(want) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
290 telnet = telnetlib.Telnet(HOST, self.port) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
291 self.dataq.join() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
292 time.sleep(self.block_short) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
293 self.assertEqual('', telnet.read_very_lazy()) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
294 data = '' |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
295 while True: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
296 try: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
297 read_data = telnet.read_very_lazy() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
298 except EOFError: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
299 break |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
300 data += read_data |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
301 if not read_data: |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
302 telnet.fill_rawq() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
303 self.assertEqual('', telnet.cookedq) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
304 telnet.process_rawq() |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
305 self.assertTrue(want[0].startswith(data)) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
306 self.assertEqual(data, want[0]) |
|
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
307 |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
308 def test_read_very_lazy_B(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
309 self._test_read_any_lazy_B('read_very_lazy') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
310 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
311 class nego_collector(object): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
312 def __init__(self, sb_getter=None): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
313 self.seen = '' |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
314 self.sb_getter = sb_getter |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
315 self.sb_seen = '' |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
316 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
317 def do_nego(self, sock, cmd, opt): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
318 self.seen += cmd + opt |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
319 if cmd == tl.SE and self.sb_getter: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
320 sb_data = self.sb_getter() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
321 self.sb_seen += sb_data |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
322 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
323 tl = telnetlib |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
324 class OptionTests(TestCase): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
325 setUp = _read_setUp |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
326 tearDown = _read_tearDown |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
327 # RFC 854 commands |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
328 cmds = [tl.AO, tl.AYT, tl.BRK, tl.EC, tl.EL, tl.GA, tl.IP, tl.NOP] |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
329 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
330 def _test_command(self, data): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
331 """ helper for testing IAC + cmd """ |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
332 self.setUp() |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
333 self.dataq.put(data) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
334 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
335 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
336 nego = nego_collector() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
337 telnet.set_option_negotiation_callback(nego.do_nego) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
338 txt = telnet.read_all() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
339 cmd = nego.seen |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
340 self.assertTrue(len(cmd) > 0) # we expect at least one command |
|
58460
17891566a478
use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents:
52978
diff
changeset
|
341 self.assertIn(cmd[0], self.cmds) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
342 self.assertEqual(cmd[1], tl.NOOPT) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
343 self.assertEqual(len(''.join(data[:-1])), len(txt + cmd)) |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
344 nego.sb_getter = None # break the nego => telnet cycle |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
345 self.tearDown() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
346 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
347 def test_IAC_commands(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
348 # reset our setup |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
349 self.dataq.put([EOF_sigil]) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
350 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
351 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
352 self.tearDown() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
353 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
354 for cmd in self.cmds: |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
355 self._test_command(['x' * 100, tl.IAC + cmd, 'y'*100, EOF_sigil]) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
356 self._test_command(['x' * 10, tl.IAC + cmd, 'y'*10, EOF_sigil]) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
357 self._test_command([tl.IAC + cmd, EOF_sigil]) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
358 # all at once |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
359 self._test_command([tl.IAC + cmd for (cmd) in self.cmds] + [EOF_sigil]) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
360 self.assertEqual('', telnet.read_sb_data()) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
361 |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
362 def test_SB_commands(self): |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
363 # RFC 855, subnegotiations portion |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
364 send = [tl.IAC + tl.SB + tl.IAC + tl.SE, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
365 tl.IAC + tl.SB + tl.IAC + tl.IAC + tl.IAC + tl.SE, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
366 tl.IAC + tl.SB + tl.IAC + tl.IAC + 'aa' + tl.IAC + tl.SE, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
367 tl.IAC + tl.SB + 'bb' + tl.IAC + tl.IAC + tl.IAC + tl.SE, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
368 tl.IAC + tl.SB + 'cc' + tl.IAC + tl.IAC + 'dd' + tl.IAC + tl.SE, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
369 EOF_sigil, |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
370 ] |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
371 self.dataq.put(send) |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
372 telnet = telnetlib.Telnet(HOST, self.port) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
373 self.dataq.join() |
|
52928
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
374 nego = nego_collector(telnet.read_sb_data) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
375 telnet.set_option_negotiation_callback(nego.do_nego) |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
376 txt = telnet.read_all() |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
377 self.assertEqual(txt, '') |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
378 want_sb_data = tl.IAC + tl.IAC + 'aabb' + tl.IAC + 'cc' + tl.IAC + 'dd' |
|
e363958fcd70
test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents:
47372
diff
changeset
|
379 self.assertEqual(nego.sb_seen, want_sb_data) |
|
52972
41e7202e9f93
eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents:
52962
diff
changeset
|
380 self.assertEqual('', telnet.read_sb_data()) |
|
52978
109941015703
- Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents:
52972
diff
changeset
|
381 nego.sb_getter = None # break the nego => telnet cycle |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
382 |
|
78127
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
383 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
384 class ExpectTests(TestCase): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
385 def setUp(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
386 self.evt = threading.Event() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
387 self.dataq = Queue.Queue() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
388 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
389 self.sock.settimeout(10) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
390 self.port = test_support.bind_port(self.sock) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
391 self.thread = threading.Thread(target=server, args=(self.evt,self.sock, |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
392 self.dataq)) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
393 self.thread.start() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
394 self.evt.wait() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
395 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
396 def tearDown(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
397 self.thread.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
398 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
399 # use a similar approach to testing timeouts as test_timeout.py |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
400 # these will never pass 100% but make the fuzz big enough that it is rare |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
401 block_long = 0.6 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
402 block_short = 0.3 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
403 def test_expect_A(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
404 """ |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
405 expect(expected, [timeout]) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
406 Read until the expected string has been seen, or a timeout is |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
407 hit (default is no timeout); may block. |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
408 """ |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
409 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
410 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
411 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
412 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
413 (_,_,data) = telnet.expect(['match']) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
414 self.assertEqual(data, ''.join(want[:-2])) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
415 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
416 def test_expect_B(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
417 # test the timeout - it does NOT raise socket.timeout |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
418 want = ['hello', self.block_long, 'not seen', EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
419 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
420 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
421 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
422 (_,_,data) = telnet.expect(['not seen'], self.block_short) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
423 self.assertEqual(data, want[0]) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
424 self.assertEqual(telnet.read_all(), 'not seen') |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
425 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
426 def test_expect_with_poll(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
427 """Use select.poll() to implement telnet.expect().""" |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
428 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
429 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
430 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
431 if not telnet._has_poll: |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
432 raise unittest.SkipTest('select.poll() is required') |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
433 telnet._has_poll = True |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
434 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
435 (_,_,data) = telnet.expect(['match']) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
436 self.assertEqual(data, ''.join(want[:-2])) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
437 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
438 def test_expect_with_select(self): |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
439 """Use select.select() to implement telnet.expect().""" |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
440 want = ['x' * 10, 'match', 'y' * 10, EOF_sigil] |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
441 self.dataq.put(want) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
442 telnet = telnetlib.Telnet(HOST, self.port) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
443 telnet._has_poll = False |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
444 self.dataq.join() |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
445 (_,_,data) = telnet.expect(['match']) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
446 self.assertEqual(data, ''.join(want[:-2])) |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
447 |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
448 |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
449 def test_main(verbose=None): |
|
78127
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
450 test_support.run_unittest(GeneralTests, ReadTests, OptionTests, |
|
c53e3aacb816
Fixes Issue #14635: telnetlib will use poll() rather than select() when possible
Gregory P. Smith <greg@krypto.org>
parents:
74079
diff
changeset
|
451 ExpectTests) |
|
41323
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
452 |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
453 if __name__ == '__main__': |
|
3fd8f06577ff
Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff
changeset
|
454 test_main() |
