Skip to content

Commit 27efef0

Browse files
committed
Limit binary size, and range for key_ranges
1 parent 80a83a1 commit 27efef0

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/zarr/testing/strategies.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ def basic_indices(draw: st.DrawFn, *, shape: tuple[int], **kwargs): # type: ign
160160
)
161161

162162

163-
def key_ranges(keys: SearchStrategy = node_names) -> SearchStrategy[list[int]]:
163+
def key_ranges(
164+
keys: SearchStrategy = node_names, max_size: int | None = None
165+
) -> SearchStrategy[list[int]]:
164166
"""
165167
Function to generate key_ranges strategy for get_partial_values()
166168
returns list strategy w/ form::
@@ -169,7 +171,8 @@ def key_ranges(keys: SearchStrategy = node_names) -> SearchStrategy[list[int]]:
169171
(key, (range_start, range_step)),...]
170172
"""
171173
byte_ranges = st.tuples(
172-
st.none() | st.integers(min_value=0), st.none() | st.integers(min_value=0)
174+
st.none() | st.integers(min_value=0, max_value=max_size),
175+
st.none() | st.integers(min_value=0, max_value=max_size),
173176
)
174177
key_tuple = st.tuples(keys, byte_ranges)
175178
key_range_st = st.lists(key_tuple, min_size=1, max_size=10)

tests/v3/test_store/test_stateful_store.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from zarr.testing.strategies import key_ranges
2121
from zarr.testing.strategies import keys as zarr_keys
2222

23+
MAX_BINARY_SIZE = 100
24+
2325

2426
class SyncStoreWrapper(zarr.core.sync.SyncMixin):
2527
def __init__(self, store: Store) -> None:
@@ -116,7 +118,7 @@ def __init__(self, store: Store) -> None:
116118
def init_store(self):
117119
self.store.clear()
118120

119-
@rule(key=zarr_keys, data=st.binary(min_size=0, max_size=100))
121+
@rule(key=zarr_keys, data=st.binary(min_size=0, max_size=MAX_BINARY_SIZE))
120122
def set(self, key: str, data: DataObject) -> None:
121123
note(f"(set) Setting {key!r} with {data}")
122124
assert not self.store.mode.readonly
@@ -144,7 +146,9 @@ def get_invalid_zarr_keys(self, key: str, data: DataObject) -> None:
144146
@precondition(lambda self: len(self.model.keys()) > 0)
145147
@rule(data=st.data())
146148
def get_partial_values(self, data: DataObject) -> None:
147-
key_range = data.draw(key_ranges(keys=st.sampled_from(sorted(self.model.keys()))))
149+
key_range = data.draw(
150+
key_ranges(keys=st.sampled_from(sorted(self.model.keys())), max_size=MAX_BINARY_SIZE)
151+
)
148152
note(f"(get partial) {key_range=}")
149153
obs_maybe = self.store.get_partial_values(key_range, self.prototype)
150154
observed = []
@@ -246,6 +250,6 @@ def mk_test_instance_sync():
246250

247251
if isinstance(sync_store, ZipStore):
248252
pytest.skip(reason="ZipStore does not support delete")
249-
if isinstance(sync_store, LocalStore):
250-
pytest.skip(reason="This test does not handle subdirectories")
253+
# if isinstance(sync_store, LocalStore):
254+
# pytest.skip(reason="This test does not handle subdirectories")
251255
run_state_machine_as_test(mk_test_instance_sync, settings=Settings(report_multiple_bugs=True))

0 commit comments

Comments
 (0)