Forging a test for auto arrangement pruning with a twisted clock.

pull/1747/head
Kieran R. Prasch 2020-02-25 22:49:27 -07:00 committed by Kieran Prasch
parent 6fc18da176
commit 4b82f6261f
No known key found for this signature in database
GPG Key ID: 199AB839D4125A62
3 changed files with 34 additions and 6 deletions

View File

@ -35,7 +35,7 @@ from cryptography.hazmat.primitives.serialization import Encoding
from cryptography.x509 import load_pem_x509_certificate, Certificate, NameOID
from eth_utils import to_checksum_address
from flask import request, Response
from twisted.internet import threads
from twisted.internet import threads, reactor
from twisted.internet.task import LoopingCall
from twisted.logger import Logger
@ -1012,8 +1012,8 @@ class Ursula(Teacher, Character, Worker):
rest_app=rest_app, datastore=datastore,
hosting_power=tls_hosting_power)
self.__arrangement_pruning_task = LoopingCall(self.__prune_arrangements)
self.__arrangement_pruning_task.start(interval=self._pruning_interval)
self._arrangement_pruning_task = LoopingCall(f=self.__prune_arrangements)
self._arrangement_pruning_task.start(interval=self._pruning_interval) # TODO: Move to ursula.run ?
#
# Stranger-Ursula

View File

@ -147,13 +147,15 @@ class KeyStore(object):
session.query(PolicyArrangement).filter_by(id=arrangement_id).delete()
session.commit()
def del_expired_policy_arrangements(self, session=None):
def del_expired_policy_arrangements(self, session=None) -> int:
"""
Deletes all expired PolicyArrangements from the Keystore.
"""
session = session or self._session_on_init_thread
result = session.query(PolicyArrangement).filter(expiration=datetime.now() >= PolicyArrangement.expiration).delete()
return result
now = datetime.now()
result = session.query(PolicyArrangement).filter_by(expiration=now >= PolicyArrangement.expiration)
deleted_records = result.delete()
return deleted_records
def attach_kfrag_to_saved_arrangement(self, alice, id_as_hex, kfrag, session=None):
session = session or self._session_on_init_thread

View File

@ -5,6 +5,8 @@ import maya
import pytest
from constant_sorrow.constants import NO_DECRYPTION_PERFORMED
from twisted.internet.task import Clock
from nucypher.characters.lawful import Bob, Ursula
from nucypher.characters.lawful import Enrico
from nucypher.policy.collections import TreasureMap
@ -198,3 +200,27 @@ def test_bob_retrieves_with_treasure_map(
treasure_map=bytes(treasure_map))
assert text1[0] == text2[0] == b'Welcome to flippering number 2.'
def test_bob_retrieves_too_late(federated_bob, federated_ursulas,
enacted_federated_policy, capsule_side_channel):
clock = Clock()
for u in federated_ursulas:
u._arrangement_pruning_task.stop()
u._arrangement_pruning_task.clock = clock
u._arrangement_pruning_task.start(interval=Ursula._pruning_interval)
clock.advance(Ursula._pruning_interval*2)
enrico = capsule_side_channel.enrico
message_kit = capsule_side_channel()
treasure_map = enacted_federated_policy.treasure_map
alice_verifying_key = enacted_federated_policy.alice.stamp
with pytest.raises(Exception): # FIXME
federated_bob.retrieve(
message_kit,
enrico=enrico,
alice_verifying_key=alice_verifying_key,
label=enacted_federated_policy.label,
treasure_map=treasure_map)