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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()