From 7eb9f344f41d3b0045a7cec04d2cb368edcf12a2 Mon Sep 17 00:00:00 2001
From: Victor Shyba <victor1984@riseup.net>
Date: Fri, 28 Sep 2018 13:47:37 -0300
Subject: [PATCH] test recover from invalid tokens

---
 tests/functional/dht/test_store.py | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/tests/functional/dht/test_store.py b/tests/functional/dht/test_store.py
index f5dc8a648..2fabd05ab 100644
--- a/tests/functional/dht/test_store.py
+++ b/tests/functional/dht/test_store.py
@@ -13,6 +13,31 @@ log = logging.getLogger()
 class TestStoreExpiration(TestKademliaBase):
     network_size = 40
 
+    @defer.inlineCallbacks
+    def test_nullify_token(self):
+        blob_hash = generate_id(1)
+        announcing_node = self.nodes[20]
+        # announce the blob
+        announce_d = announcing_node.announceHaveBlob(blob_hash)
+        self.pump_clock(5+1)
+        storing_node_ids = yield announce_d
+        self.assertEqual(len(storing_node_ids), 8)
+
+        for node in set(self.nodes).union(set(self._seeds)):
+            # now, everyone has the wrong token
+            node.change_token()
+            node.change_token()
+
+        announce_d = announcing_node.announceHaveBlob(blob_hash)
+        self.pump_clock(5+1)
+        storing_node_ids = yield announce_d
+        self.assertEqual(len(storing_node_ids), 0)  # cant store, wrong tokens, but they get nullified
+
+        announce_d = announcing_node.announceHaveBlob(blob_hash)
+        self.pump_clock(5+1)
+        storing_node_ids = yield announce_d
+        self.assertEqual(len(storing_node_ids), 8)  # next attempt succeeds as it refreshes tokens
+
     @defer.inlineCallbacks
     def test_store_and_expire(self):
         blob_hash = generate_id(1)