[Python-checkins] r79925 - python/trunk/Lib/test/test_multiprocessing.py

nick.coghlan python-checkins at python.org
Sat Apr 10 16:24:36 CEST 2010


Author: nick.coghlan
Date: Sat Apr 10 16:24:36 2010
New Revision: 79925

Log:
Try to turn some buildbots green by allowing test_multiprocessing to pass even if it hits the sys.exc_clear code in the threading module, and improve the test coverage by making the ctypes dependencies a bit more granular (two of the cited ctypes objects don't exist on my system)

Modified:
   python/trunk/Lib/test/test_multiprocessing.py

Modified: python/trunk/Lib/test/test_multiprocessing.py
==============================================================================
--- python/trunk/Lib/test/test_multiprocessing.py	(original)
+++ python/trunk/Lib/test/test_multiprocessing.py	Sat Apr 10 16:24:36 2010
@@ -13,7 +13,6 @@
 import gc
 import signal
 import array
-import copy
 import socket
 import random
 import logging
@@ -67,11 +66,21 @@
 #
 
 try:
-    from ctypes import Structure, Value, copy, c_int, c_double
+    from ctypes import Structure, c_int, c_double
 except ImportError:
     Structure = object
     c_int = c_double = None
 
+try:
+    from ctypes import Value
+except ImportError:
+    Value = None
+
+try:
+    from ctypes import copy as ctypes_copy
+except ImportError:
+    ctypes_copy = None
+
 #
 # Creates a wrapper for a function which records the time it takes to finish
 #
@@ -1596,7 +1605,7 @@
         for i in range(len(arr)):
             arr[i] *= 2
 
-    @unittest.skipIf(c_int is None, "requires _ctypes")
+    @unittest.skipIf(Value is None, "requires ctypes.Value")
     def test_sharedctypes(self, lock=False):
         x = Value('i', 7, lock=lock)
         y = Value(c_double, 1.0/3.0, lock=lock)
@@ -1617,13 +1626,14 @@
             self.assertAlmostEqual(arr[i], i*2)
         self.assertEqual(string.value, latin('hellohello'))
 
+    @unittest.skipIf(Value is None, "requires ctypes.Value")
     def test_synchronize(self):
         self.test_sharedctypes(lock=True)
 
-    @unittest.skipIf(c_int is None, "requires _ctypes")
+    @unittest.skipIf(ctypes_copy is None, "requires ctypes.copy")
     def test_copy(self):
         foo = _Foo(2, 5.0)
-        bar = copy(foo)
+        bar = ctypes_copy(foo)
         foo.x = 0
         foo.y = 0
         self.assertEqual(bar.x, 2)
@@ -2025,8 +2035,14 @@
 
     loadTestsFromTestCase = unittest.defaultTestLoader.loadTestsFromTestCase
     suite = unittest.TestSuite(loadTestsFromTestCase(tc) for tc in testcases)
+    # (ncoghlan): Whether or not sys.exc_clear is executed by the threading
+    # module during these tests is at least platform dependent and possibly
+    # non-deterministic on any given platform. So we don't find if the listed
+    # warnings aren't actually raised.
     with test_support.check_py3k_warnings(
-            (".+__(get|set)slice__ has been removed", DeprecationWarning)):
+            (".+__(get|set)slice__ has been removed", DeprecationWarning),
+            (r"sys.exc_clear\(\) not supported", DeprecationWarning),
+            quiet=True):
         run(suite)
 
     ThreadsMixin.pool.terminate()


More information about the Python-checkins mailing list