diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-11-16 02:11:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-16 02:11:45 (GMT) |
commit | a7368ac6360246b1ef7f8f152963c2362d272183 (patch) | |
tree | 4fb2375f4d4aa4287f4d7688631111512d9e4446 /Lib/test | |
parent | f7e5b56c37eb859e225e886c79c5d742c567ee95 (diff) | |
download | cpython-a7368ac6360246b1ef7f8f152963c2362d272183.zip cpython-a7368ac6360246b1ef7f8f152963c2362d272183.tar.gz cpython-a7368ac6360246b1ef7f8f152963c2362d272183.tar.bz2 |
bpo-32030: Enhance Py_Main() (#4412)
Parse more env vars in Py_Main():
* Add more options to _PyCoreConfig:
* faulthandler
* tracemalloc
* importtime
* Move code to parse environment variables from _Py_InitializeCore()
to Py_Main(). This change fixes a regression from Python 3.6:
PYTHONUNBUFFERED is now read before calling pymain_init_stdio().
* _PyFaulthandler_Init() and _PyTraceMalloc_Init() now take an
argument to decide if the module has to be enabled at startup.
* tracemalloc_start() is now responsible to check the maximum number
of frames.
Other changes:
* Cleanup Py_Main():
* Rename some pymain_xxx() subfunctions
* Add pymain_run_python() subfunction
* Cleanup Py_NewInterpreter()
* _PyInterpreterState_Enable() now reports failure
* init_hash_secret() now considers pyurandom() failure as an "user
error": don't fail with abort().
* pymain_optlist_append() and pymain_strdup() now sets err on memory
allocation failure.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_tracemalloc.py | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py index 780942a..533ba6d 100644 --- a/Lib/test/test_tracemalloc.py +++ b/Lib/test/test_tracemalloc.py @@ -829,16 +829,23 @@ class TestCommandLine(unittest.TestCase): stdout = stdout.rstrip() self.assertEqual(stdout, b'10') + def check_env_var_invalid(self, nframe): + with support.SuppressCrashReport(): + ok, stdout, stderr = assert_python_failure( + '-c', 'pass', + PYTHONTRACEMALLOC=str(nframe)) + + if b'ValueError: the number of frames must be in range' in stderr: + return + if b'PYTHONTRACEMALLOC: invalid number of frames' in stderr: + return + self.fail(f"unexpeced output: {stderr!a}") + + def test_env_var_invalid(self): for nframe in (-1, 0, 2**30): with self.subTest(nframe=nframe): - with support.SuppressCrashReport(): - ok, stdout, stderr = assert_python_failure( - '-c', 'pass', - PYTHONTRACEMALLOC=str(nframe)) - self.assertIn(b'PYTHONTRACEMALLOC: invalid ' - b'number of frames', - stderr) + self.check_env_var_invalid(nframe) def test_sys_xoptions(self): for xoptions, nframe in ( @@ -852,15 +859,21 @@ class TestCommandLine(unittest.TestCase): stdout = stdout.rstrip() self.assertEqual(stdout, str(nframe).encode('ascii')) + def check_sys_xoptions_invalid(self, nframe): + args = ('-X', 'tracemalloc=%s' % nframe, '-c', 'pass') + with support.SuppressCrashReport(): + ok, stdout, stderr = assert_python_failure(*args) + + if b'ValueError: the number of frames must be in range' in stderr: + return + if b'-X tracemalloc=NFRAME: invalid number of frames' in stderr: + return + self.fail(f"unexpeced output: {stderr!a}") + def test_sys_xoptions_invalid(self): for nframe in (-1, 0, 2**30): with self.subTest(nframe=nframe): - with support.SuppressCrashReport(): - args = ('-X', 'tracemalloc=%s' % nframe, '-c', 'pass') - ok, stdout, stderr = assert_python_failure(*args) - self.assertIn(b'-X tracemalloc=NFRAME: invalid ' - b'number of frames', - stderr) + self.check_sys_xoptions_invalid(nframe) @unittest.skipIf(_testcapi is None, 'need _testcapi') def test_pymem_alloc0(self): |