From 30497dc400eb4b26df168cf96516081dd40854d8 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Mon, 2 Dec 2019 11:15:18 -0500 Subject: [PATCH] Have and use a voucher store fixture --- src/_zkapauthorizer/tests/fixtures.py | 32 +++++++++++++ src/_zkapauthorizer/tests/test_controller.py | 50 ++++---------------- src/_zkapauthorizer/tests/test_model.py | 21 ++++---- 3 files changed, 52 insertions(+), 51 deletions(-) diff --git a/src/_zkapauthorizer/tests/fixtures.py b/src/_zkapauthorizer/tests/fixtures.py index dbb49e6..eb64887 100644 --- a/src/_zkapauthorizer/tests/fixtures.py +++ b/src/_zkapauthorizer/tests/fixtures.py @@ -20,6 +20,8 @@ from __future__ import ( absolute_import, ) +import attr + from fixtures import ( Fixture, TempDir, @@ -33,6 +35,11 @@ from allmydata.storage.server import ( StorageServer, ) +from ..model import ( + VoucherStore, + memory_connect, +) + class AnonymousStorageServer(Fixture): """ Supply an instance of allmydata.storage.server.StorageServer which @@ -50,3 +57,28 @@ class AnonymousStorageServer(Fixture): self.tempdir.asBytesMode().path, b"x" * 20, ) + + +@attr.s +class TemporaryVoucherStore(Fixture): + """ + Create a ``VoucherStore`` in a temporary directory associated with the + given test case. + + :ivar get_config: A function like the one built by ``tahoe_configs``. + :ivar get_now: A no-argument callable that returns a datetime giving a + time to consider as "now". + + :ivar store: A newly created temporary store. + """ + get_config = attr.ib() + get_now = attr.ib() + + def _setUp(self): + self.tempdir = self.useFixture(TempDir()) + self.config = self.get_config(self.tempdir.join(b"node"), b"tub.port") + self.store = VoucherStore.from_node_config( + self.config, + self.get_now, + memory_connect, + ) diff --git a/src/_zkapauthorizer/tests/test_controller.py b/src/_zkapauthorizer/tests/test_controller.py index 1684e62..b36a78c 100644 --- a/src/_zkapauthorizer/tests/test_controller.py +++ b/src/_zkapauthorizer/tests/test_controller.py @@ -50,10 +50,6 @@ from testtools.twistedsupport import ( failed, ) -from fixtures import ( - TempDir, -) - from hypothesis import ( given, ) @@ -105,8 +101,6 @@ from ..controller import ( ) from ..model import ( - memory_connect, - VoucherStore, UnblindedToken, Pending as model_Pending, DoubleSpend as model_DoubleSpend, @@ -122,6 +116,10 @@ from .strategies import ( from .matchers import ( Provides, ) +from .fixtures import ( + TemporaryVoucherStore, +) + class PaymentControllerTests(TestCase): """ @@ -133,15 +131,7 @@ class PaymentControllerTests(TestCase): A ``Voucher`` is not marked redeemed before ``IRedeemer.redeem`` completes. """ - tempdir = self.useFixture(TempDir()) - store = VoucherStore.from_node_config( - get_config( - tempdir.join(b"node"), - b"tub.port", - ), - now=lambda: now, - connect=memory_connect, - ) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store controller = PaymentController( store, NonRedeemer(), @@ -159,15 +149,7 @@ class PaymentControllerTests(TestCase): """ A ``Voucher`` is marked as redeemed after ``IRedeemer.redeem`` succeeds. """ - tempdir = self.useFixture(TempDir()) - store = VoucherStore.from_node_config( - get_config( - tempdir.join(b"node"), - b"tub.port", - ), - now=lambda: now, - connect=memory_connect, - ) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store controller = PaymentController( store, DummyRedeemer(), @@ -189,15 +171,7 @@ class PaymentControllerTests(TestCase): A ``Voucher`` is marked as double-spent after ``IRedeemer.redeem`` fails with ``AlreadySpent``. """ - tempdir = self.useFixture(TempDir()) - store = VoucherStore.from_node_config( - get_config( - tempdir.join(b"node"), - b"tub.port", - ), - now=lambda: now, - connect=memory_connect, - ) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store controller = PaymentController( store, DoubleSpendRedeemer(), @@ -220,15 +194,7 @@ class PaymentControllerTests(TestCase): When ``PaymentController`` is created, any vouchers in the store in the pending state are redeemed. """ - tempdir = self.useFixture(TempDir()) - store = VoucherStore.from_node_config( - get_config( - tempdir.join(b"node"), - b"tub.port", - ), - now=lambda: now, - connect=memory_connect, - ) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store # Create the voucher state in the store with a redemption that will # certainly fail. unpaid_controller = PaymentController( diff --git a/src/_zkapauthorizer/tests/test_model.py b/src/_zkapauthorizer/tests/test_model.py index 7414c67..d31e669 100644 --- a/src/_zkapauthorizer/tests/test_model.py +++ b/src/_zkapauthorizer/tests/test_model.py @@ -79,6 +79,9 @@ from .strategies import ( random_tokens, unblinded_tokens, ) +from .fixtures import ( + TemporaryVoucherStore, +) class VoucherStoreTests(TestCase): @@ -107,7 +110,7 @@ class VoucherStoreTests(TestCase): ``VoucherStore.get`` raises ``KeyError`` when called with a voucher not previously added to the store. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store self.assertThat( lambda: store.get(voucher), raises(KeyError), @@ -119,7 +122,7 @@ class VoucherStoreTests(TestCase): ``VoucherStore.get`` returns a ``Voucher`` representing a voucher previously added to the store with ``VoucherStore.add``. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.add(voucher, tokens) self.assertThat( store.get(voucher), @@ -136,7 +139,7 @@ class VoucherStoreTests(TestCase): More than one call to ``VoucherStore.add`` with the same argument results in the same state as a single call. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.add(voucher, tokens) store.add(voucher, []) self.assertThat( @@ -155,7 +158,7 @@ class VoucherStoreTests(TestCase): ``VoucherStore.list`` returns a ``list`` containing a ``Voucher`` object for each voucher previously added. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store for voucher in vouchers: store.add(voucher, []) @@ -259,7 +262,7 @@ class UnblindedTokenStoreTests(TestCase): """ Unblinded tokens that are added to the store can later be retrieved. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.insert_unblinded_tokens_for_voucher(voucher_value, tokens) retrieved_tokens = store.extract_unblinded_tokens(len(tokens)) self.expectThat(tokens, AfterPreprocessing(sorted, Equals(retrieved_tokens))) @@ -297,7 +300,7 @@ class UnblindedTokenStoreTests(TestCase): ), ) - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.add(voucher_value, random) store.insert_unblinded_tokens_for_voucher(voucher_value, unblinded) loaded_voucher = store.get(voucher_value) @@ -322,7 +325,7 @@ class UnblindedTokenStoreTests(TestCase): A voucher which is reported as double-spent is marked in the database as such. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.add(voucher_value, random_tokens) store.mark_voucher_double_spent(voucher_value) voucher = store.get(voucher_value) @@ -362,7 +365,7 @@ class UnblindedTokenStoreTests(TestCase): unique=True, ), ) - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store store.add(voucher_value, random) store.insert_unblinded_tokens_for_voucher(voucher_value, unblinded) try: @@ -383,7 +386,7 @@ class UnblindedTokenStoreTests(TestCase): """ A voucher which is not known cannot be marked as double-spent. """ - store = store_for_test(self, get_config, lambda: now) + store = self.useFixture(TemporaryVoucherStore(get_config, lambda: now)).store try: result = store.mark_voucher_double_spent(voucher_value) except ValueError: -- GitLab