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

View File

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

View File

@ -5,6 +5,8 @@ import maya
import pytest import pytest
from constant_sorrow.constants import NO_DECRYPTION_PERFORMED 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 Bob, Ursula
from nucypher.characters.lawful import Enrico from nucypher.characters.lawful import Enrico
from nucypher.policy.collections import TreasureMap from nucypher.policy.collections import TreasureMap
@ -198,3 +200,27 @@ def test_bob_retrieves_with_treasure_map(
treasure_map=bytes(treasure_map)) treasure_map=bytes(treasure_map))
assert text1[0] == text2[0] == b'Welcome to flippering number 2.' 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)