]> granicus.if.org Git - python/commitdiff
Issue #5824: Fix DatagramRequestHandler tests by binding the client socket
authorMartin Panter <vadmium+py@gmail.com>
Wed, 24 Feb 2016 04:45:33 +0000 (04:45 +0000)
committerMartin Panter <vadmium+py@gmail.com>
Wed, 24 Feb 2016 04:45:33 +0000 (04:45 +0000)
Lib/SocketServer.py
Lib/test/test_socketserver.py

index 80130b7a80cf1734ed009dd33516df8acda61c74..d324a21c1b8e9237160a47540d418e467c4213d4 100644 (file)
@@ -121,11 +121,6 @@ BaseServer:
 
 # Author of the BaseServer patch: Luke Kenneth Casson Leighton
 
-# XXX Warning!
-# There is a test suite for this module, but it cannot be run by the
-# standard regression test.
-# To run it manually, run Lib/test/test_socketserver.py.
-
 __version__ = "0.4"
 
 
@@ -721,9 +716,6 @@ class StreamRequestHandler(BaseRequestHandler):
 
 class DatagramRequestHandler(BaseRequestHandler):
 
-    # XXX Regrettably, I cannot get this working on Linux;
-    # s.recvfrom() doesn't return a meaningful client address.
-
     """Define self.rfile and self.wfile for datagram sockets."""
 
     def setup(self):
index 2550290405e69d5d6f8922a02236246468ba2285..d645d208dcadbb8c84bf6635735195b1945f5c49 100644 (file)
@@ -175,6 +175,8 @@ class SocketServerTest(unittest.TestCase):
 
     def dgram_examine(self, proto, addr):
         s = socket.socket(proto, socket.SOCK_DGRAM)
+        if HAVE_UNIX_SOCKETS and proto == socket.AF_UNIX:
+            s.bind(self.pickaddr(proto))
         s.sendto(TEST_STR, addr)
         buf = data = receive(s, 100)
         while data and '\n' not in buf:
@@ -269,27 +271,24 @@ class SocketServerTest(unittest.TestCase):
             # Make sure select was called again:
             self.assertGreater(mock_select.called, 1)
 
-    # Alas, on Linux (at least) recvfrom() doesn't return a meaningful
-    # client address so this cannot work:
-
-    # @requires_unix_sockets
-    # def test_UnixDatagramServer(self):
-    #     self.run_server(SocketServer.UnixDatagramServer,
-    #                     SocketServer.DatagramRequestHandler,
-    #                     self.dgram_examine)
-    #
-    # @requires_unix_sockets
-    # def test_ThreadingUnixDatagramServer(self):
-    #     self.run_server(SocketServer.ThreadingUnixDatagramServer,
-    #                     SocketServer.DatagramRequestHandler,
-    #                     self.dgram_examine)
-    #
-    # @requires_unix_sockets
-    # @requires_forking
-    # def test_ForkingUnixDatagramServer(self):
-    #     self.run_server(SocketServer.ForkingUnixDatagramServer,
-    #                     SocketServer.DatagramRequestHandler,
-    #                     self.dgram_examine)
+    @requires_unix_sockets
+    def test_UnixDatagramServer(self):
+        self.run_server(SocketServer.UnixDatagramServer,
+                        SocketServer.DatagramRequestHandler,
+                        self.dgram_examine)
+
+    @requires_unix_sockets
+    def test_ThreadingUnixDatagramServer(self):
+        self.run_server(SocketServer.ThreadingUnixDatagramServer,
+                        SocketServer.DatagramRequestHandler,
+                        self.dgram_examine)
+
+    @requires_unix_sockets
+    @requires_forking
+    def test_ForkingUnixDatagramServer(self):
+        self.run_server(ForkingUnixDatagramServer,
+                        SocketServer.DatagramRequestHandler,
+                        self.dgram_examine)
 
     @reap_threads
     def test_shutdown(self):