https://github.com/python/cpython/commit/c1f352bf0813803bb795b796c16040a5cd4115f2
commit: c1f352bf0813803bb795b796c16040a5cd4115f2
branch: main
author: Sam Gross <[email protected]>
committer: gpshead <[email protected]>
date: 2025-02-08T12:12:21-08:00
summary:
gh-128657: Run test_hashlib with `--parallel-threads` (GH-129833)
* gh-128657: Run test_hashlib with `--parallel-threads`
This catches the race in `py_digest_by_name` that is fixed separately
in gh-128886.
* Adjust assertion order
files:
M Lib/test/libregrtest/tsan.py
M Lib/test/test_hashlib.py
diff --git a/Lib/test/libregrtest/tsan.py b/Lib/test/libregrtest/tsan.py
index 90c9f0db0af2bf..10b12cce165931 100644
--- a/Lib/test/libregrtest/tsan.py
+++ b/Lib/test/libregrtest/tsan.py
@@ -33,6 +33,7 @@
# the regression test runner with the `--parallel-threads` option enabled.
TSAN_PARALLEL_TESTS = [
'test_abc',
+ 'test_hashlib',
]
diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
index 575b2cd0da7056..d1b04128bf6df3 100644
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -13,13 +13,13 @@
import os
import sys
import sysconfig
+import tempfile
import threading
import unittest
import warnings
from test import support
from test.support import _4G, bigmemtest
from test.support.import_helper import import_fresh_module
-from test.support import os_helper
from test.support import requires_resource
from test.support import threading_helper
from http.client import HTTPException
@@ -414,21 +414,18 @@ def check_file_digest(self, name, data, hexdigest):
digests = [name]
digests.extend(self.constructors_to_test[name])
- with open(os_helper.TESTFN, "wb") as f:
+ with tempfile.TemporaryFile() as f:
f.write(data)
- try:
for digest in digests:
buf = io.BytesIO(data)
buf.seek(0)
self.assertEqual(
hashlib.file_digest(buf, digest).hexdigest(), hexdigest
)
- with open(os_helper.TESTFN, "rb") as f:
- digestobj = hashlib.file_digest(f, digest)
+ f.seek(0)
+ digestobj = hashlib.file_digest(f, digest)
self.assertEqual(digestobj.hexdigest(), hexdigest)
- finally:
- os.unlink(os_helper.TESTFN)
def check_no_unicode(self, algorithm_name):
# Unicode objects are not allowed as input.
@@ -1172,29 +1169,29 @@ def test_normalized_name(self):
def test_file_digest(self):
data = b'a' * 65536
d1 = hashlib.sha256()
- self.addCleanup(os.unlink, os_helper.TESTFN)
- with open(os_helper.TESTFN, "wb") as f:
+ with tempfile.NamedTemporaryFile(delete_on_close=False) as fp:
for _ in range(10):
d1.update(data)
- f.write(data)
+ fp.write(data)
+ fp.close()
- with open(os_helper.TESTFN, "rb") as f:
- d2 = hashlib.file_digest(f, hashlib.sha256)
+ with open(fp.name, "rb") as f:
+ d2 = hashlib.file_digest(f, hashlib.sha256)
- self.assertEqual(d1.hexdigest(), d2.hexdigest())
- self.assertEqual(d1.name, d2.name)
- self.assertIs(type(d1), type(d2))
+ self.assertEqual(d1.hexdigest(), d2.hexdigest())
+ self.assertEqual(d1.name, d2.name)
+ self.assertIs(type(d1), type(d2))
- with self.assertRaises(ValueError):
- hashlib.file_digest(None, "sha256")
+ with self.assertRaises(ValueError):
+ with open(fp.name, "r") as f:
+ hashlib.file_digest(f, "sha256")
- with self.assertRaises(ValueError):
- with open(os_helper.TESTFN, "r") as f:
- hashlib.file_digest(f, "sha256")
+ with self.assertRaises(ValueError):
+ with open(fp.name, "wb") as f:
+ hashlib.file_digest(f, "sha256")
with self.assertRaises(ValueError):
- with open(os_helper.TESTFN, "wb") as f:
- hashlib.file_digest(f, "sha256")
+ hashlib.file_digest(None, "sha256")
if __name__ == "__main__":
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]