78 lines
2 KiB
Python
78 lines
2 KiB
Python
#!/usr/bin/env python
|
|
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import os
|
|
|
|
import mozfile
|
|
import mozunit
|
|
import pytest
|
|
from mozprofile.profile import Profile
|
|
|
|
"""
|
|
test cleanup logic for the clone functionality
|
|
see https://bugzilla.mozilla.org/show_bug.cgi?id=642843
|
|
"""
|
|
|
|
|
|
@pytest.fixture
|
|
def profile(tmpdir):
|
|
# make a profile with one preference
|
|
path = tmpdir.mkdtemp().strpath
|
|
profile = Profile(path, preferences={"foo": "bar"}, restore=False)
|
|
user_js = os.path.join(profile.profile, "user.js")
|
|
assert os.path.exists(user_js)
|
|
return profile
|
|
|
|
|
|
def test_restore_true(profile):
|
|
counter = [0]
|
|
|
|
def _feedback(dir, content):
|
|
# Called by shutil.copytree on each visited directory.
|
|
# Used here to display info.
|
|
#
|
|
# Returns the items that should be ignored by
|
|
# shutil.copytree when copying the tree, so always returns
|
|
# an empty list.
|
|
counter[0] += 1
|
|
return []
|
|
|
|
# make a clone of this profile with restore=True
|
|
clone = Profile.clone(profile.profile, restore=True, ignore=_feedback)
|
|
try:
|
|
clone.cleanup()
|
|
|
|
# clone should be deleted
|
|
assert not os.path.exists(clone.profile)
|
|
assert counter[0] > 0
|
|
finally:
|
|
mozfile.remove(clone.profile)
|
|
|
|
|
|
def test_restore_false(profile):
|
|
# make a clone of this profile with restore=False
|
|
clone = Profile.clone(profile.profile, restore=False)
|
|
try:
|
|
clone.cleanup()
|
|
|
|
# clone should still be around on the filesystem
|
|
assert os.path.exists(clone.profile)
|
|
finally:
|
|
mozfile.remove(clone.profile)
|
|
|
|
|
|
def test_cleanup_on_garbage_collected(profile):
|
|
clone = Profile.clone(profile.profile)
|
|
profile_dir = clone.profile
|
|
assert os.path.exists(profile_dir)
|
|
del clone
|
|
|
|
# clone should be deleted
|
|
assert not os.path.exists(profile_dir)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
mozunit.main()
|