Skip to content

Test failure of test_py_info_cache_invalidation_on_py_info_change #2939

@frenzymadness

Description

@frenzymadness

I'm bulding the latest version 20.33.0 as an RPM package in Fedora Linux with Python 3.14 and the test mentioned in the subject fails with:

    def test_py_info_cache_invalidation_on_py_info_change(mocker, session_app_data):
        # 1. Get a PythonInfo object for the current executable, this will cache it.
        PythonInfo.from_exe(sys.executable, session_app_data)
    
        # 2. Spy on _run_subprocess
        spy = mocker.spy(cached_py_info, "_run_subprocess")
    
        # 3. Modify the content of py_info.py
        py_info_script = Path(cached_py_info.__file__).parent / "py_info.py"
        original_content = py_info_script.read_text(encoding="utf-8")

        try:
            # 4. Clear the in-memory cache
            mocker.patch.dict(cached_py_info._CACHE, {}, clear=True)  # noqa: SLF001
            py_info_script.write_text(original_content + "\n# a comment", encoding="utf-8")
    
            # 5. Get the PythonInfo object again
            info = PythonInfo.from_exe(sys.executable, session_app_data)

            # 6. Assert that _run_subprocess was called again
            if is_macos_brew(info):
                assert spy.call_count in {2, 3}
            else:
>               assert spy.call_count == 2
E               assert 1 == 2
E                +  where 1 = <function _run_subprocess at 0x7fd7655e5d20>.call_count

I've debugged it, and it seems that the spy.call_count is increased only once (0 → 1) in step 5.

I don't understand why the spy.call_count should be 2 when the spy is created after step one, which should mean that the first call to _run_subprocess in step one is not recorded by the mocker.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions