Skip to content

Commit ecd5383

Browse files
committed
python#25320: Handle sockets in directories unittest discovery is scanning.
Patch from Victor van den Elzen.
1 parent 87d6e13 commit ecd5383

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

Lib/unittest/loader.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,8 @@ def _find_test_path(self, full_path, pattern, namespace=False):
479479
return tests, True
480480
finally:
481481
self._loading_packages.discard(name)
482+
else:
483+
return None, False
482484

483485

484486
defaultTestLoader = TestLoader()

Lib/unittest/test/test_discovery.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,46 @@ def loadTestsFromModule(module, pattern=None):
9090
('test3', 'test4')])
9191
self.assertEqual(suite, expected)
9292

93+
def test_find_tests_socket(self):
94+
# A socket is neither a directory nor a regular file.
95+
# https://bugs.python.org/issue25320
96+
loader = unittest.TestLoader()
97+
98+
original_listdir = os.listdir
99+
def restore_listdir():
100+
os.listdir = original_listdir
101+
original_isfile = os.path.isfile
102+
def restore_isfile():
103+
os.path.isfile = original_isfile
104+
original_isdir = os.path.isdir
105+
def restore_isdir():
106+
os.path.isdir = original_isdir
107+
108+
path_lists = [['socket']]
109+
os.listdir = lambda path: path_lists.pop(0)
110+
self.addCleanup(restore_listdir)
111+
112+
os.path.isdir = lambda path: False
113+
self.addCleanup(restore_isdir)
114+
115+
os.path.isfile = lambda path: False
116+
self.addCleanup(restore_isfile)
117+
118+
loader._get_module_from_name = lambda path: path + ' module'
119+
orig_load_tests = loader.loadTestsFromModule
120+
def loadTestsFromModule(module, pattern=None):
121+
# This is where load_tests is called.
122+
base = orig_load_tests(module, pattern=pattern)
123+
return base + [module + ' tests']
124+
loader.loadTestsFromModule = loadTestsFromModule
125+
loader.suiteClass = lambda thing: thing
126+
127+
top_level = os.path.abspath('/foo')
128+
loader._top_level_dir = top_level
129+
suite = list(loader._find_tests(top_level, 'test*.py'))
130+
131+
self.assertEqual(suite, [])
132+
93133
def test_find_tests_with_package(self):
94134
loader = unittest.TestLoader()
95135

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ Lance Ellinghaus
393393
Daniel Ellis
394394
Phil Elson
395395
David Ely
396+
Victor van den Elzen
396397
Jeff Epler
397398
Tom Epperly
398399
Gökcen Eraslan

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ Core and Builtins
9191
Library
9292
-------
9393

94+
- Issue #25320: Handle sockets in directories unittest discovery is scanning.
95+
Patch from Victor van den Elzen.
96+
9497
- Issue #16181: cookiejar.http2time() now returns None if year is higher than
9598
datetime.MAXYEAR.
9699

0 commit comments

Comments
 (0)