1
1
from io import BytesIO
2
2
import os
3
+ import tempfile
3
4
4
5
import pytest
5
6
@@ -65,7 +66,19 @@ def make_content(sparsemap, header_size=0):
65
66
return content
66
67
67
68
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' )
69
82
@pytest .mark .parametrize ("fname, sparse_map" , [
70
83
('sparse1' , map_sparse1 ),
71
84
('sparse2' , map_sparse2 ),
@@ -91,7 +104,7 @@ def get_sparsemap_fd(fname):
91
104
assert get_sparsemap_fd (fn ) == sparse_map
92
105
93
106
94
- @pytest .mark .skipif (not has_seek_hole )
107
+ @pytest .mark .skipif (not fs_supports_sparse (), reason = 'fs does not support sparse files' )
95
108
@pytest .mark .parametrize ("fname, sparse_map, header_size, sparse" , [
96
109
('sparse1' , map_sparse1 , 0 , False ),
97
110
('sparse1' , map_sparse1 , 0 , True ),
0 commit comments