[Python-checkins] cpython (3.6): Fix test_faulthandler on Android where raise() exits with 0
xavier.degaye
python-checkins at python.org
Sun Nov 13 14:48:18 EST 2016
https://hg.python.org/cpython/rev/f37ac1a003f3
changeset: 105086:f37ac1a003f3
branch: 3.6
parent: 105084:f043683f9b40
user: Xavier de Gaye <xdegaye at users.sourceforge.net>
date: Sun Nov 13 20:46:46 2016 +0100
summary:
Fix test_faulthandler on Android where raise() exits with 0
files:
Lib/test/support/__init__.py | 12 ++++++++++--
Lib/test/test_faulthandler.py | 14 +++++++++++++-
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -90,7 +90,7 @@
"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
"anticipate_failure", "load_package_tests", "detect_api_mismatch",
- "check__all__",
+ "check__all__", "requires_android_level",
# sys
"is_jython", "is_android", "check_impl_detail", "unix_shell",
# network
@@ -735,7 +735,8 @@
is_jython = sys.platform.startswith('java')
-is_android = bool(sysconfig.get_config_var('ANDROID_API_LEVEL'))
+_ANDROID_API_LEVEL = sysconfig.get_config_var('ANDROID_API_LEVEL')
+is_android = (_ANDROID_API_LEVEL > 0)
if sys.platform != 'win32':
unix_shell = '/system/bin/sh' if is_android else '/bin/sh'
@@ -1725,6 +1726,13 @@
else:
return unittest.skip("resource {0!r} is not enabled".format(resource))
+def requires_android_level(level, reason):
+ if is_android and _ANDROID_API_LEVEL < level:
+ return unittest.skip('%s at Android API level %d' %
+ (reason, _ANDROID_API_LEVEL))
+ else:
+ return _id
+
def cpython_only(test):
"""
Decorator for tests only applicable on CPython.
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py
--- a/Lib/test/test_faulthandler.py
+++ b/Lib/test/test_faulthandler.py
@@ -7,7 +7,7 @@
import subprocess
import sys
from test import support
-from test.support import script_helper
+from test.support import script_helper, is_android, requires_android_level
import tempfile
import unittest
from textwrap import dedent
@@ -42,6 +42,10 @@
finally:
support.unlink(filename)
+def requires_raise(test):
+ return (test if not is_android else
+ requires_android_level(24, 'raise() is buggy')(test))
+
class FaultHandlerTests(unittest.TestCase):
def get_output(self, code, filename=None, fd=None):
"""
@@ -141,6 +145,7 @@
3,
'access violation')
+ @requires_raise
def test_sigsegv(self):
self.check_fatal_error("""
import faulthandler
@@ -183,6 +188,7 @@
@unittest.skipIf(_testcapi is None, 'need _testcapi')
@unittest.skipUnless(hasattr(signal, 'SIGBUS'), 'need signal.SIGBUS')
+ @requires_raise
def test_sigbus(self):
self.check_fatal_error("""
import _testcapi
@@ -197,6 +203,7 @@
@unittest.skipIf(_testcapi is None, 'need _testcapi')
@unittest.skipUnless(hasattr(signal, 'SIGILL'), 'need signal.SIGILL')
+ @requires_raise
def test_sigill(self):
self.check_fatal_error("""
import _testcapi
@@ -240,6 +247,7 @@
'(?:Segmentation fault|Bus error)',
other_regex='unable to raise a stack overflow')
+ @requires_raise
def test_gil_released(self):
self.check_fatal_error("""
import faulthandler
@@ -249,6 +257,7 @@
3,
'Segmentation fault')
+ @requires_raise
def test_enable_file(self):
with temporary_filename() as filename:
self.check_fatal_error("""
@@ -263,6 +272,7 @@
@unittest.skipIf(sys.platform == "win32",
"subprocess doesn't support pass_fds on Windows")
+ @requires_raise
def test_enable_fd(self):
with tempfile.TemporaryFile('wb+') as fp:
fd = fp.fileno()
@@ -276,6 +286,7 @@
'Segmentation fault',
fd=fd)
+ @requires_raise
def test_enable_single_thread(self):
self.check_fatal_error("""
import faulthandler
@@ -286,6 +297,7 @@
'Segmentation fault',
all_threads=False)
+ @requires_raise
def test_disable(self):
code = """
import faulthandler
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list