]> granicus.if.org Git - python/commitdiff
Fix test_cmd_line not to fail if PYTHONHASHSEED is set to a fixed seed
authorGregory P. Smith <greg@krypto.org>
Mon, 14 Dec 2015 04:01:44 +0000 (20:01 -0800)
committerGregory P. Smith <greg@krypto.org>
Mon, 14 Dec 2015 04:01:44 +0000 (20:01 -0800)
due to test_hash_randomization expecting a different seed per process.

Lib/test/test_cmd_line.py

index cb9bbddc8c62c4d3ddb8aefbb32df421dae2fe81..5cad3eca623661dfb2a7431802998400a63ce457 100644 (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)'