python / python/cpython

Order-dependent failure: test_profiling CLI test fails after test_importlib.test_util

Open
#152,659 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

tests type-bug
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

Bug report

Bug description:
Summary

I found an order-dependent test failure on current main.

A test_profiling sampling CLI test passes when run alone, but fails when run after test_importlib.test_util.

Environment
  • OS: Windows NT 10.0.26200.0
  • CPython commit: 449122ed0dbdb6a545af4927c59f4c80ee15c515
  • Debug build: PCbuild\amd64\python_d.exe
  • Release build: also reproduced
  • Branch: investigate/deep-cpython-bug-hunt
Reproduction
PCbuild\amd64\python_d.exe -m unittest -v test.test_importlib.test_util test.test_profiling.test_sampling_profiler.test_cli.TestSampleProfilerCLI.test_cli_module_argument_parsing

The same profiling test passes when run alone.

Actual behavior

The test fails with:

profiling.sampling.errors.SamplingModuleNotFoundError: Module 'mymodule' not found.
Expected behavior

The profiling CLI test should pass regardless of whether test_importlib.test_util ran earlier in the same process.

Investigation

The profiling CLI test patches:

importlib.util.find_spec

However, after running test_importlib.test_util, importlib.util and sys.modules["importlib.util"] appear to refer to different module objects.

The CLI code calls through its own imported module reference:

profiling.sampling.cli.importlib.util.find_spec

So the mock on the global importlib.util.find_spec does not intercept the lookup, and the CLI tries to resolve the fake module name normally.

That leads to:

SamplingModuleNotFoundError: Module 'mymodule' not found.

I could not find an existing open issue or PR covering this failure.

Possible fix

The smallest fix may be to patch the symbol at the point where it is used, for example:

profiling.sampling.cli.importlib.util.find_spec

inside the profiling CLI tests, or alternatively to avoid this mock by using a real temporary module.

I am happy to prepare a focused test-only PR if that direction sounds reasonable.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Windows

Linked PRs
  • gh-152675

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with test.test_importlib.test_util and test.test_profiling.test_sampling_profiler.test_cli.TestSampleProfilerCLI.test_cli_module_argument_parsing, then run the reported unittest command on Windows. Check the mock target against the module reference used by profiling.sampling.cli. Done means the CLI test passes alone and after test_importlib.test_util; review linked PR gh-152675 for current work.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
testing-qa
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.