[Python-checkins] cpython (3.4): Fix test_cmd_line not to fail if PYTHONHASHSEED is set to a fixed seed

gregory.p.smith python-checkins at python.org
Sun Dec 13 23:15:37 EST 2015


https://hg.python.org/cpython/rev/cefcbe1b934f
changeset:   99565:cefcbe1b934f
branch:      3.4
user:        Gregory P. Smith <greg at krypto.org>
date:        Sun Dec 13 20:01:44 2015 -0800
summary:
  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.

files:
  Lib/test/test_cmd_line.py |  18 +++++++++++++++---
  1 files changed, 15 insertions(+), 3 deletions(-)


diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -402,12 +402,24 @@
         # 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)'

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list