From 7c28c293823f016628f1d9856555492a5ee28877 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 25 Dec 2020 23:03:07 +0100 Subject: [PATCH] detect sparse support by fs --- src/borg/testsuite/chunker_pytest.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/borg/testsuite/chunker_pytest.py b/src/borg/testsuite/chunker_pytest.py index 7f1d25e5006..ad68dc707e2 100644 --- a/src/borg/testsuite/chunker_pytest.py +++ b/src/borg/testsuite/chunker_pytest.py @@ -1,5 +1,6 @@ from io import BytesIO import os +import tempfile import pytest @@ -65,7 +66,19 @@ def make_content(sparsemap, header_size=0): return content -@pytest.mark.skipif(not has_seek_hole) +def fs_supports_sparse(): + if not has_seek_hole: + return False + with tempfile.TemporaryDirectory() as tmpdir: + fn = os.path.join(tmpdir, 'test_sparse') + make_sparsefile(fn, [(0, BS, False), (BS, BS, True)]) + with open(fn, 'rb') as f: + offset_hole = f.seek(0, os.SEEK_HOLE) + offset_data = f.seek(0, os.SEEK_DATA) + return offset_hole == 0 and offset_data == BS + + +@pytest.mark.skipif(not fs_supports_sparse()) @pytest.mark.parametrize("fname, sparse_map", [ ('sparse1', map_sparse1), ('sparse2', map_sparse2), @@ -91,7 +104,7 @@ def get_sparsemap_fd(fname): assert get_sparsemap_fd(fn) == sparse_map -@pytest.mark.skipif(not has_seek_hole) +@pytest.mark.skipif(not fs_supports_sparse()) @pytest.mark.parametrize("fname, sparse_map, header_size, sparse", [ ('sparse1', map_sparse1, 0, False), ('sparse1', map_sparse1, 0, True),