annotate Lib/test/test_asyncore.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 ab75da266e57
children 42fd7855347e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
1 import asyncore
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
2 import unittest
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
3 import select
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
4 import os
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
5 import socket
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
6 import threading
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
7 import sys
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
8 import time
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
9
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
10 from test import test_support
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
11 from test.test_support import TESTFN, run_unittest, unlink
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
12 from StringIO import StringIO
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
13
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
14 HOST = test_support.HOST
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
15
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
16 class dummysocket:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
17 def __init__(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
18 self.closed = False
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
19
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
20 def close(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
21 self.closed = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
22
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
23 def fileno(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
24 return 42
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
25
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
26 class dummychannel:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
27 def __init__(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
28 self.socket = dummysocket()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
29
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
30 def close(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
31 self.socket.close()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
32
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
33 class exitingdummy:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
34 def __init__(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
35 pass
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
36
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
37 def handle_read_event(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
38 raise asyncore.ExitNow()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
39
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
40 handle_write_event = handle_read_event
47935
8da5d38ddca3 Fixed test for asyncore.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47907
diff changeset
41 handle_close = handle_read_event
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
42 handle_expt_event = handle_read_event
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
43
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
44 class crashingdummy:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
45 def __init__(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
46 self.error_handled = False
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
47
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
48 def handle_read_event(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
49 raise Exception()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
50
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
51 handle_write_event = handle_read_event
47935
8da5d38ddca3 Fixed test for asyncore.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47907
diff changeset
52 handle_close = handle_read_event
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
53 handle_expt_event = handle_read_event
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
54
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
55 def handle_error(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
56 self.error_handled = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
57
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
58 # used when testing senders; just collects what it gets until newline is sent
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
59 def capture_server(evt, buf, serv):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
60 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
61 serv.listen(5)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
62 conn, addr = serv.accept()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
63 except socket.timeout:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
64 pass
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
65 else:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
66 n = 200
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
67 while n > 0:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
68 r, w, e = select.select([conn], [], [])
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
69 if r:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
70 data = conn.recv(10)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
71 # keep everything except for the newline terminator
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
72 buf.write(data.replace('\n', ''))
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
73 if '\n' in data:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
74 break
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
75 n -= 1
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
76 time.sleep(0.01)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
77
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
78 conn.close()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
79 finally:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
80 serv.close()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
81 evt.set()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
82
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
83
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
84 class HelperFunctionTests(unittest.TestCase):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
85 def test_readwriteexc(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
86 # Check exception handling behavior of read, write and _exception
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
87
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
88 # check that ExitNow exceptions in the object handler method
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
89 # bubbles all the way up through asyncore read/write/_exception calls
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
90 tr1 = exitingdummy()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
91 self.assertRaises(asyncore.ExitNow, asyncore.read, tr1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
92 self.assertRaises(asyncore.ExitNow, asyncore.write, tr1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
93 self.assertRaises(asyncore.ExitNow, asyncore._exception, tr1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
94
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
95 # check that an exception other than ExitNow in the object handler
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
96 # method causes the handle_error method to get called
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
97 tr2 = crashingdummy()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
98 asyncore.read(tr2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
99 self.assertEqual(tr2.error_handled, True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
100
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
101 tr2 = crashingdummy()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
102 asyncore.write(tr2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
103 self.assertEqual(tr2.error_handled, True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
104
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
105 tr2 = crashingdummy()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
106 asyncore._exception(tr2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
107 self.assertEqual(tr2.error_handled, True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
108
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
109 # asyncore.readwrite uses constants in the select module that
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
110 # are not present in Windows systems (see this thread:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
111 # http://mail.python.org/pipermail/python-list/2001-October/109973.html)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
112 # These constants should be present as long as poll is available
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
113
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
114 if hasattr(select, 'poll'):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
115 def test_readwrite(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
116 # Check that correct methods are called by readwrite()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
117
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
118 attributes = ('read', 'expt', 'write', 'closed', 'error_handled')
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
119
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
120 expected = (
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
121 (select.POLLIN, 'read'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
122 (select.POLLPRI, 'expt'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
123 (select.POLLOUT, 'write'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
124 (select.POLLERR, 'closed'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
125 (select.POLLHUP, 'closed'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
126 (select.POLLNVAL, 'closed'),
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
127 )
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
128
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
129 class testobj:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
130 def __init__(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
131 self.read = False
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
132 self.write = False
47907
d7fd32ce07aa Fixed bugs 760475, 953599, and 1519.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47703
diff changeset
133 self.closed = False
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
134 self.expt = False
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
135 self.error_handled = False
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
136
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
137 def handle_read_event(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
138 self.read = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
139
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
140 def handle_write_event(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
141 self.write = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
142
47935
8da5d38ddca3 Fixed test for asyncore.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47907
diff changeset
143 def handle_close(self):
47907
d7fd32ce07aa Fixed bugs 760475, 953599, and 1519.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47703
diff changeset
144 self.closed = True
d7fd32ce07aa Fixed bugs 760475, 953599, and 1519.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 47703
diff changeset
145
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
146 def handle_expt_event(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
147 self.expt = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
148
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
149 def handle_error(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
150 self.error_handled = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
151
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
152 for flag, expectedattr in expected:
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
153 tobj = testobj()
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
154 self.assertEqual(getattr(tobj, expectedattr), False)
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
155 asyncore.readwrite(tobj, flag)
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
156
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
157 # Only the attribute modified by the routine we expect to be
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
158 # called should be True.
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
159 for attr in attributes:
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
160 self.assertEqual(getattr(tobj, attr), attr==expectedattr)
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
161
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
162 # check that ExitNow exceptions in the object handler method
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
163 # bubbles all the way up through asyncore readwrite call
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
164 tr1 = exitingdummy()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
165 self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
166
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
167 # check that an exception other than ExitNow in the object handler
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
168 # method causes the handle_error method to get called
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
169 tr2 = crashingdummy()
53067
f34281db47e6 Make test_asyncore tests match code changes introduced by the
R. David Murray <rdmurray@bitdance.com>
parents: 52630
diff changeset
170 self.assertEqual(tr2.error_handled, False)
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
171 asyncore.readwrite(tr2, flag)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
172 self.assertEqual(tr2.error_handled, True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
173
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
174 def test_closeall(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
175 self.closeall_check(False)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
176
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
177 def test_closeall_default(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
178 self.closeall_check(True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
179
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
180 def closeall_check(self, usedefault):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
181 # Check that close_all() closes everything in a given map
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
182
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
183 l = []
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
184 testmap = {}
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
185 for i in range(10):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
186 c = dummychannel()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
187 l.append(c)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
188 self.assertEqual(c.socket.closed, False)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
189 testmap[i] = c
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
190
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
191 if usedefault:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
192 socketmap = asyncore.socket_map
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
193 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
194 asyncore.socket_map = testmap
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
195 asyncore.close_all()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
196 finally:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
197 testmap, asyncore.socket_map = asyncore.socket_map, socketmap
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
198 else:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
199 asyncore.close_all(testmap)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
200
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
201 self.assertEqual(len(testmap), 0)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
202
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
203 for c in l:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
204 self.assertEqual(c.socket.closed, True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
205
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
206 def test_compact_traceback(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
207 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
208 raise Exception("I don't like spam!")
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
209 except:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
210 real_t, real_v, real_tb = sys.exc_info()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
211 r = asyncore.compact_traceback()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
212 else:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
213 self.fail("Expected exception")
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
214
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
215 (f, function, line), t, v, info = r
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
216 self.assertEqual(os.path.split(f)[-1], 'test_asyncore.py')
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
217 self.assertEqual(function, 'test_compact_traceback')
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
218 self.assertEqual(t, real_t)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
219 self.assertEqual(v, real_v)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
220 self.assertEqual(info, '[%s|%s|%s]' % (f, function, line))
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
221
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
222
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
223 class DispatcherTests(unittest.TestCase):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
224 def setUp(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
225 pass
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
226
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
227 def tearDown(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
228 asyncore.close_all()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
229
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
230 def test_basic(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
231 d = asyncore.dispatcher()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
232 self.assertEqual(d.readable(), True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
233 self.assertEqual(d.writable(), True)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
234
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
235 def test_repr(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
236 d = asyncore.dispatcher()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
237 self.assertEqual(repr(d), '<asyncore.dispatcher at %#x>' % id(d))
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
238
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
239 def test_log(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
240 d = asyncore.dispatcher()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
241
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
242 # capture output of dispatcher.log() (to stderr)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
243 fp = StringIO()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
244 stderr = sys.stderr
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
245 l1 = "Lovely spam! Wonderful spam!"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
246 l2 = "I don't like spam!"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
247 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
248 sys.stderr = fp
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
249 d.log(l1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
250 d.log(l2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
251 finally:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
252 sys.stderr = stderr
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
253
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
254 lines = fp.getvalue().splitlines()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
255 self.assertEquals(lines, ['log: %s' % l1, 'log: %s' % l2])
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
256
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
257 def test_log_info(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
258 d = asyncore.dispatcher()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
259
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
260 # capture output of dispatcher.log_info() (to stdout via print)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
261 fp = StringIO()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
262 stdout = sys.stdout
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
263 l1 = "Have you got anything without spam?"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
264 l2 = "Why can't she have egg bacon spam and sausage?"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
265 l3 = "THAT'S got spam in it!"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
266 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
267 sys.stdout = fp
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
268 d.log_info(l1, 'EGGS')
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
269 d.log_info(l2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
270 d.log_info(l3, 'SPAM')
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
271 finally:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
272 sys.stdout = stdout
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
273
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
274 lines = fp.getvalue().splitlines()
53119
ab75da266e57 Adjust test_asyncore to account for intentional asyncore behavior change
R. David Murray <rdmurray@bitdance.com>
parents: 53067
diff changeset
275 expected = ['EGGS: %s' % l1, 'info: %s' % l2, 'SPAM: %s' % l3]
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
276
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
277 self.assertEquals(lines, expected)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
278
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
279 def test_unhandled(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
280 d = asyncore.dispatcher()
52630
e555fd8c4b6e Fix for failing asyncore tests.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 48967
diff changeset
281 d.ignore_log_types = ()
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
282
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
283 # capture output of dispatcher.log_info() (to stdout via print)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
284 fp = StringIO()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
285 stdout = sys.stdout
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
286 try:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
287 sys.stdout = fp
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
288 d.handle_expt()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
289 d.handle_read()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
290 d.handle_write()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
291 d.handle_connect()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
292 d.handle_accept()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
293 finally:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
294 sys.stdout = stdout
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
295
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
296 lines = fp.getvalue().splitlines()
52630
e555fd8c4b6e Fix for failing asyncore tests.
Josiah Carlson <josiah.carlson@gmail.com>
parents: 48967
diff changeset
297 expected = ['warning: unhandled incoming priority event',
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
298 'warning: unhandled read event',
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
299 'warning: unhandled write event',
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
300 'warning: unhandled connect event',
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
301 'warning: unhandled accept event']
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
302 self.assertEquals(lines, expected)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
303
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
304
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
305
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
306 class dispatcherwithsend_noread(asyncore.dispatcher_with_send):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
307 def readable(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
308 return False
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
309
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
310 def handle_connect(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
311 pass
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
312
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
313 class DispatcherWithSendTests(unittest.TestCase):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
314 usepoll = False
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
315
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
316 def setUp(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
317 pass
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
318
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
319 def tearDown(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
320 asyncore.close_all()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
321
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
322 def test_send(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
323 self.evt = threading.Event()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
324 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
325 self.sock.settimeout(3)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
326 self.port = test_support.bind_port(self.sock)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
327
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
328 cap = StringIO()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
329 args = (self.evt, cap, self.sock)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
330 threading.Thread(target=capture_server, args=args).start()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
331
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
332 # wait a little longer for the server to initialize (it sometimes
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
333 # refuses connections on slow machines without this wait)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
334 time.sleep(0.2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
335
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
336 data = "Suppose there isn't a 16-ton weight?"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
337 d = dispatcherwithsend_noread()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
338 d.create_socket(socket.AF_INET, socket.SOCK_STREAM)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
339 d.connect((HOST, self.port))
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
340
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
341 # give time for socket to connect
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
342 time.sleep(0.1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
343
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
344 d.send(data)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
345 d.send(data)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
346 d.send('\n')
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
347
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
348 n = 1000
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
349 while d.out_buffer and n > 0:
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
350 asyncore.poll()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
351 n -= 1
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
352
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
353 self.evt.wait()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
354
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
355 self.assertEqual(cap.getvalue(), data*2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
356
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
357
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
358 class DispatcherWithSendTests_UsePoll(DispatcherWithSendTests):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
359 usepoll = True
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
360
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
361 if hasattr(asyncore, 'file_wrapper'):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
362 class FileWrapperTest(unittest.TestCase):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
363 def setUp(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
364 self.d = "It's not dead, it's sleeping!"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
365 file(TESTFN, 'w').write(self.d)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
366
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
367 def tearDown(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
368 unlink(TESTFN)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
369
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
370 def test_recv(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
371 fd = os.open(TESTFN, os.O_RDONLY)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
372 w = asyncore.file_wrapper(fd)
48967
c7fd0e881c45 Issue #3759: test_asyncore.py leaked handle.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 47935
diff changeset
373 os.close(fd)
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
374
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
375 self.assertNotEqual(w.fd, fd)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
376 self.assertNotEqual(w.fileno(), fd)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
377 self.assertEqual(w.recv(13), "It's not dead")
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
378 self.assertEqual(w.read(6), ", it's")
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
379 w.close()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
380 self.assertRaises(OSError, w.read, 1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
381
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
382 def test_send(self):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
383 d1 = "Come again?"
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
384 d2 = "I want to buy some cheese."
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
385 fd = os.open(TESTFN, os.O_WRONLY | os.O_APPEND)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
386 w = asyncore.file_wrapper(fd)
48967
c7fd0e881c45 Issue #3759: test_asyncore.py leaked handle.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 47935
diff changeset
387 os.close(fd)
47703
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
388
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
389 w.write(d1)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
390 w.send(d2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
391 w.close()
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
392 self.assertEqual(file(TESTFN).read(), self.d + d1 + d2)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
393
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
394
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
395 def test_main():
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
396 tests = [HelperFunctionTests, DispatcherTests, DispatcherWithSendTests,
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
397 DispatcherWithSendTests_UsePoll]
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
398 if hasattr(asyncore, 'file_wrapper'):
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
399 tests.append(FileWrapperTest)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
400
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
401 run_unittest(*tests)
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
402
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
403 if __name__ == "__main__":
f36f092dbe97 Run svneol.py on all sources.
Martin v. Löwis <martin@v.loewis.de>
parents: 47554
diff changeset
404 test_main()