From: Sam Gross Date: Sat, 8 Feb 2025 20:12:21 +0000 (-0500) Subject: gh-128657: Run test_hashlib with `--parallel-threads` (GH-129833) X-Git-Tag: v3.14.0a5~38 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1f352bf0813803bb795b796c16040a5cd4115f2;p=thirdparty%2FPython%2Fcpython.git 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 --- diff --git a/Lib/test/libregrtest/tsan.py b/Lib/test/libregrtest/tsan.py index 90c9f0db0af2..10b12cce1659 100644 --- a/Lib/test/libregrtest/tsan.py +++ b/Lib/test/libregrtest/tsan.py @@ -33,6 +33,7 @@ TSAN_TESTS = [ # 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 575b2cd0da70..d1b04128bf6d 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -13,13 +13,13 @@ import itertools 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 @@ class HashLibTestCase(unittest.TestCase): 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 @@ class KDFTests(unittest.TestCase): 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__":