pre-commit/tests/xargs_with_blocked_sysconf_test.py
Michael R. Wolf 6cd92aa910 Refactor xargs blocked sysconf test for clarity
- Add module-level docstring
- Extract subprocess script into helper function
- Add constant for blocked sysconf error message
- Improve test docstring explaining two-phase approach
- Add inline comments clarifying test orchestration
- Remove TODO comments
2025-11-28 19:32:42 -05:00

70 lines
2.6 KiB
Python

"""Tests for pre_commit.xargs when os.sysconf is blocked in a sandbox environment."""
from __future__ import annotations
import subprocess
import sys
import textwrap
# flake8: noqa: E501
# Error message when os.sysconf is blocked in the test subprocess
BLOCKED_SYSCONF_ERROR = 'blocked'
def _create_import_test_script() -> str:
"""Create a Python script that tests importing pre_commit.xargs with blocked os.sysconf.
This script must run in a subprocess (not in the main pytest process) because:
1. We need to patch os.sysconf BEFORE any imports happen
2. conftest.py already imports pre_commit.xargs in the main process
3. A subprocess gives us a clean import state to test against
"""
return textwrap.dedent(f"""
import importlib
import os
from unittest import mock
def main():
# Force a posix-style environment.
os.name = 'posix'
# Block os.sysconf so that any SC_ARG_MAX lookup fails with OSError.
with mock.patch.object(os, 'sysconf', side_effect=OSError('{BLOCKED_SYSCONF_ERROR}')):
# This should NOT raise with the fixed implementation.
importlib.import_module('pre_commit.xargs')
if __name__ == '__main__':
main()
""")
def test_import_module_without_throwing_exception_as_subprocess() -> None:
"""Test that pre_commit.xargs can be imported when os.sysconf is blocked.
This test uses a subprocess to avoid the conftest.py chicken/egg problem:
- Phase 1 (this function): Sets up and runs a subprocess with blocked os.sysconf
- Phase 2 (subprocess script): Attempts to import pre_commit.xargs in that environment
With the current buggy implementation, the subprocess crashes because os.sysconf
is called at import time. After the fix, the subprocess should succeed.
"""
# Create the test script that will run in a subprocess
script = _create_import_test_script()
# Run the script in a fresh subprocess where we control os.sysconf
proc = subprocess.run(
[sys.executable, '-c', script],
capture_output=True,
text=True,
cwd='/Users/michael/repos/pre-commit',
)
# Assert the subprocess succeeded (import worked without exception)
# Test-first: This test FAILS with current buggy behavior (subprocess crashes).
# After fix, subprocess should succeed (returncode == 0).
assert proc.returncode == 0, (
f'Subprocess failed to import pre_commit.xargs when os.sysconf is blocked. '
f'This exposes the bug: os.sysconf is called at import time. '
f'stderr: {proc.stderr!r}'
)