From 92d9739f2d936039fef138cfe46ed2aaa41ecdb4 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Sun, 29 Nov 2009 02:18:18 -0500 Subject: [PATCH] Greened asyncore. --- eventlet/green/asyncore.py | 12 +++++++++ tests/stdlib/test_asyncore.py | 51 +++++++++++++++++++++++++++++++++++ tests/stdlib/test_ftplib.py | 2 ++ 3 files changed, 65 insertions(+) create mode 100644 eventlet/green/asyncore.py create mode 100644 tests/stdlib/test_asyncore.py diff --git a/eventlet/green/asyncore.py b/eventlet/green/asyncore.py new file mode 100644 index 0000000..53ca59f --- /dev/null +++ b/eventlet/green/asyncore.py @@ -0,0 +1,12 @@ +from eventlet import patcher +from eventlet.green import select +from eventlet.green import socket +from eventlet.green import time + +patcher.inject("asyncore", + globals(), + ('select', select), + ('socket', socket), + ('time', time)) + +del patcher \ No newline at end of file diff --git a/tests/stdlib/test_asyncore.py b/tests/stdlib/test_asyncore.py new file mode 100644 index 0000000..0617c87 --- /dev/null +++ b/tests/stdlib/test_asyncore.py @@ -0,0 +1,51 @@ +from eventlet import patcher +from eventlet.green import asyncore +from eventlet.green import select +from eventlet.green import socket +from eventlet.green import threading +from eventlet.green import time + +patcher.inject("test.test_asyncore", + globals(), + ('asyncore', asyncore), + ('select', select), + ('socket', socket), + ('threading', threading), + ('time', time)) + +def new_closeall_check(self, usedefault): + # Check that close_all() closes everything in a given map + + l = [] + testmap = {} + for i in range(10): + c = dummychannel() + l.append(c) + self.assertEqual(c.socket.closed, False) + testmap[i] = c + + if usedefault: + # the only change we make is to not assign to asyncore.socket_map + # because doing so fails to assign to the real asyncore's socket_map + # and thus the test fails + socketmap = asyncore.socket_map.copy() + try: + asyncore.socket_map.clear() + asyncore.socket_map.update(testmap) + asyncore.close_all() + finally: + testmap = asyncore.socket_map.copy() + asyncore.socket_map.clear() + asyncore.socket_map.update(socketmap) + else: + asyncore.close_all(testmap) + + self.assertEqual(len(testmap), 0) + + for c in l: + self.assertEqual(c.socket.closed, True) + +HelperFunctionTests.closeall_check = new_closeall_check + +if __name__ == "__main__": + test_main() \ No newline at end of file diff --git a/tests/stdlib/test_ftplib.py b/tests/stdlib/test_ftplib.py index 7317af4..0bff132 100644 --- a/tests/stdlib/test_ftplib.py +++ b/tests/stdlib/test_ftplib.py @@ -1,10 +1,12 @@ from eventlet import patcher +from eventlet.green import asyncore from eventlet.green import ftplib from eventlet.green import threading from eventlet.green import socket patcher.inject('test.test_ftplib', globals(), + ('asyncore', asyncore), ('ftplib', ftplib), ('socket', socket), ('threading', threading))