Fix test_cmd_line not to fail if PYTHONHASHSEED is set to a fixed seed

due to test_hash_randomization expecting a different seed per process.
This commit is contained in:
Gregory P. Smith 2015-12-13 20:01:44 -08:00
parent 4cb6d37d1d
commit 220ba72c20
1 changed files with 15 additions and 3 deletions

View File

@ -402,12 +402,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)'