Skip to content

Commit

Permalink
[3.11] gh-113628: Fix test_site test with long stdlib paths (GH-113640)…
Browse files Browse the repository at this point in the history
… (#113672)

gh-113628: Fix test_site test with long stdlib paths (GH-113640)
(cherry picked from commit 5dc79e3)

Co-authored-by: Itamar Oren <itamarost@gmail.com>
  • Loading branch information
miss-islington and itamaro authored Jan 3, 2024
1 parent 1c381ec commit 93e9381
Showing 1 changed file with 21 additions and 22 deletions.
43 changes: 21 additions & 22 deletions Lib/test/test_site.py
Original file line number Diff line number Diff line change
Expand Up @@ -604,10 +604,24 @@ def _calc_sys_path_for_underpth_nosite(self, sys_prefix, lines):
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(
Expand All @@ -629,12 +643,7 @@ def test_underpth_basic(self):
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),
Expand All @@ -658,13 +667,8 @@ def test_underpth_nosite_file(self):
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'
Expand All @@ -683,13 +687,8 @@ def test_underpth_file(self):
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'
Expand Down

0 comments on commit 93e9381

Please sign in to comment.