Skip to content

Commit be27b06

Browse files
detect sparse support by fs
1 parent 18b54f9 commit be27b06

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/borg/testsuite/chunker_pytest.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from io import BytesIO
22
import os
3+
import tempfile
34

45
import pytest
56

@@ -65,7 +66,19 @@ def make_content(sparsemap, header_size=0):
6566
return content
6667

6768

68-
@pytest.mark.skipif(not has_seek_hole)
69+
def fs_supports_sparse():
70+
if not has_seek_hole:
71+
return False
72+
with tempfile.TemporaryDirectory() as tmpdir:
73+
fn = os.path.join(tmpdir, 'test_sparse')
74+
make_sparsefile(fn, [(0, BS, False), (BS, BS, True)])
75+
with open(fn, 'rb') as f:
76+
offset_hole = f.seek(0, os.SEEK_HOLE)
77+
offset_data = f.seek(0, os.SEEK_DATA)
78+
return offset_hole == 0 and offset_data == BS
79+
80+
81+
@pytest.mark.skipif(not fs_supports_sparse(), reason='fs does not support sparse files')
6982
@pytest.mark.parametrize("fname, sparse_map", [
7083
('sparse1', map_sparse1),
7184
('sparse2', map_sparse2),
@@ -91,7 +104,7 @@ def get_sparsemap_fd(fname):
91104
assert get_sparsemap_fd(fn) == sparse_map
92105

93106

94-
@pytest.mark.skipif(not has_seek_hole)
107+
@pytest.mark.skipif(not fs_supports_sparse(), reason='fs does not support sparse files')
95108
@pytest.mark.parametrize("fname, sparse_map, header_size, sparse", [
96109
('sparse1', map_sparse1, 0, False),
97110
('sparse1', map_sparse1, 0, True),

0 commit comments

Comments
 (0)