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