[pypy-svn] r20995 - in pypy/dist/pypy: module/_socket/test translator/c/test

nik at codespeak.net nik at codespeak.net
Sat Dec 10 13:37:09 CET 2005


Author: nik
Date: Sat Dec 10 13:37:06 2005
New Revision: 20995

Modified:
   pypy/dist/pypy/module/_socket/test/echoserver.py
   pypy/dist/pypy/translator/c/test/test_ext__socket_conn.py
Log:
(ale, nik)
our test echo server works, but we still don't manage to shutdown the server process
properly ... the combination of the subprocess module with python's telnetlib or
socket seems to be a problem.


Modified: pypy/dist/pypy/module/_socket/test/echoserver.py
==============================================================================
--- pypy/dist/pypy/module/_socket/test/echoserver.py	(original)
+++ pypy/dist/pypy/module/_socket/test/echoserver.py	Sat Dec 10 13:37:06 2005
@@ -4,6 +4,19 @@
 # user-accessible port
 PORT = 8037
 
+class EchoServer(SocketServer.TCPServer):
+
+    def __init__(self, *args, **kwargs):
+        SocketServer.TCPServer.__init__(self, *args, **kwargs)
+        self.stop = False
+        
+    def handle_error(self, request, client_address):
+        self.stop = True
+
+    def serve(self):
+        while not self.stop:
+            self.handle_request()
+
 class EchoRequestHandler(SocketServer.StreamRequestHandler):
 
     def handle(self):
@@ -14,9 +27,9 @@
                 char = self.rfile.read(1)
                 client_string += char
             if client_string.startswith("shutdown"):
-                sys.exit(1)
+                raise RuntimeError()
             self.wfile.write(client_string)
 
 if __name__ == "__main__":
-    server = SocketServer.TCPServer(("", PORT), EchoRequestHandler)
-    server.serve_forever()
+    server = EchoServer(("", PORT), EchoRequestHandler)
+    server.serve()

Modified: pypy/dist/pypy/translator/c/test/test_ext__socket_conn.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_ext__socket_conn.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_ext__socket_conn.py	Sat Dec 10 13:37:06 2005
@@ -11,20 +11,21 @@
 def setup_module(mod):
     import pypy.module._socket.rpython.exttable   # for declare()/declaretype()
     serverpath = os.path.join(autopath.pypydir, "module/_socket/test/echoserver.py")
-    mod.server_pid = subprocess.Popen([sys.executable, serverpath]).pid
+    mod.process = subprocess.Popen([sys.executable, serverpath])
 
 def teardown_module(mod):
     import telnetlib
     tn = telnetlib.Telnet(HOST, PORT)
     tn.write("shutdown\n")
     tn.close()
+    del tn
+    del mod.process
 
-def DONOT_test_connect():
+def test_connect():
     import os
     from pypy.module._socket.rpython import rsocket
     def does_stuff():
         fd = rsocket.newsocket(_socket.AF_INET, _socket.SOCK_STREAM, 0)
-        # XXX need to think of a test without connecting to outside servers
         rsocket.connect(fd, (HOST, PORT, 0, 0))
         sockname = rsocket.getpeername(fd)
         os.close(fd)



More information about the Pypy-commit mailing list