diff options
author | Gregory P. Smith <greg@krypto.org> | 2015-12-13 20:09:42 -0800 |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2015-12-13 20:09:42 -0800 |
commit | 6edadfc9ca0934324e517fc9f9bdd902319825df (patch) | |
tree | de01df4779ae662327a0a60a8adf81cb1f730325 | |
parent | e847d7170d3f41b1ec773ab203c11f1addd6d4ac (diff) | |
parent | 8c084eb77d69ec1527fad943a4031b1b29193e98 (diff) | |
download | cpython-git-6edadfc9ca0934324e517fc9f9bdd902319825df.tar.gz |
* Re-fix issue #19284: Don't generate the no-op -R command line
parameter to "enable" the always on sys.flags.hash_randomization
in _args_from_interpreter_flags() used by multiprocessing and
some unittests. This simplifies the code.
* assert_python_ok docstring typo fix.
* Fix test_cmd_line not to fail if PYTHONHASHSEED is set to a fixed seed.
-rw-r--r-- | Lib/subprocess.py | 3 | ||||
-rw-r--r-- | Lib/test/support/script_helper.py | 2 | ||||
-rw-r--r-- | Lib/test/test_cmd_line.py | 18 |
3 files changed, 16 insertions, 7 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index bbf50ce760..d1324b8aed 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -535,14 +535,11 @@ def _args_from_interpreter_flags(): 'verbose': 'v', 'bytes_warning': 'b', 'quiet': 'q', - 'hash_randomization': 'R', } args = [] for flag, opt in flag_opt_map.items(): v = getattr(sys.flags, flag) if v > 0: - if flag == 'hash_randomization': - v = 1 # Handle specification of an exact seed args.append('-' + opt * v) for opt in sys.warnoptions: args.append('-W' + opt) diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py index 584b0e8eef..9c2e9ebdfb 100644 --- a/Lib/test/support/script_helper.py +++ b/Lib/test/support/script_helper.py @@ -127,7 +127,7 @@ def assert_python_ok(*args, **env_vars): variables `env_vars` succeeds (rc == 0) and return a (return code, stdout, stderr) tuple. - If the __cleanenv keyword is set, env_vars is used a fresh environment. + If the __cleanenv keyword is set, env_vars is used as a fresh environment. Python is started in isolated mode (command line option -I), except if the __isolated keyword is set to False. diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 0feb63fd4e..dce418b65c 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -403,12 +403,24 @@ class CmdLineTest(unittest.TestCase): # Verify that -R enables hash randomization: self.verify_valid_flag('-R') hashes = [] - for i in range(2): + if os.environ.get('PYTHONHASHSEED', 'random') != 'random': + env = dict(os.environ) # copy + # We need to test that it is enabled by default without + # the environment variable enabling it for us. + del env['PYTHONHASHSEED'] + env['__cleanenv'] = '1' # consumed by assert_python_ok() + else: + env = {} + for i in range(3): code = 'print(hash("spam"))' - rc, out, err = assert_python_ok('-c', code) + rc, out, err = assert_python_ok('-c', code, **env) self.assertEqual(rc, 0) hashes.append(out) - self.assertNotEqual(hashes[0], hashes[1]) + hashes = sorted(set(hashes)) # uniq + # Rare chance of failure due to 3 random seeds honestly being equal. + self.assertGreater(len(hashes), 1, + msg='3 runs produced an identical random hash ' + ' for "spam": {}'.format(hashes)) # Verify that sys.flags contains hash_randomization code = 'import sys; print("random is", sys.flags.hash_randomization)' |