-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make sure tests do not leave any temp files behind #5345
Open
snejus
wants to merge
10
commits into
master
Choose a base branch
from
cleanup-tests
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Thank you for the PR! The changelog has not been updated, so here is a friendly reminder to check if you need to add an entry. |
…Case And move the definition to a shared module. The problem was that EmbedartCliTest ran `_common.TestCase.setUp` method which initialised temporary directory for the tests AND ran `helper.TestHelper.setup_beets` method which initialised another set of temporary directories. This meant that the first set of directories could not be tracked down for the cleanup.
This allows to clean them up in art (1) fetching, (2) resizing and (3) deinterlace tests.
This way they get automatically removed with removal of temp_dir. After this change `test/plugins/test_zero.py` does not any more leave any mediafield fixtures hanging around.
Due to some weird race conditions the temporary directories were not getting torn down for four of the tests. I failed to figure out why, and I found that using TestHelper to manage the temporary directory somehow fixes this.
And most importantly, remove a redudant invocation of `setup_beets` which left temporary directories hanging around without getting cleaned up.
Another reason why the switch to pytest would be a great thing. I'll give a review but what is the relation to the other PR, #5285? Do they conflict or are they about different classes? |
I think this supersedes #5285 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #5229 and relates to #5285.
I have to admit thsi was a fairly tough task - I initially assumed that the problem lies
with how the tests are setup, and that we're probably missing some
teardown_beets
callshere and there.
Unfortunately, it was not so simple. I came across several issues that gave rise to
leftover temporary files:
fetchart
,artresizer
andplay
handling of temporary files. These plugins createdisolated temporary files outside of the directories that tests clean up. You will find
I added a couple of functions (namely
get_module_tempdir
) that force these plugins tocreate files in directories determined by their module names. This way we can clean up
after them using the new
CleanupModulesMixin
.Tests that ran temporary directories setup twice, running
_common.TestCase.setUp
andtest.helper.TestHelper.setup_beets
. Both of these ranself.temp_dir = mkdtemp()
,therefore the directories created by the initial setup persisted since those have been
overridden and thus unreachable in the teardown. Here, I removed the
setUp
calls, seetest/plugins/test_embedart.py
test/test_importer.py
test/test_plugins.py
wheresetup_beets
was called twicetest/test_config_command.py
attempted to manage the temporary directory by itself,where I found that
tearDown
failed to remove the directory for four tests. Could notfigure out the cause, and found that delegating this task to
TestHelper
fixed theissue.
Mediafile fixture removal depended on calling
remove_mediafile_fixtures
method, whichtest/plugins/test_zero.py
failed to do. I made the fixtures to be created within thesame
temp_dir
directory that gets removed in the teardown, so now they are taken careof automatically.
In summary, see the test modules that left files behind:
And that's what we have right now:
Note that the command which provides the output is now available through
poe
.