|
1 | 1 | import inspect |
2 | 2 | import os |
3 | 3 | import posixpath |
| 4 | +import random |
4 | 5 | import sys |
5 | 6 | import unittest |
6 | 7 | from posixpath import realpath, abspath, dirname, basename |
| 8 | +from test import support |
7 | 9 | from test import test_genericpath |
8 | | -from test.support import get_attribute, import_helper |
9 | | -from test.support import cpython_only, os_helper |
| 10 | +from test.support import import_helper |
| 11 | +from test.support import os_helper |
10 | 12 | from test.support.os_helper import FakePath |
11 | 13 | from unittest import mock |
12 | 14 |
|
@@ -285,7 +287,7 @@ def test_isjunction(self): |
285 | 287 | self.assertFalse(posixpath.isjunction(ABSTFN)) |
286 | 288 |
|
287 | 289 | @unittest.skipIf(sys.platform == 'win32', "Fast paths are not for win32") |
288 | | - @cpython_only |
| 290 | + @support.cpython_only |
289 | 291 | def test_fast_paths_in_use(self): |
290 | 292 | # There are fast paths of these functions implemented in posixmodule.c. |
291 | 293 | # Confirm that they are being used, and not the Python fallbacks |
@@ -359,16 +361,23 @@ def test_expanduser_pwd(self): |
359 | 361 | "no home directory on VxWorks") |
360 | 362 | def test_expanduser_pwd2(self): |
361 | 363 | pwd = import_helper.import_module('pwd') |
362 | | - for all_entry in get_attribute(pwd, 'getpwall')(): |
363 | | - name = all_entry.pw_name |
364 | | - |
| 364 | + getpwall = support.get_attribute(pwd, 'getpwall') |
| 365 | + names = [entry.pw_name for entry in getpwall()] |
| 366 | + maxusers = 1000 if support.is_resource_enabled('cpu') else 100 |
| 367 | + if len(names) > maxusers: |
| 368 | + # Select random names, half of them with non-ASCII name, |
| 369 | + # if available. |
| 370 | + random.shuffle(names) |
| 371 | + names.sort(key=lambda name: name.isascii()) |
| 372 | + del names[maxusers//2:-maxusers//2] |
| 373 | + for name in names: |
365 | 374 | # gh-121200: pw_dir can be different between getpwall() and |
366 | 375 | # getpwnam(), so use getpwnam() pw_dir as expanduser() does. |
367 | 376 | entry = pwd.getpwnam(name) |
368 | 377 | home = entry.pw_dir |
369 | 378 | home = home.rstrip('/') or '/' |
370 | 379 |
|
371 | | - with self.subTest(all_entry=all_entry, entry=entry): |
| 380 | + with self.subTest(name=name, pw_dir=entry.pw_dir): |
372 | 381 | self.assertEqual(posixpath.expanduser('~' + name), home) |
373 | 382 | self.assertEqual(posixpath.expanduser(os.fsencode('~' + name)), |
374 | 383 | os.fsencode(home)) |
|
0 commit comments