Răsfoiți Sursa

detect sparse support by fs

Thomas Waldmann 4 ani în urmă
părinte
comite
37a7436ff9
1 a modificat fișierele cu 19 adăugiri și 2 ștergeri
  1. 19 2
      src/borg/testsuite/chunker_pytest.py

+ 19 - 2
src/borg/testsuite/chunker_pytest.py

@@ -1,5 +1,6 @@
 from io import BytesIO
 import os
+import tempfile
 
 import pytest
 
@@ -65,7 +66,23 @@ 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:
+            try:
+                offset_hole = f.seek(0, os.SEEK_HOLE)
+                offset_data = f.seek(0, os.SEEK_DATA)
+            except OSError:
+                # no sparse support if these seeks do not work
+                return False
+        return offset_hole == 0 and offset_data == BS
+
+
+@pytest.mark.skipif(not fs_supports_sparse(), reason='fs does not support sparse files')
 @pytest.mark.parametrize("fname, sparse_map", [
     ('sparse1', map_sparse1),
     ('sparse2', map_sparse2),
@@ -91,7 +108,7 @@ def test_sparsemap(tmpdir, fname, sparse_map):
     assert get_sparsemap_fd(fn) == sparse_map
 
 
-@pytest.mark.skipif(not has_seek_hole)
+@pytest.mark.skipif(not fs_supports_sparse(), reason='fs does not support sparse files')
 @pytest.mark.parametrize("fname, sparse_map, header_size, sparse", [
     ('sparse1', map_sparse1, 0, False),
     ('sparse1', map_sparse1, 0, True),