[Python-checkins] cpython (3.4): Make some tests more frienly to MemoryError.

serhiy.storchaka python-checkins at python.org
Sun Mar 29 18:24:18 CEST 2015


https://hg.python.org/cpython/rev/51e906518606
changeset: 95241:51e906518606
branch: 3.4
parent: 95218:c663dbb84c8c
user: Serhiy Storchaka <storchaka at gmail.com>
date: Sat Mar 28 20:38:37 2015 +0200
summary:
 Make some tests more frienly to MemoryError.
Free memory, unlock hanging threads.
files:
 Lib/ctypes/test/test_find.py | 14 ++++++++++++--
 Lib/ctypes/test/test_pointers.py | 4 ++--
 Lib/test/lock_tests.py | 8 ++++++--
 Lib/test/test_gc.py | 10 ++++++----
 Lib/test/test_io.py | 15 +++++++++++----
 Lib/test/test_itertools.py | 8 ++++++--
 6 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/Lib/ctypes/test/test_find.py b/Lib/ctypes/test/test_find.py
--- a/Lib/ctypes/test/test_find.py
+++ b/Lib/ctypes/test/test_find.py
@@ -30,15 +30,25 @@
 
 cls.gl = cls.glu = cls.gle = None
 if lib_gl:
- cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
+ try:
+ cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
+ except OSError:
+ pass
 if lib_glu:
- cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
+ try:
+ cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
+ except OSError:
+ pass
 if lib_gle:
 try:
 cls.gle = CDLL(lib_gle)
 except OSError:
 pass
 
+ @classmethod
+ def tearDownClass(cls):
+ cls.gl = cls.glu = cls.gle = None
+
 def test_gl(self):
 if self.gl is None:
 self.skipTest('lib_gl not available')
diff --git a/Lib/ctypes/test/test_pointers.py b/Lib/ctypes/test/test_pointers.py
--- a/Lib/ctypes/test/test_pointers.py
+++ b/Lib/ctypes/test/test_pointers.py
@@ -7,8 +7,6 @@
 c_long, c_ulong, c_longlong, c_ulonglong, c_double, c_float]
 python_types = [int, int, int, int, int, int,
 int, int, int, int, float, float]
-LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
-large_string = 'T' * 2 ** 25
 
 class PointersTestCase(unittest.TestCase):
 
@@ -191,9 +189,11 @@
 self.assertEqual(bool(mth), True)
 
 def test_pointer_type_name(self):
+ LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
 self.assertTrue(POINTER(LargeNamedType))
 
 def test_pointer_type_str_name(self):
+ large_string = 'T' * 2 ** 25
 self.assertTrue(POINTER(large_string))
 
 if __name__ == '__main__':
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -39,8 +39,12 @@
 self.finished.append(tid)
 while not self._can_exit:
 _wait()
- for i in range(n):
- start_new_thread(task, ())
+ try:
+ for i in range(n):
+ start_new_thread(task, ())
+ except:
+ self._can_exit = True
+ raise
 
 def wait_for_started(self):
 while len(self.started) < self.n:
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
@@ -402,10 +402,12 @@
 for i in range(N_THREADS):
 t = threading.Thread(target=run_thread)
 threads.append(t)
- for t in threads:
- t.start()
- time.sleep(1.0)
- exit = True
+ try:
+ for t in threads:
+ t.start()
+ finally:
+ time.sleep(1.0)
+ exit = True
 for t in threads:
 t.join()
 finally:
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -3514,11 +3514,16 @@
 # received (forcing a first EINTR in write()).
 read_results = []
 write_finished = False
+ error = None
 def _read():
- while not write_finished:
- while r in select.select([r], [], [], 1.0)[0]:
- s = os.read(r, 1024)
- read_results.append(s)
+ try:
+ while not write_finished:
+ while r in select.select([r], [], [], 1.0)[0]:
+ s = os.read(r, 1024)
+ read_results.append(s)
+ except BaseException as exc:
+ nonlocal error
+ error = exc
 t = threading.Thread(target=_read)
 t.daemon = True
 def alarm1(sig, frame):
@@ -3539,6 +3544,8 @@
 wio.flush()
 write_finished = True
 t.join()
+
+ self.assertIsNone(error)
 self.assertEqual(N, sum(len(x) for x in read_results))
 finally:
 write_finished = True
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -1338,8 +1338,12 @@
 # Issue 13454: Crash when deleting backward iterator from tee()
 def test_tee_del_backward(self):
 forward, backward = tee(repeat(None, 20000000))
- any(forward) # exhaust the iterator
- del backward
+ try:
+ any(forward) # exhaust the iterator
+ del backward
+ except:
+ del forward, backward
+ raise
 
 def test_StopIteration(self):
 self.assertRaises(StopIteration, next, zip())
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /