From df4137d047942f3d248905e0ee0b35b4bcdb43cd Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Mon, 8 Nov 2021 16:25:20 -0500 Subject: [PATCH] put the details of the unrecognized response in the exception --- src/_zkapauthorizer/controller.py | 4 +++- src/_zkapauthorizer/tests/test_controller.py | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/_zkapauthorizer/controller.py b/src/_zkapauthorizer/controller.py index d86a8b8..3181685 100644 --- a/src/_zkapauthorizer/controller.py +++ b/src/_zkapauthorizer/controller.py @@ -78,12 +78,14 @@ class Unpaid(Exception): """ +@attr.s(frozen=True) class UnrecognizedFailureReason(Exception): """ An attempt was made to redeem a voucher and the response contained an unknown reason. The redemption attempt may be automatically retried at some point. """ + response = attr.ib() @attr.s @@ -530,7 +532,7 @@ class RistrettoRedeemer(object): elif reason == u"unpaid": raise Unpaid(voucher) - raise UnrecognizedFailureReason() + raise UnrecognizedFailureReason(result) self._log.info( "Redeemed: {public_key} {proof} {count}", diff --git a/src/_zkapauthorizer/tests/test_controller.py b/src/_zkapauthorizer/tests/test_controller.py index 71c8f4d..f84bf05 100644 --- a/src/_zkapauthorizer/tests/test_controller.py +++ b/src/_zkapauthorizer/tests/test_controller.py @@ -893,8 +893,9 @@ class RistrettoRedeemerTests(TestCase): ``RistrettoRedeemer.redeemWithCounter`` returns a ``Deferred`` that fails with ``UnrecognizedFailureReason``. """ + details = u"mysterious" num_tokens = counter + extra_tokens - issuer = UnsuccessfulRedemption(u"mysterious") + issuer = UnsuccessfulRedemption(details) treq = treq_for_loopback_ristretto(issuer) redeemer = RistrettoRedeemer(treq, NOWHERE) random_tokens = redeemer.random_tokens_for_voucher(voucher, counter, num_tokens) @@ -908,7 +909,14 @@ class RistrettoRedeemerTests(TestCase): failed( AfterPreprocessing( lambda f: f.value, - IsInstance(UnrecognizedFailureReason), + Equals( + UnrecognizedFailureReason( + { + u"success": False, + u"reason": details, + } + ) + ), ), ), ) -- GitLab