annotate Lib/test/test_telnetlib.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 109941015703
children 17891566a478
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 threading
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
3 import telnetlib
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
4 import time
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
5 import Queue
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
6
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
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
9
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46147
diff changeset
10 HOST = test_support.HOST
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
11 EOF_sigil = object()
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
12
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
13 def server(evt, serv, dataq=None):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
14 """ Open a tcp server in three steps
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
15 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
16 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
17 to the socket.
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
18 3) set evt to true to let the parent know we're done
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:]
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
37 except socket.timeout:
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
38 pass
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
39 finally:
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
40 serv.close()
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
41 evt.set()
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)
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46147
diff changeset
48 self.sock.settimeout(3)
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))
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
51 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
52 self.evt.wait()
dca3f646e8a1 Reduce the race condition by signalling when the server is ready
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
53 self.evt.clear()
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
54 time.sleep(.1)
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
55
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
56 def tearDown(self):
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
57 self.evt.wait()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
58 self.thread.join()
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
59
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
60 def testBasic(self):
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
61 # 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
62 telnet = telnetlib.Telnet(HOST, self.port)
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
63 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
64
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
65 def testTimeoutDefault(self):
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
66 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
67 socket.setdefaulttimeout(30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
68 try:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
69 telnet = telnetlib.Telnet("localhost", self.port)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
70 finally:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
71 socket.setdefaulttimeout(None)
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
72 self.assertEqual(telnet.sock.gettimeout(), 30)
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
73 telnet.sock.close()
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
74
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
75 def testTimeoutNone(self):
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
76 # 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
77 self.assertTrue(socket.getdefaulttimeout() is None)
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
78 socket.setdefaulttimeout(30)
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
79 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
80 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
81 finally:
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
82 socket.setdefaulttimeout(None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
83 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
84 telnet.sock.close()
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
85
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
86 def testTimeoutValue(self):
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
87 telnet = telnetlib.Telnet("localhost", self.port, timeout=30)
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
88 self.assertEqual(telnet.sock.gettimeout(), 30)
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
89 telnet.sock.close()
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
90
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
91 def testTimeoutOpen(self):
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
92 telnet = telnetlib.Telnet()
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
93 telnet.open("localhost", self.port, timeout=30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
94 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
95 telnet.sock.close()
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
96
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
97 def _read_setUp(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
98 self.evt = threading.Event()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
99 self.dataq = Queue.Queue()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
100 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
101 self.sock.settimeout(3)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
102 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
103 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
104 self.thread.start()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
105 self.evt.wait()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
106 self.evt.clear()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
107 time.sleep(.1)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
108
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
109 def _read_tearDown(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
110 self.evt.wait()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
111 self.thread.join()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
112
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
113 class ReadTests(TestCase):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
114 setUp = _read_setUp
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
115 tearDown = _read_tearDown
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
116
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
117 # 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
118 # 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
119 block_long = 0.6
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
120 block_short = 0.3
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
121 def test_read_until_A(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
122 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
123 read_until(expected, [timeout])
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
124 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
125 hit (default is no timeout); may block.
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
126 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
127 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
128 self.dataq.put(want)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
129 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
130 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
131 data = telnet.read_until('match')
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
132 self.assertEqual(data, ''.join(want[:-2]))
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
133
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
134 def test_read_until_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
135 # 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
136 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
137 self.dataq.put(want)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
138 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
139 self.dataq.join()
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
140 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
141 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
142 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
143
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
144 def test_read_all_A(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
145 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
146 read_all()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
147 Read all data until EOF; may block.
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
148 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
149 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
150 self.dataq.put(want)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
151 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
152 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
153 data = telnet.read_all()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
154 self.assertEqual(data, ''.join(want[:-1]))
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
155 return
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
156
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
157 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
158 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
159 self.dataq.join()
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
160 start = time.time()
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
161 data = func()
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
162 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
163
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
164 def test_read_all_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
165 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
166
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
167 def test_read_all_C(self):
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
168 self.dataq.put([EOF_sigil])
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
169 telnet = telnetlib.Telnet(HOST, self.port)
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
170 self.dataq.join()
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
171 telnet.read_all()
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
172 telnet.read_all() # shouldn't raise
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
173
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
174 def test_read_some_A(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
175 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
176 read_some()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
177 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
178 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
179 # test 'at least one byte'
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
180 want = ['x' * 500, EOF_sigil]
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
181 self.dataq.put(want)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
182 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
183 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
184 data = telnet.read_all()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
185 self.assertTrue(len(data) >= 1)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
186
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
187 def test_read_some_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
188 # test EOF
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
189 self.dataq.put([EOF_sigil])
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
190 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
191 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
192 self.assertEqual('', telnet.read_some())
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
193
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
194 def test_read_some_C(self):
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
195 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
196
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
197 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
198 """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
199 read_very_eager()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
200 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
201 without blocking.
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
202 """
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
203 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
204 expects = want[1] + want[2]
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
205 self.dataq.put(want)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
206 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
207 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
208 func = getattr(telnet, func_name)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
209 data = ''
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
210 while True:
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
211 try:
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
212 data += func()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
213 self.assertTrue(expects.startswith(data))
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
214 except EOFError:
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
215 break
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
216 self.assertEqual(expects, data)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
217
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
218 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
219 # test EOF
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
220 self.dataq.put([EOF_sigil])
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
221 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
222 self.dataq.join()
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
223 time.sleep(self.block_short)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
224 func = getattr(telnet, func_name)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
225 self.assertRaises(EOFError, func)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
226
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
227 # 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
228 # (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
229 def test_read_very_eager_A(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
230 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
231 def test_read_very_eager_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
232 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
233 def test_read_eager_A(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
234 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
235 def test_read_eager_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
236 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
237 # 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
238 # but not in the module docs
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
239
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
240 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
241 self.dataq.put([EOF_sigil])
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
242 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
243 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
244 func = getattr(telnet, func_name)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
245 telnet.fill_rawq()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
246 self.assertRaises(EOFError, func)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
247
52978
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
248 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
249 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
250 self.dataq.put(want)
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
251 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
252 self.dataq.join()
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
253 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
254 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
255 data = ''
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
256 while True:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
257 try:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
258 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
259 data += read_data
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
260 if not read_data:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
261 telnet.fill_rawq()
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
262 except EOFError:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
263 break
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
264 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
265 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
266
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
267 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
268 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
269
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
270 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
271 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
272 self.dataq.put(want)
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
273 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
274 self.dataq.join()
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
275 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
276 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
277 data = ''
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
278 while True:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
279 try:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
280 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
281 except EOFError:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
282 break
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
283 data += read_data
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
284 if not read_data:
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
285 telnet.fill_rawq()
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
286 self.assertEqual('', telnet.cookedq)
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
287 telnet.process_rawq()
109941015703 - Make timing assertions very generous (a la test_timeout.py)
Jack Diederich <jackdied@gmail.com>
parents: 52972
diff changeset
288 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
289 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
290
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
291 def test_read_very_lazy_B(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
292 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
293
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
294 class nego_collector(object):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
295 def __init__(self, sb_getter=None):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
296 self.seen = ''
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
297 self.sb_getter = sb_getter
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
298 self.sb_seen = ''
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
299
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
300 def do_nego(self, sock, cmd, opt):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
301 self.seen += cmd + opt
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
302 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
303 sb_data = self.sb_getter()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
304 self.sb_seen += sb_data
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
305
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
306 tl = telnetlib
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
307 class OptionTests(TestCase):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
308 setUp = _read_setUp
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
309 tearDown = _read_tearDown
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
310 # RFC 854 commands
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
311 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
312
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
313 def _test_command(self, data):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
314 """ helper for testing IAC + cmd """
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
315 self.setUp()
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
316 self.dataq.put(data)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
317 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
318 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
319 nego = nego_collector()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
320 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
321 txt = telnet.read_all()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
322 cmd = nego.seen
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
323 self.assertTrue(len(cmd) > 0) # we expect at least one command
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
324 self.assertTrue(cmd[0] in self.cmds)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
325 self.assertEqual(cmd[1], tl.NOOPT)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
326 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
327 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
328 self.tearDown()
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_IAC_commands(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
331 # reset our setup
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
332 self.dataq.put([EOF_sigil])
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
333 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
334 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
335 self.tearDown()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
336
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
337 for cmd in self.cmds:
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
338 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
339 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
340 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
341 # all at once
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
342 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
343 self.assertEqual('', telnet.read_sb_data())
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
344
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
345 def test_SB_commands(self):
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
346 # RFC 855, subnegotiations portion
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
347 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
348 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
349 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
350 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
351 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
352 EOF_sigil,
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
353 ]
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
354 self.dataq.put(send)
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
355 telnet = telnetlib.Telnet(HOST, self.port)
52972
41e7202e9f93 eliminate more race conditions in telnetlib tests
Jack Diederich <jackdied@gmail.com>
parents: 52962
diff changeset
356 self.dataq.join()
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
357 nego = nego_collector(telnet.read_sb_data)
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
358 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
359 txt = telnet.read_all()
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
360 self.assertEqual(txt, '')
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
361 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
362 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
363 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
364 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
365
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
366 def test_main(verbose=None):
52928
e363958fcd70 test the telnetlib.Telnet interface more thoroughly
Jack Diederich <jackdied@gmail.com>
parents: 47372
diff changeset
367 test_support.run_unittest(GeneralTests, ReadTests, OptionTests)
41323
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
368
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
369 if __name__ == '__main__':
3fd8f06577ff Added timout parameter to telnetlib.Telnet. Also created
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
370 test_main()