responder - wipes completed/expired data from the gatekeeper

This commit is contained in:
Sergi Delgado Segura
2020-04-22 14:55:43 +02:00
parent e7141b295e
commit f810607348
2 changed files with 24 additions and 10 deletions

View File

@@ -273,23 +273,27 @@ class Responder:
if len(self.trackers) > 0 and block is not None:
txids = block.get("tx")
completed_trackers = self.get_completed_trackers()
expired_trackers = self.get_expired_trackers(block.get("height"))
trackers_to_delete_gatekeeper = {
uuid: self.trackers[uuid].get("user_id") for uuid in completed_trackers + expired_trackers
}
if self.last_known_block == block.get("previousblockhash"):
self.check_confirmations(txids)
Cleaner.delete_trackers(
self.get_completed_trackers(),
block.get("height"),
self.trackers,
self.tx_tracker_map,
self.db_manager,
completed_trackers, block.get("height"), self.trackers, self.tx_tracker_map, self.db_manager
)
Cleaner.delete_trackers(
self.get_expired_trackers(block.get("height")),
expired_trackers,
block.get("height"),
self.trackers,
self.tx_tracker_map,
self.db_manager,
expired=True,
)
Cleaner.delete_gatekeeper_appointments(self.gatekeeper, trackers_to_delete_gatekeeper)
self.rebroadcast(self.get_txs_to_rebroadcast())
# NOTCOVERED

View File

@@ -307,7 +307,8 @@ def test_do_watch(temp_db_manager, gatekeeper, carrier, block_processor):
responder.tx_tracker_map[tracker.penalty_txid] = [uuid]
responder.missed_confirmations[tracker.penalty_txid] = 0
responder.unconfirmed_txs.append(tracker.penalty_txid)
responder.gatekeeper.registered_users[tracker.user_id].appointments.append(uuid)
# Assuming the appointment only took a single slot
responder.gatekeeper.registered_users[tracker.user_id].appointments[uuid] = 1
# We also need to store the info in the db
responder.db_manager.create_triggered_appointment_flag(uuid)
@@ -337,11 +338,17 @@ def test_do_watch(temp_db_manager, gatekeeper, carrier, block_processor):
generate_blocks_w_delay(100 - CONFIRMATIONS_BEFORE_RETRY - 2)
assert len(responder.unconfirmed_txs) == 0
assert len(responder.trackers) == 15
# Check they are not in the Gatekeeper either
for tracker in trackers[:5]:
assert len(responder.gatekeeper.registered_users[tracker.user_id].appointments) == 0
# CONFIRMATIONS_BEFORE_RETRY additional blocks should complete the rest
generate_blocks_w_delay(CONFIRMATIONS_BEFORE_RETRY)
assert len(responder.unconfirmed_txs) == 0
assert len(responder.trackers) == 0
# Check they are not in the Gatekeeper either
for tracker in trackers[5:]:
assert len(responder.gatekeeper.registered_users[tracker.user_id].appointments) == 0
def test_check_confirmations(db_manager, gatekeeper, carrier, block_processor):
@@ -480,14 +487,16 @@ def test_get_expired_trackers(responder):
dummy_tracker.user_id = user1_id
expired_unconfirmed_trackers_15[uuid] = dummy_tracker
responder.unconfirmed_txs.append(dummy_tracker.penalty_txid)
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments.append(uuid)
# Assume the appointment only took a single slot
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments[uuid] = 1
for _ in range(10):
uuid = uuid4().hex
dummy_tracker = create_dummy_tracker(penalty_rawtx=create_dummy_transaction().hex())
dummy_tracker.user_id = user1_id
expired_confirmed_trackers_15[uuid] = dummy_tracker
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments.append(uuid)
# Assume the appointment only took a single slot
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments[uuid] = 1
for _ in range(10):
uuid = uuid4().hex
@@ -495,7 +504,8 @@ def test_get_expired_trackers(responder):
dummy_tracker.user_id = user2_id
expired_unconfirmed_trackers_16[uuid] = dummy_tracker
responder.unconfirmed_txs.append(dummy_tracker.penalty_txid)
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments.append(uuid)
# Assume the appointment only took a single slot
responder.gatekeeper.registered_users[dummy_tracker.user_id].appointments[uuid] = 1
all_trackers = {}
all_trackers.update(expired_confirmed_trackers_15)