summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_os.py
diff options
context:
space:
mode:
authorGiampaolo Rodola' <g.rodola@gmail.com>2011-05-18 19:28:39 (GMT)
committerGiampaolo Rodola' <g.rodola@gmail.com>2011-05-18 19:28:39 (GMT)
commit566f8a646e937c17ff5bc7a8abc7af3c332b66ec (patch)
tree81f43bb3bd12c4a6cff43bdb5013180fb022c625 /Lib/test/test_os.py
parent0d38f2e65fa627c89fc4eb5cb9246f89179413ea (diff)
downloadcpython-566f8a646e937c17ff5bc7a8abc7af3c332b66ec.zip
cpython-566f8a646e937c17ff5bc7a8abc7af3c332b66ec.tar.gz
cpython-566f8a646e937c17ff5bc7a8abc7af3c332b66ec.tar.bz2
os.sendfile() test: fix "AttributeError: 'NoneType' object has no attribute 'Thread'" when running tests with --without-threads option.
reference: http://bugs.python.org/issue10882#msg136257
Diffstat (limited to 'Lib/test/test_os.py')
-rw-r--r--Lib/test/test_os.py147
1 files changed, 74 insertions, 73 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index aa9ff5d..82a29fe 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1309,89 +1309,90 @@ class ProgramPriorityTests(unittest.TestCase):
raise
-class SendfileTestServer(asyncore.dispatcher, threading.Thread):
+if threading is not None:
+ class SendfileTestServer(asyncore.dispatcher, threading.Thread):
- class Handler(asynchat.async_chat):
+ class Handler(asynchat.async_chat):
- def __init__(self, conn):
- asynchat.async_chat.__init__(self, conn)
- self.in_buffer = []
- self.closed = False
- self.push(b"220 ready\r\n")
+ def __init__(self, conn):
+ asynchat.async_chat.__init__(self, conn)
+ self.in_buffer = []
+ self.closed = False
+ self.push(b"220 ready\r\n")
- def handle_read(self):
- data = self.recv(4096)
- self.in_buffer.append(data)
+ def handle_read(self):
+ data = self.recv(4096)
+ self.in_buffer.append(data)
- def get_data(self):
- return b''.join(self.in_buffer)
+ def get_data(self):
+ return b''.join(self.in_buffer)
- def handle_close(self):
+ def handle_close(self):
+ self.close()
+ self.closed = True
+
+ def handle_error(self):
+ raise
+
+ def __init__(self, address):
+ threading.Thread.__init__(self)
+ asyncore.dispatcher.__init__(self)
+ self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.bind(address)
+ self.listen(5)
+ self.host, self.port = self.socket.getsockname()[:2]
+ self.handler_instance = None
+ self._active = False
+ self._active_lock = threading.Lock()
+
+ # --- public API
+
+ @property
+ def running(self):
+ return self._active
+
+ def start(self):
+ assert not self.running
+ self.__flag = threading.Event()
+ threading.Thread.start(self)
+ self.__flag.wait()
+
+ def stop(self):
+ assert self.running
+ self._active = False
+ self.join()
+
+ def wait(self):
+ # wait for handler connection to be closed, then stop the server
+ while not getattr(self.handler_instance, "closed", False):
+ time.sleep(0.001)
+ self.stop()
+
+ # --- internals
+
+ def run(self):
+ self._active = True
+ self.__flag.set()
+ while self._active and asyncore.socket_map:
+ self._active_lock.acquire()
+ asyncore.loop(timeout=0.001, count=1)
+ self._active_lock.release()
+ asyncore.close_all()
+
+ def handle_accept(self):
+ conn, addr = self.accept()
+ self.handler_instance = self.Handler(conn)
+
+ def handle_connect(self):
self.close()
- self.closed = True
+ handle_read = handle_connect
+
+ def writable(self):
+ return 0
def handle_error(self):
raise
- def __init__(self, address):
- threading.Thread.__init__(self)
- asyncore.dispatcher.__init__(self)
- self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
- self.bind(address)
- self.listen(5)
- self.host, self.port = self.socket.getsockname()[:2]
- self.handler_instance = None
- self._active = False
- self._active_lock = threading.Lock()
-
- # --- public API
-
- @property
- def running(self):
- return self._active
-
- def start(self):
- assert not self.running
- self.__flag = threading.Event()
- threading.Thread.start(self)
- self.__flag.wait()
-
- def stop(self):
- assert self.running
- self._active = False
- self.join()
-
- def wait(self):
- # wait for handler connection to be closed, then stop the server
- while not getattr(self.handler_instance, "closed", False):
- time.sleep(0.001)
- self.stop()
-
- # --- internals
-
- def run(self):
- self._active = True
- self.__flag.set()
- while self._active and asyncore.socket_map:
- self._active_lock.acquire()
- asyncore.loop(timeout=0.001, count=1)
- self._active_lock.release()
- asyncore.close_all()
-
- def handle_accept(self):
- conn, addr = self.accept()
- self.handler_instance = self.Handler(conn)
-
- def handle_connect(self):
- self.close()
- handle_read = handle_connect
-
- def writable(self):
- return 0
-
- def handle_error(self):
- raise
-
@unittest.skipUnless(threading is not None, "test needs threading module")
@unittest.skipUnless(hasattr(os, 'sendfile'), "test needs os.sendfile()")