diff options
author | Omar Sandoval <osandov@fb.com> | 2018-01-18 14:26:35 -0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-03-06 11:28:37 +0100 |
commit | 678da5a7f71ed7fbc887e40cc8ef91008c6fe843 (patch) | |
tree | 1a2f01608affa5b7b4a9cd91976996c82450044a /libbtrfsutil/python/tests | |
parent | cfa89b30821fedb48ca163a9c1128c4db596c911 (diff) |
libbtrfsutil: add btrfs_util_delete_subvolume()
We also support recursive deletion using a subvolume iterator.
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'libbtrfsutil/python/tests')
-rw-r--r-- | libbtrfsutil/python/tests/test_subvolume.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libbtrfsutil/python/tests/test_subvolume.py b/libbtrfsutil/python/tests/test_subvolume.py index 2951154e..08083abe 100644 --- a/libbtrfsutil/python/tests/test_subvolume.py +++ b/libbtrfsutil/python/tests/test_subvolume.py @@ -270,6 +270,54 @@ class TestSubvolume(BtrfsTestCase): btrfsutil.create_snapshot(subvol, snapshot + '4', read_only=True) self.assertTrue(btrfsutil.get_subvolume_read_only(snapshot + '4')) + def test_delete_subvolume(self): + subvol = os.path.join(self.mountpoint, 'subvol') + btrfsutil.create_subvolume(subvol + '1') + self.assertTrue(os.path.exists(subvol + '1')) + btrfsutil.create_subvolume(subvol + '2') + self.assertTrue(os.path.exists(subvol + '2')) + btrfsutil.create_subvolume(subvol + '3') + self.assertTrue(os.path.exists(subvol + '3')) + + btrfsutil.delete_subvolume(subvol + '1') + self.assertFalse(os.path.exists(subvol + '1')) + btrfsutil.delete_subvolume((subvol + '2').encode()) + self.assertFalse(os.path.exists(subvol + '2')) + if HAVE_PATH_LIKE: + btrfsutil.delete_subvolume(PurePath(subvol + '3')) + self.assertFalse(os.path.exists(subvol + '3')) + + # Test deleting subvolumes under '/' in a chroot. + pid = os.fork() + if pid == 0: + try: + os.chroot(self.mountpoint) + os.chdir('/') + btrfsutil.create_subvolume('/subvol4') + self.assertTrue(os.path.exists('/subvol4')) + btrfsutil.delete_subvolume('/subvol4') + self.assertFalse(os.path.exists('/subvol4')) + with self.assertRaises(btrfsutil.BtrfsUtilError): + btrfsutil.delete_subvolume('/') + os._exit(0) + except Exception: + traceback.print_exc() + os._exit(1) + wstatus = os.waitpid(pid, 0)[1] + self.assertTrue(os.WIFEXITED(wstatus)) + self.assertEqual(os.WEXITSTATUS(wstatus), 0) + + btrfsutil.create_subvolume(subvol + '5') + btrfsutil.create_subvolume(subvol + '5/foo') + btrfsutil.create_subvolume(subvol + '5/bar') + btrfsutil.create_subvolume(subvol + '5/bar/baz') + btrfsutil.create_subvolume(subvol + '5/bar/qux') + btrfsutil.create_subvolume(subvol + '5/quux') + with self.assertRaises(btrfsutil.BtrfsUtilError): + btrfsutil.delete_subvolume(subvol + '5') + btrfsutil.delete_subvolume(subvol + '5', recursive=True) + self.assertFalse(os.path.exists(subvol + '5')) + def test_subvolume_iterator(self): pwd = os.getcwd() try: |