Skip to content

Commit e37ec68

Browse files
committed
Add regression tests
1 parent 19a58a1 commit e37ec68

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

Lib/test/test_os.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import sysconfig
2727
import tempfile
2828
import textwrap
29+
import threading
2930
import time
3031
import types
3132
import unittest
@@ -37,6 +38,7 @@
3738
from test.support import socket_helper
3839
from test.support import infinite_recursion
3940
from test.support import warnings_helper
41+
from test.support import threading_helper
4042
from platform import win32_is_iot
4143

4244
try:
@@ -5406,6 +5408,49 @@ def test_resource_warning(self):
54065408
with self.check_no_resource_warning():
54075409
del iterator
54085410

5411+
@support.requires_resource('cpu')
5412+
@threading_helper.requires_working_threading()
5413+
def test_races_scandir_iterations(self):
5414+
N = 4
5415+
ITERATIONS = 10 if support.check_sanitizer(address=True) else 1000
5416+
5417+
self.create_file("file.txt")
5418+
self.create_file("file2.txt")
5419+
5420+
def scan(iter, barrier):
5421+
barrier.wait()
5422+
for entry in iter:
5423+
pass
5424+
5425+
for _ in range(ITERATIONS):
5426+
barrier = threading.Barrier(N)
5427+
iter = os.scandir(self.path)
5428+
5429+
threads = [threading.Thread(target=scan, args=(iter, barrier))
5430+
for _ in range(N)]
5431+
with threading_helper.start_threads(threads):
5432+
pass
5433+
5434+
@threading_helper.requires_working_threading()
5435+
@unittest.skipUnless(support.check_sanitizer(address=True), "requires ASAN")
5436+
def test_races_scandir_entry(self):
5437+
N = 2
5438+
ITERATIONS = 10
5439+
5440+
self.create_file("file.txt")
5441+
self.create_file("file2.txt")
5442+
5443+
def stat(entry, barrier):
5444+
barrier.wait()
5445+
entry.stat()
5446+
5447+
for _ in range(ITERATIONS):
5448+
barrier = threading.Barrier(N)
5449+
for entry in os.scandir(self.path):
5450+
threads = [threading.Thread(target=stat, args=(entry, barrier))
5451+
for _ in range(N)]
5452+
with threading_helper.start_threads(threads):
5453+
pass
54095454

54105455
class TestPEP519(unittest.TestCase):
54115456

0 commit comments

Comments
 (0)