diff --git a/src/_zkapauthorizer/tests/matchers.py b/src/_zkapauthorizer/tests/matchers.py index 0a52380b4538d35b190613517c6becdc6ff4a5f2..b3730b75554bac25fa5432cb39f82a97da413cb9 100644 --- a/src/_zkapauthorizer/tests/matchers.py +++ b/src/_zkapauthorizer/tests/matchers.py @@ -16,6 +16,10 @@ Testtools matchers useful for the test suite. """ +from datetime import ( + datetime, +) + import attr from testtools.matchers import ( @@ -28,6 +32,8 @@ from testtools.matchers import ( GreaterThan, LessThan, Equals, + AfterPreprocessing, + AllMatch, ) @attr.s @@ -99,3 +105,31 @@ def between(low, high): LessThan(high), ), ) + + +def leases_current(relevant_storage_indexes, now, min_lease_remaining): + """ + Return a matcher on a ``DummyStorageServer`` instance which matches + servers for which the leases on the given storage indexes do not expire + before ``min_lease_remaining``. + """ + return AfterPreprocessing( + # Get share stats for storage indexes we should have + # visited and maintained. + lambda storage_server: list( + stat + for (storage_index, stat) + in storage_server.buckets.items() + if storage_index in relevant_storage_indexes + ), + AllMatch( + AfterPreprocessing( + # Lease expiration for anything visited must be + # further in the future than min_lease_remaining, + # either because it had time left or because we + # renewed it. + lambda share_stat: datetime.utcfromtimestamp(share_stat.lease_expiration), + GreaterThan(now + min_lease_remaining), + ), + ), + ) diff --git a/src/_zkapauthorizer/tests/test_lease_maintenance.py b/src/_zkapauthorizer/tests/test_lease_maintenance.py index ddcc6db16024ddf5175241d225b1863940beabf6..c3c7e8b11428a6225d995e77449c7794763b6e21 100644 --- a/src/_zkapauthorizer/tests/test_lease_maintenance.py +++ b/src/_zkapauthorizer/tests/test_lease_maintenance.py @@ -37,7 +37,6 @@ from testtools.matchers import ( HasLength, MatchesAll, AllMatch, - GreaterThan, AfterPreprocessing, ) from testtools.twistedsupport import ( @@ -83,6 +82,7 @@ from ..foolscap import ( from .matchers import ( Provides, between, + leases_current, ) from .strategies import ( storage_indexes, @@ -469,31 +469,3 @@ class MaintainLeasesFromRootTests(TestCase): min_lease_remaining, )) ) - - -def leases_current(relevant_storage_indexes, now, min_lease_remaining): - """ - Return a matcher on a ``DummyStorageServer`` instance which matches - servers for which the leases on the given storage indexes do not expire - before ``min_lease_remaining``. - """ - return AfterPreprocessing( - # Get share stats for storage indexes we should have - # visited and maintained. - lambda storage_server: list( - stat - for (storage_index, stat) - in storage_server.buckets.items() - if storage_index in relevant_storage_indexes - ), - AllMatch( - AfterPreprocessing( - # Lease expiration for anything visited must be - # further in the future than min_lease_remaining, - # either because it had time left or because we - # renewed it. - lambda share_stat: datetime.utcfromtimestamp(share_stat.lease_expiration), - GreaterThan(now + min_lease_remaining), - ), - ), - )