From a0e9905477ef4f5f487b6ce572c7a3e491335285 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Tue, 25 Feb 2020 14:20:10 -0500 Subject: [PATCH] Avoid repeating storage indexes in the node hierarchy It's not impossible or even disallowed. However, if a storage index is repeated it sure as heck better have the same object associated with it - which this strategy does not ensure. --- src/_zkapauthorizer/tests/strategies.py | 11 +++++++++++ src/_zkapauthorizer/tests/test_lease_maintenance.py | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/_zkapauthorizer/tests/strategies.py b/src/_zkapauthorizer/tests/strategies.py index b4d5daa..4ba150c 100644 --- a/src/_zkapauthorizer/tests/strategies.py +++ b/src/_zkapauthorizer/tests/strategies.py @@ -657,7 +657,18 @@ def node_hierarchies(): Build hierarchies of ``IDirectoryNode`` and other ``IFilesystemNode`` (incomplete) providers. """ + def storage_indexes_are_distinct(nodes): + seen = set() + for n in nodes.flatten(): + si = n.get_storage_index() + if si in seen: + return False + seen.add(si) + return True + return recursive( leaf_nodes(), directory_nodes, + ).filter( + storage_indexes_are_distinct, ) diff --git a/src/_zkapauthorizer/tests/test_lease_maintenance.py b/src/_zkapauthorizer/tests/test_lease_maintenance.py index a59f776..8d3545f 100644 --- a/src/_zkapauthorizer/tests/test_lease_maintenance.py +++ b/src/_zkapauthorizer/tests/test_lease_maintenance.py @@ -552,7 +552,7 @@ class MaintainLeasesFromRootTests(TestCase): for node in root_node.flatten(): for storage_server in storage_broker.get_connected_servers(): try: - stat = storage_server.buckets[node._storage_index] + stat = storage_server.buckets[node.get_storage_index()] except KeyError: continue else: -- GitLab