diff options
author | Itamar Oren <itamarost@gmail.com> | 2024-01-03 00:30:53 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-03 00:30:53 (GMT) |
commit | 5dc79e3d7f26a6a871a89ce3efc9f1bcee7bb447 (patch) | |
tree | fbdf80b450e83b231eff8d7980a3071c048cd2f5 | |
parent | b0fb074d5983f07517cec76a37268f13c986d314 (diff) | |
download | cpython-5dc79e3d7f26a6a871a89ce3efc9f1bcee7bb447.zip cpython-5dc79e3d7f26a6a871a89ce3efc9f1bcee7bb447.tar.gz cpython-5dc79e3d7f26a6a871a89ce3efc9f1bcee7bb447.tar.bz2 |
gh-113628: Fix test_site test with long stdlib paths (#113640)
-rw-r--r-- | Lib/test/test_site.py | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 33d0975..9f199d9 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -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' |