summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozprofile/tests/test_clone_cleanup.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/mozprofile/tests/test_clone_cleanup.py')
-rw-r--r--testing/mozbase/mozprofile/tests/test_clone_cleanup.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/testing/mozbase/mozprofile/tests/test_clone_cleanup.py b/testing/mozbase/mozprofile/tests/test_clone_cleanup.py
new file mode 100644
index 0000000000..5a2e9bbd24
--- /dev/null
+++ b/testing/mozbase/mozprofile/tests/test_clone_cleanup.py
@@ -0,0 +1,78 @@
+#!/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()