gh-113628: Fix test_site test with long stdlib paths (#113640)

This commit is contained in:
Itamar Oren 2024-01-02 16:30:53 -08:00 committed by GitHub
parent b0fb074d59
commit 5dc79e3d7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 22 deletions

View File

@ -641,10 +641,24 @@ class _pthFileTests(unittest.TestCase):
sys_path.append(abs_path)
return sys_path
def _get_pth_lines(self, libpath: str, *, import_site: bool):
pth_lines = ['fake-path-name']
# include 200 lines of `libpath` in _pth lines (or fewer
# if the `libpath` is long enough to get close to 32KB
# see https://github.com/python/cpython/issues/113628)
encoded_libpath_length = len(libpath.encode("utf-8"))
repetitions = min(200, 30000 // encoded_libpath_length)
if repetitions <= 2:
self.skipTest(
f"Python stdlib path is too long ({encoded_libpath_length:,} bytes)")
pth_lines.extend(libpath for _ in range(repetitions))
pth_lines.extend(['', '# comment'])
if import_site:
pth_lines.append('import site')
return pth_lines
@support.requires_subprocess()
def test_underpth_basic(self):
libpath = test.support.STDLIB_DIR
exe_prefix = os.path.dirname(sys.executable)
pth_lines = ['#.', '# ..', *sys.path, '.', '..']
exe_file = self._create_underpth_exe(pth_lines)
sys_path = self._calc_sys_path_for_underpth_nosite(
@ -666,12 +680,7 @@ class _pthFileTests(unittest.TestCase):
def test_underpth_nosite_file(self):
libpath = test.support.STDLIB_DIR
exe_prefix = os.path.dirname(sys.executable)
pth_lines = [
'fake-path-name',
*[libpath for _ in range(200)],
'',
'# comment',
]
pth_lines = self._get_pth_lines(libpath, import_site=False)
exe_file = self._create_underpth_exe(pth_lines)
sys_path = self._calc_sys_path_for_underpth_nosite(
os.path.dirname(exe_file),
@ -695,13 +704,8 @@ class _pthFileTests(unittest.TestCase):
def test_underpth_file(self):
libpath = test.support.STDLIB_DIR
exe_prefix = os.path.dirname(sys.executable)
exe_file = self._create_underpth_exe([
'fake-path-name',
*[libpath for _ in range(200)],
'',
'# comment',
'import site'
])
exe_file = self._create_underpth_exe(
self._get_pth_lines(libpath, import_site=True))
sys_prefix = os.path.dirname(exe_file)
env = os.environ.copy()
env['PYTHONPATH'] = 'from-env'
@ -720,13 +724,8 @@ class _pthFileTests(unittest.TestCase):
def test_underpth_dll_file(self):
libpath = test.support.STDLIB_DIR
exe_prefix = os.path.dirname(sys.executable)
exe_file = self._create_underpth_exe([
'fake-path-name',
*[libpath for _ in range(200)],
'',
'# comment',
'import site'
], exe_pth=False)
exe_file = self._create_underpth_exe(
self._get_pth_lines(libpath, import_site=True), exe_pth=False)
sys_prefix = os.path.dirname(exe_file)
env = os.environ.copy()
env['PYTHONPATH'] = 'from-env'