1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-26 01:37:20 +00:00

assert_dirs_equal: add ignore_bsdflags and ignore_xattrs argument

bsdflags are not supported in the FUSE mount.
xattrs are supported, but are tested separately.
This commit is contained in:
Thomas Waldmann 2016-10-23 20:36:05 +02:00
parent f086dad41b
commit 48fa449e39
2 changed files with 16 additions and 10 deletions

View file

@ -60,11 +60,11 @@ def assert_creates_file(self, path):
yield yield
self.assert_true(os.path.exists(path), '{} should exist'.format(path)) self.assert_true(os.path.exists(path), '{} should exist'.format(path))
def assert_dirs_equal(self, dir1, dir2): def assert_dirs_equal(self, dir1, dir2, **kwargs):
diff = filecmp.dircmp(dir1, dir2) diff = filecmp.dircmp(dir1, dir2)
self._assert_dirs_equal_cmp(diff) self._assert_dirs_equal_cmp(diff, **kwargs)
def _assert_dirs_equal_cmp(self, diff): def _assert_dirs_equal_cmp(self, diff, ignore_bsdflags=False, ignore_xattrs=False):
self.assert_equal(diff.left_only, []) self.assert_equal(diff.left_only, [])
self.assert_equal(diff.right_only, []) self.assert_equal(diff.right_only, [])
self.assert_equal(diff.diff_files, []) self.assert_equal(diff.diff_files, [])
@ -77,7 +77,7 @@ def _assert_dirs_equal_cmp(self, diff):
# Assume path2 is on FUSE if st_dev is different # Assume path2 is on FUSE if st_dev is different
fuse = s1.st_dev != s2.st_dev fuse = s1.st_dev != s2.st_dev
attrs = ['st_mode', 'st_uid', 'st_gid', 'st_rdev'] attrs = ['st_mode', 'st_uid', 'st_gid', 'st_rdev']
if has_lchflags: if has_lchflags and not ignore_bsdflags:
attrs.append('st_flags') attrs.append('st_flags')
if not fuse or not os.path.isdir(path1): if not fuse or not os.path.isdir(path1):
# dir nlink is always 1 on our fuse filesystem # dir nlink is always 1 on our fuse filesystem
@ -96,11 +96,12 @@ def _assert_dirs_equal_cmp(self, diff):
else: else:
d1.append(round(s1.st_mtime_ns, st_mtime_ns_round)) d1.append(round(s1.st_mtime_ns, st_mtime_ns_round))
d2.append(round(s2.st_mtime_ns, st_mtime_ns_round)) d2.append(round(s2.st_mtime_ns, st_mtime_ns_round))
d1.append(no_selinux(get_all(path1, follow_symlinks=False))) if not ignore_xattrs:
d2.append(no_selinux(get_all(path2, follow_symlinks=False))) d1.append(no_selinux(get_all(path1, follow_symlinks=False)))
d2.append(no_selinux(get_all(path2, follow_symlinks=False)))
self.assert_equal(d1, d2) self.assert_equal(d1, d2)
for sub_diff in diff.subdirs.values(): for sub_diff in diff.subdirs.values():
self._assert_dirs_equal_cmp(sub_diff) self._assert_dirs_equal_cmp(sub_diff, ignore_bsdflags=ignore_bsdflags, ignore_xattrs=ignore_xattrs)
@contextmanager @contextmanager
def fuse_mount(self, location, mountpoint, *options): def fuse_mount(self, location, mountpoint, *options):

View file

@ -1040,11 +1040,16 @@ def has_noatime(some_file):
mountpoint = os.path.join(self.tmpdir, 'mountpoint') mountpoint = os.path.join(self.tmpdir, 'mountpoint')
# mount the whole repository, archive contents shall show up in archivename subdirs of mountpoint: # mount the whole repository, archive contents shall show up in archivename subdirs of mountpoint:
with self.fuse_mount(self.repository_location, mountpoint): with self.fuse_mount(self.repository_location, mountpoint):
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive', 'input')) # bsdflags are not supported by the FUSE mount
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive2', 'input')) # we also ignore xattrs here, they are tested separately
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive', 'input'),
ignore_bsdflags=True, ignore_xattrs=True)
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive2', 'input'),
ignore_bsdflags=True, ignore_xattrs=True)
# mount only 1 archive, its contents shall show up directly in mountpoint: # mount only 1 archive, its contents shall show up directly in mountpoint:
with self.fuse_mount(self.repository_location + '::archive', mountpoint): with self.fuse_mount(self.repository_location + '::archive', mountpoint):
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'input')) self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'input'),
ignore_bsdflags=True, ignore_xattrs=True)
# regular file # regular file
in_fn = 'input/file1' in_fn = 'input/file1'
out_fn = os.path.join(mountpoint, 'input', 'file1') out_fn = os.path.join(mountpoint, 'input', 'file1')