Skip to content

Monte Carlo test fixtures write their logs into the working directory #1189

Description

@thc1006

Describe the bug

The Monte Carlo test fixtures pass a bare filename, so the logs land in whatever directory pytest was started from. Running the unit tests leaves three untracked files in the repository root, and nothing is ignoring them.

To Reproduce

On a clean develop:

$ git status --porcelain          # nothing
$ pytest tests/unit/simulation -q
197 passed, 5 skipped

$ git status --porcelain
?? monte_carlo_test.errors.txt
?? monte_carlo_test.inputs.txt
?? monte_carlo_test.outputs.txt

All three are zero bytes, so they come from the files being opened rather than from anything being written.

Expected behavior

The suite leaves the working tree as it found it.

Additional context

The name comes from the shared fixture:

# tests/fixtures/monte_carlo/monte_carlo_fixtures.py
return MonteCarlo(
    filename="monte_carlo_test",
    ...
)

That is relative, so it resolves against the current working directory. It appears in three places: twice in that fixture and once in tests/unit/simulation/test_monte_carlo_plots_background.py.

There is already a workaround for this in the tree, which is what made me look. tests/integration/simulation/test_monte_carlo.py carries a helper that removes the files by name:

def _post_test_file_cleanup():
    """Clean monte carlo files after test session if they exist."""
    files_to_cleanup = [
        "monte_carlo_class_example.kml",
        "monte_carlo_test.errors.txt",
        ...

It is called from finally blocks in the integration tests, so it does not run for a unit-only invocation, which is why those runs leave the files behind. Its list also names a .kml and three .png, so more than the Monte Carlo logs are being written to the working directory.

Two ways to go, and I do not have a preference strong enough to argue for one:

  • point the fixtures at tmp_path, which removes the need for the cleanup helper as well;
  • or add the names to .gitignore, which hides them without stopping them.

The first is the one that would let the helper go away. Happy to open a pull request if that is the direction, though it touches fixtures several tests share, so it seemed worth asking first.

Not urgent. It is a papercut, but an untracked file in the root is easy to sweep into an unrelated commit.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions