Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_socketserver.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 4298d6e79ecb |
| children | 8c2635afbfe1 |
| rev | line source |
|---|---|
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
1 """ |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
2 Test suite for SocketServer.py. |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
3 """ |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
5 import contextlib |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
6 import imp |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
7 import os |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 import select |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
9 import signal |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
10 import socket |
|
76167
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
11 import select |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
12 import errno |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
13 import tempfile |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
14 import unittest |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
15 import SocketServer |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
16 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
17 import test.test_support |
|
56904
204f33d42762
Reduce the probability of refleaks in test_socketserver.
Antoine Pitrou <solipsis@pitrou.net>
parents:
52355
diff
changeset
|
18 from test.test_support import reap_children, reap_threads, verbose |
|
61046
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60965
diff
changeset
|
19 try: |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60965
diff
changeset
|
20 import threading |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60965
diff
changeset
|
21 except ImportError: |
|
3a0484200034
Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60965
diff
changeset
|
22 threading = None |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
23 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
24 test.test_support.requires("network") |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
26 TEST_STR = "hello world\n" |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46025
diff
changeset
|
27 HOST = test.test_support.HOST |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
28 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
29 HAVE_UNIX_SOCKETS = hasattr(socket, "AF_UNIX") |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
30 HAVE_FORKING = hasattr(os, "fork") and os.name != "os2" |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
31 |
|
45669
436105125445
Fix test_socketserver on Windows after r61099 added several signal.alarm()
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45551
diff
changeset
|
32 def signal_alarm(n): |
|
436105125445
Fix test_socketserver on Windows after r61099 added several signal.alarm()
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45551
diff
changeset
|
33 """Call signal.alarm when it exists (i.e. not on Windows).""" |
|
436105125445
Fix test_socketserver on Windows after r61099 added several signal.alarm()
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45551
diff
changeset
|
34 if hasattr(signal, 'alarm'): |
|
436105125445
Fix test_socketserver on Windows after r61099 added several signal.alarm()
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45551
diff
changeset
|
35 signal.alarm(n) |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 |
|
76168
463fd270c5de
Fix flakiness in test_socketserver
Antoine Pitrou <solipsis@pitrou.net>
parents:
76167
diff
changeset
|
37 # Remember real select() to avoid interferences with mocking |
|
463fd270c5de
Fix flakiness in test_socketserver
Antoine Pitrou <solipsis@pitrou.net>
parents:
76167
diff
changeset
|
38 _real_select = select.select |
|
463fd270c5de
Fix flakiness in test_socketserver
Antoine Pitrou <solipsis@pitrou.net>
parents:
76167
diff
changeset
|
39 |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 def receive(sock, n, timeout=20): |
|
76168
463fd270c5de
Fix flakiness in test_socketserver
Antoine Pitrou <solipsis@pitrou.net>
parents:
76167
diff
changeset
|
41 r, w, x = _real_select([sock], [], [], timeout) |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 if sock in r: |
|
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 return sock.recv(n) |
|
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 else: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
27020
diff
changeset
|
45 raise RuntimeError, "timed out on %r" % (sock,) |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 |
|
45141
3850d13bf96b
Let test_socketserver pass on win32, which does not have AF_UNIX sockets.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
45117
diff
changeset
|
47 if HAVE_UNIX_SOCKETS: |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
48 class ForkingUnixStreamServer(SocketServer.ForkingMixIn, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
49 SocketServer.UnixStreamServer): |
|
45141
3850d13bf96b
Let test_socketserver pass on win32, which does not have AF_UNIX sockets.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
45117
diff
changeset
|
50 pass |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
52 class ForkingUnixDatagramServer(SocketServer.ForkingMixIn, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
53 SocketServer.UnixDatagramServer): |
|
45141
3850d13bf96b
Let test_socketserver pass on win32, which does not have AF_UNIX sockets.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
45117
diff
changeset
|
54 pass |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
55 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
56 |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
57 @contextlib.contextmanager |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
58 def simple_subprocess(testcase): |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
59 pid = os.fork() |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
60 if pid == 0: |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
61 # Don't throw an exception; it would be caught by the test harness. |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
62 os._exit(72) |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
63 yield None |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
64 pid2, status = os.waitpid(pid, 0) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61926
diff
changeset
|
65 testcase.assertEqual(pid2, pid) |
|
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61926
diff
changeset
|
66 testcase.assertEqual(72 << 8, status) |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
67 |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
68 |
|
61926
49d497790607
Issue #7449: Skip test_socketserver if threading support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61046
diff
changeset
|
69 @unittest.skipUnless(threading, 'Threading required for this test.') |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
70 class SocketServerTest(unittest.TestCase): |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
71 """Test all socket servers.""" |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
72 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
73 def setUp(self): |
|
71326
d3cebbd500aa
Issue #12250: test_socketserver uses a timeout of 60 seconds instead of 20
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
74 signal_alarm(60) # Kill deadlocks after 60 seconds. |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
75 self.port_seed = 0 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
76 self.test_files = [] |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
77 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
78 def tearDown(self): |
|
46025
9634c17e8fe5
Try to prevent the alarm going off early in tearDown
Neal Norwitz <nnorwitz@gmail.com>
parents:
45944
diff
changeset
|
79 signal_alarm(0) # Didn't deadlock. |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
80 reap_children() |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
81 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
82 for fn in self.test_files: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
83 try: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
84 os.remove(fn) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
85 except os.error: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
86 pass |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
87 self.test_files[:] = [] |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
88 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
89 def pickaddr(self, proto): |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
90 if proto == socket.AF_INET: |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
91 return (HOST, 0) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
92 else: |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
93 # XXX: We need a way to tell AF_UNIX to pick its own name |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
94 # like AF_INET provides port==0. |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
95 dir = None |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
96 if os.name == 'os2': |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
97 dir = '\socket' |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
98 fn = tempfile.mktemp(prefix='unix_socket.', dir=dir) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
99 if os.name == 'os2': |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
100 # AF_UNIX socket names on OS/2 require a specific prefix |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
101 # which can't include a drive letter and must also use |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
102 # backslashes as directory separators |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
103 if fn[1] == ':': |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
104 fn = fn[2:] |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
105 if fn[0] in (os.sep, os.altsep): |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
106 fn = fn[1:] |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
107 if os.sep == '/': |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
108 fn = fn.replace(os.sep, os.altsep) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
109 else: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
110 fn = fn.replace(os.altsep, os.sep) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
111 self.test_files.append(fn) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
112 return fn |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
114 def make_server(self, addr, svrcls, hdlrbase): |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
115 class MyServer(svrcls): |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
116 def handle_error(self, request, client_address): |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
117 self.close_request(request) |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
118 self.server_close() |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
119 raise |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
120 |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
121 class MyHandler(hdlrbase): |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
122 def handle(self): |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
123 line = self.rfile.readline() |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
124 self.wfile.write(line) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
125 |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
126 if verbose: print "creating server" |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
127 server = MyServer(addr, MyHandler) |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61926
diff
changeset
|
128 self.assertEqual(server.server_address, server.socket.getsockname()) |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
129 return server |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
130 |
|
56904
204f33d42762
Reduce the probability of refleaks in test_socketserver.
Antoine Pitrou <solipsis@pitrou.net>
parents:
52355
diff
changeset
|
131 @reap_threads |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
132 def run_server(self, svrcls, hdlrbase, testfunc): |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
133 server = self.make_server(self.pickaddr(svrcls.address_family), |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
134 svrcls, hdlrbase) |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
135 # We had the OS pick a port, so pull the real address out of |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
136 # the server. |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
137 addr = server.server_address |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
138 if verbose: |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
139 print "server created" |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
140 print "ADDR =", addr |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
141 print "CLASS =", svrcls |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
142 t = threading.Thread( |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
143 name='%s serving' % svrcls, |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
144 target=server.serve_forever, |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
145 # Short poll interval to make the test finish quickly. |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
146 # Time between requests is short enough that we won't wake |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
147 # up spuriously too many times. |
|
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
148 kwargs={'poll_interval':0.01}) |
|
48289
024b2b984866
change a few uses of the threading APIs
Benjamin Peterson <benjamin@python.org>
parents:
47598
diff
changeset
|
149 t.daemon = True # In case this function raises. |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
150 t.start() |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
151 if verbose: print "server running" |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
152 for i in range(3): |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
153 if verbose: print "test client", i |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
154 testfunc(svrcls.address_family, addr) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
155 if verbose: print "waiting for server" |
|
45702
a8754c0db53f
Progress on issue #1193577 by adding a polling .shutdown() method to
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45669
diff
changeset
|
156 server.shutdown() |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
157 t.join() |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
158 if verbose: print "done" |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
159 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
160 def stream_examine(self, proto, addr): |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
161 s = socket.socket(proto, socket.SOCK_STREAM) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
162 s.connect(addr) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
163 s.sendall(TEST_STR) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
164 buf = data = receive(s, 100) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
165 while data and '\n' not in buf: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
166 data = receive(s, 100) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
167 buf += data |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61926
diff
changeset
|
168 self.assertEqual(buf, TEST_STR) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
169 s.close() |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
170 |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
171 def dgram_examine(self, proto, addr): |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
172 s = socket.socket(proto, socket.SOCK_DGRAM) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
173 s.sendto(TEST_STR, addr) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
174 buf = data = receive(s, 100) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
175 while data and '\n' not in buf: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
176 data = receive(s, 100) |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
177 buf += data |
|
66348
614c84670c63
Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61926
diff
changeset
|
178 self.assertEqual(buf, TEST_STR) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
179 s.close() |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
181 def test_TCPServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
182 self.run_server(SocketServer.TCPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
183 SocketServer.StreamRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
184 self.stream_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
185 |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
186 def test_ThreadingTCPServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
187 self.run_server(SocketServer.ThreadingTCPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
188 SocketServer.StreamRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
189 self.stream_examine) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
190 |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
191 if HAVE_FORKING: |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
192 def test_ForkingTCPServer(self): |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
193 with simple_subprocess(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
194 self.run_server(SocketServer.ForkingTCPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
195 SocketServer.StreamRequestHandler, |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
196 self.stream_examine) |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
197 |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
198 if HAVE_UNIX_SOCKETS: |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
199 def test_UnixStreamServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
200 self.run_server(SocketServer.UnixStreamServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
201 SocketServer.StreamRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
202 self.stream_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
203 |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
204 def test_ThreadingUnixStreamServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
205 self.run_server(SocketServer.ThreadingUnixStreamServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
206 SocketServer.StreamRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
207 self.stream_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
208 |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
209 if HAVE_FORKING: |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
210 def test_ForkingUnixStreamServer(self): |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
211 with simple_subprocess(self): |
|
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
212 self.run_server(ForkingUnixStreamServer, |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
213 SocketServer.StreamRequestHandler, |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
214 self.stream_examine) |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
215 |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
216 def test_UDPServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
217 self.run_server(SocketServer.UDPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
218 SocketServer.DatagramRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
219 self.dgram_examine) |
|
39505
e90e7e768cb3
Fix the test for SocketServer so it should pass on cygwin and not fail
Neal Norwitz <nnorwitz@gmail.com>
parents:
38961
diff
changeset
|
220 |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
221 def test_ThreadingUDPServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
222 self.run_server(SocketServer.ThreadingUDPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
223 SocketServer.DatagramRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
224 self.dgram_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
225 |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
226 if HAVE_FORKING: |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
227 def test_ForkingUDPServer(self): |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
228 with simple_subprocess(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
229 self.run_server(SocketServer.ForkingUDPServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
230 SocketServer.DatagramRequestHandler, |
|
45551
cc220745e4e5
Prevent SocketServer.ForkingMixIn from waiting on child processes that it
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45544
diff
changeset
|
231 self.dgram_examine) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
232 |
|
76167
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
233 @contextlib.contextmanager |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
234 def mocked_select_module(self): |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
235 """Mocks the select.select() call to raise EINTR for first call""" |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
236 old_select = select.select |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
237 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
238 class MockSelect: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
239 def __init__(self): |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
240 self.called = 0 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
241 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
242 def __call__(self, *args): |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
243 self.called += 1 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
244 if self.called == 1: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
245 # raise the exception on first call |
|
76173
4298d6e79ecb
Fix the patch for issue #7978: select() raises select.error before 3.3, not OSError.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76168
diff
changeset
|
246 raise select.error(errno.EINTR, os.strerror(errno.EINTR)) |
|
76167
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
247 else: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
248 # Return real select value for consecutive calls |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
249 return old_select(*args) |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
250 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
251 select.select = MockSelect() |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
252 try: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
253 yield select.select |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
254 finally: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
255 select.select = old_select |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
256 |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
257 def test_InterruptServerSelectCall(self): |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
258 with self.mocked_select_module() as mock_select: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
259 pid = self.run_server(SocketServer.TCPServer, |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
260 SocketServer.StreamRequestHandler, |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
261 self.stream_examine) |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
262 # Make sure select was called again: |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
263 self.assertGreater(mock_select.called, 1) |
|
d941d1fcc6e6
Issue #7978: socketserver now restarts the select() call when EINTR is returned.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73347
diff
changeset
|
264 |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
265 # Alas, on Linux (at least) recvfrom() doesn't return a meaningful |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
266 # client address so this cannot work: |
|
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
267 |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
268 # if HAVE_UNIX_SOCKETS: |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
269 # def test_UnixDatagramServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
270 # self.run_server(SocketServer.UnixDatagramServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
271 # SocketServer.DatagramRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
272 # self.dgram_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
273 # |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
274 # def test_ThreadingUnixDatagramServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
275 # self.run_server(SocketServer.ThreadingUnixDatagramServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
276 # SocketServer.DatagramRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
277 # self.dgram_examine) |
|
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
278 # |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
279 # if HAVE_FORKING: |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
280 # def test_ForkingUnixDatagramServer(self): |
|
47241
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
281 # self.run_server(SocketServer.ForkingUnixDatagramServer, |
|
ba1fa511b72d
socketserver renaming reversal part 3: move the module into the right
Georg Brandl <georg@python.org>
parents:
46929
diff
changeset
|
282 # SocketServer.DatagramRequestHandler, |
|
45544
8aaf1495da39
Speed test_socketserver up from 28.739s to 0.226s, simplify the logic, and make
Jeffrey Yasskin <jyasskin@gmail.com>
parents:
45468
diff
changeset
|
283 # self.dgram_examine) |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
284 |
|
60965
5f1962220792
Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown,
Antoine Pitrou <solipsis@pitrou.net>
parents:
58817
diff
changeset
|
285 @reap_threads |
|
60967
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
286 def test_shutdown(self): |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
287 # Issue #2302: shutdown() should always succeed in making an |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
288 # other thread leave serve_forever(). |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
289 class MyServer(SocketServer.TCPServer): |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
290 pass |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
291 |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
292 class MyHandler(SocketServer.StreamRequestHandler): |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
293 pass |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
294 |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
295 threads = [] |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
296 for i in range(20): |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
297 s = MyServer((HOST, 0), MyHandler) |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
298 t = threading.Thread( |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
299 name='MyServer serving', |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
300 target=s.serve_forever, |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
301 kwargs={'poll_interval':0.01}) |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
302 t.daemon = True # In case this function raises. |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
303 threads.append((t, s)) |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
304 for t, s in threads: |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
305 t.start() |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
306 s.shutdown() |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
307 for t, s in threads: |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
308 t.join() |
|
ea43f7f6e84c
Merged revisions 80484 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
48289
diff
changeset
|
309 |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
310 |
|
19949
04ce2a48c0a8
Rework akin to test_threaded_import, so that this can run under regrtest.
Tim Peters <tim.peters@gmail.com>
parents:
18545
diff
changeset
|
311 def test_main(): |
|
04ce2a48c0a8
Rework akin to test_threaded_import, so that this can run under regrtest.
Tim Peters <tim.peters@gmail.com>
parents:
18545
diff
changeset
|
312 if imp.lock_held(): |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
313 # If the import lock is held, the threads will hang |
|
52355
228cfb6e2900
fix incorrect auto-translation of TestSkipped -> unittest.SkipTest
Benjamin Peterson <benjamin@python.org>
parents:
52353
diff
changeset
|
314 raise unittest.SkipTest("can't run when import lock is held") |
|
19949
04ce2a48c0a8
Rework akin to test_threaded_import, so that this can run under regrtest.
Tim Peters <tim.peters@gmail.com>
parents:
18545
diff
changeset
|
315 |
|
45109
a81ef63a1009
Rewrite test_socketserver as unittest, written for GHOP by Benjamin Petersen.
Georg Brandl <georg@python.org>
parents:
42861
diff
changeset
|
316 test.test_support.run_unittest(SocketServerTest) |
|
18443
9c04e23f8d43
A test suite for SocketServer.py that exposes the various bugs just
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 |
|
19949
04ce2a48c0a8
Rework akin to test_threaded_import, so that this can run under regrtest.
Tim Peters <tim.peters@gmail.com>
parents:
18545
diff
changeset
|
318 if __name__ == "__main__": |
|
04ce2a48c0a8
Rework akin to test_threaded_import, so that this can run under regrtest.
Tim Peters <tim.peters@gmail.com>
parents:
18545
diff
changeset
|
319 test_main() |
