mirror of
https://github.com/python/cpython.git
synced 2025-09-28 03:13:48 +00:00
[3.13] gh-132185: Speed up expanduser() test with large password database (GH-132231) (GH-132443)
Use only a limited number of randomly selected entries.
(cherry picked from commit 842ab81517
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
1884a3bbd1
commit
f943376ca8
1 changed files with 16 additions and 7 deletions
|
@ -1,12 +1,14 @@
|
||||||
import inspect
|
import inspect
|
||||||
import os
|
import os
|
||||||
import posixpath
|
import posixpath
|
||||||
|
import random
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from posixpath import realpath, abspath, dirname, basename
|
from posixpath import realpath, abspath, dirname, basename
|
||||||
|
from test import support
|
||||||
from test import test_genericpath
|
from test import test_genericpath
|
||||||
from test.support import get_attribute, import_helper
|
from test.support import import_helper
|
||||||
from test.support import cpython_only, os_helper
|
from test.support import os_helper
|
||||||
from test.support.os_helper import FakePath
|
from test.support.os_helper import FakePath
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
|
@ -285,7 +287,7 @@ class PosixPathTest(unittest.TestCase):
|
||||||
self.assertFalse(posixpath.isjunction(ABSTFN))
|
self.assertFalse(posixpath.isjunction(ABSTFN))
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform == 'win32', "Fast paths are not for win32")
|
@unittest.skipIf(sys.platform == 'win32', "Fast paths are not for win32")
|
||||||
@cpython_only
|
@support.cpython_only
|
||||||
def test_fast_paths_in_use(self):
|
def test_fast_paths_in_use(self):
|
||||||
# There are fast paths of these functions implemented in posixmodule.c.
|
# There are fast paths of these functions implemented in posixmodule.c.
|
||||||
# Confirm that they are being used, and not the Python fallbacks
|
# Confirm that they are being used, and not the Python fallbacks
|
||||||
|
@ -359,16 +361,23 @@ class PosixPathTest(unittest.TestCase):
|
||||||
"no home directory on VxWorks")
|
"no home directory on VxWorks")
|
||||||
def test_expanduser_pwd2(self):
|
def test_expanduser_pwd2(self):
|
||||||
pwd = import_helper.import_module('pwd')
|
pwd = import_helper.import_module('pwd')
|
||||||
for all_entry in get_attribute(pwd, 'getpwall')():
|
getpwall = support.get_attribute(pwd, 'getpwall')
|
||||||
name = all_entry.pw_name
|
names = [entry.pw_name for entry in getpwall()]
|
||||||
|
maxusers = 1000 if support.is_resource_enabled('cpu') else 100
|
||||||
|
if len(names) > maxusers:
|
||||||
|
# Select random names, half of them with non-ASCII name,
|
||||||
|
# if available.
|
||||||
|
random.shuffle(names)
|
||||||
|
names.sort(key=lambda name: name.isascii())
|
||||||
|
del names[maxusers//2:-maxusers//2]
|
||||||
|
for name in names:
|
||||||
# gh-121200: pw_dir can be different between getpwall() and
|
# gh-121200: pw_dir can be different between getpwall() and
|
||||||
# getpwnam(), so use getpwnam() pw_dir as expanduser() does.
|
# getpwnam(), so use getpwnam() pw_dir as expanduser() does.
|
||||||
entry = pwd.getpwnam(name)
|
entry = pwd.getpwnam(name)
|
||||||
home = entry.pw_dir
|
home = entry.pw_dir
|
||||||
home = home.rstrip('/') or '/'
|
home = home.rstrip('/') or '/'
|
||||||
|
|
||||||
with self.subTest(all_entry=all_entry, entry=entry):
|
with self.subTest(name=name, pw_dir=entry.pw_dir):
|
||||||
self.assertEqual(posixpath.expanduser('~' + name), home)
|
self.assertEqual(posixpath.expanduser('~' + name), home)
|
||||||
self.assertEqual(posixpath.expanduser(os.fsencode('~' + name)),
|
self.assertEqual(posixpath.expanduser(os.fsencode('~' + name)),
|
||||||
os.fsencode(home))
|
os.fsencode(home))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue