Skip to content

Commit a35a1a5

Browse files
committed
Add legacy tests (See zarr-developers#840)
Each fixture (flat & nested) should have a version which does not include any new metadata.
1 parent c36ec3d commit a35a1a5

File tree

6 files changed

+99
-15
lines changed

6 files changed

+99
-15
lines changed

fixture/flat/.zarray

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"id": "blosc",
1111
"shuffle": 1
1212
},
13+
"dimension_separator": ".",
1314
"dtype": "<i8",
1415
"fill_value": 0,
1516
"filters": null,
@@ -19,4 +20,4 @@
1920
2
2021
],
2122
"zarr_format": 2
22-
}
23+
}

fixture/flat_legacy/.zarray

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"chunks": [
3+
2,
4+
2
5+
],
6+
"compressor": {
7+
"blocksize": 0,
8+
"clevel": 5,
9+
"cname": "lz4",
10+
"id": "blosc",
11+
"shuffle": 1
12+
},
13+
"dtype": "<i8",
14+
"fill_value": 0,
15+
"filters": null,
16+
"order": "C",
17+
"shape": [
18+
2,
19+
2
20+
],
21+
"zarr_format": 2
22+
}

fixture/flat_legacy/0.0

48 Bytes
Binary file not shown.

fixture/nested_legacy/.zarray

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"chunks": [
3+
2,
4+
2
5+
],
6+
"compressor": {
7+
"blocksize": 0,
8+
"clevel": 5,
9+
"cname": "lz4",
10+
"id": "blosc",
11+
"shuffle": 1
12+
},
13+
"dtype": "<i8",
14+
"fill_value": 0,
15+
"filters": null,
16+
"order": "C",
17+
"shape": [
18+
2,
19+
2
20+
],
21+
"zarr_format": 2
22+
}

fixture/nested_legacy/0/0

48 Bytes
Binary file not shown.

zarr/tests/test_dim_separator.py

+53-14
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
needs_fsspec = pytest.mark.skipif(not have_fsspec, reason="needs fsspec")
1313

1414

15-
@pytest.fixture(params=("static_nested",
16-
"static_flat",
15+
@pytest.fixture(params=("static_flat",
16+
"static_flat_legacy",
17+
"static_nested",
18+
"static_nested_legacy",
1719
"directory_nested",
1820
"directory_flat",
1921
"directory_default",
@@ -35,14 +37,16 @@ def dataset(tmpdir, request):
3537

3638
if which.startswith("static"):
3739
project_root = pathlib.Path(zarr.__file__).resolve().parent.parent
38-
if which.endswith("nested"):
39-
static = project_root / "fixture/nested"
40-
generator = NestedDirectoryStore
41-
else:
42-
static = project_root / "fixture/flat"
43-
generator = DirectoryStore
40+
suffix = which[len("static_"):]
41+
static = project_root / "fixture" / suffix
4442

4543
if not static.exists(): # pragma: no cover
44+
45+
if "nested" in which:
46+
generator = NestedDirectoryStore
47+
else:
48+
generator = DirectoryStore
49+
4650
# store the data - should be one-time operation
4751
s = generator(str(static))
4852
a = zarr.open(store=s, mode="w", shape=(2, 2), dtype="<i8")
@@ -69,22 +73,57 @@ def dataset(tmpdir, request):
6973
return str(loc)
7074

7175

72-
def verify(array):
73-
assert_array_equal(array[:], [[1, 2], [3, 4]])
76+
def verify(array, expect_failure=False):
77+
try:
78+
assert_array_equal(array[:], [[1, 2], [3, 4]])
79+
except:
80+
if expect_failure:
81+
pytest.xfail()
82+
else:
83+
raise
7484

7585

7686
def test_open(dataset):
77-
verify(zarr.open(dataset, "r"))
87+
"""
88+
Use zarr.open to open the dataset fixture. Legacy nested datatsets
89+
without the dimension_separator metadata are not expected to be
90+
openable.
91+
"""
92+
failure = "nested_legacy" in dataset
93+
verify(zarr.open(dataset, "r"), failure)
7894

7995

8096
@needs_fsspec
8197
def test_fsstore(dataset):
82-
verify(Array(store=FSStore(dataset)))
98+
"""
99+
Use FSStore to open the dataset fixture. Legacy nested datatsets
100+
without the dimension_separator metadata are not expected to be
101+
openable.
102+
"""
103+
failure = "nested_legacy" in dataset
104+
verify(Array(store=FSStore(dataset)), failure)
83105

84106

85107
def test_directory(dataset):
86-
verify(zarr.Array(store=DirectoryStore(dataset)))
108+
"""
109+
Use DirectoryStore to open the dataset fixture. Legacy nested datatsets
110+
without the dimension_separator metadata are not expected to be
111+
openable.
112+
"""
113+
failure = "nested_legacy" in dataset
114+
verify(zarr.Array(store=DirectoryStore(dataset)), failure)
87115

88116

89117
def test_nested(dataset):
90-
verify(Array(store=NestedDirectoryStore(dataset)))
118+
"""
119+
Use NestedDirectoryStore to open the dataset fixture. This is the only
120+
method that is expected to successfully open legacy nested datasets
121+
without the dimension_separator metadata. However, for none-Nested
122+
datasets without any metadata, NestedDirectoryStore will fail.
123+
"""
124+
failure = (
125+
"flat_legacy" in dataset or \
126+
"directory_default" in dataset or \
127+
"fs_default" in dataset
128+
)
129+
verify(Array(store=NestedDirectoryStore(dataset)), failure)

0 commit comments

Comments
 (0)