diff --git a/acme/acme/client.py b/acme/acme/client.py index 7555a1cc7..0324967cf 100644 --- a/acme/acme/client.py +++ b/acme/acme/client.py @@ -681,16 +681,14 @@ class ClientNetwork(object): # pylint: disable=too-many-instance-attributes be retried once. """ - should_retry = True - while True: - try: + try: + return self._post_once(*args, **kwargs) + except messages.Error as error: + if error.code == 'badNonce': + logger.debug('Retrying request after error:\n%s', error) return self._post_once(*args, **kwargs) - except messages.Error as error: - if should_retry and error.code == 'badNonce': - logger.debug('Retrying request after error:\n%s', error) - should_retry = False - else: - raise + else: + raise def _post_once(self, url, obj, content_type=JOSE_CONTENT_TYPE, **kwargs): data = self._wrap_in_jws(obj, self._get_nonce(url)) diff --git a/acme/acme/client_test.py b/acme/acme/client_test.py index d67c425bd..179a8a08c 100644 --- a/acme/acme/client_test.py +++ b/acme/acme/client_test.py @@ -717,6 +717,16 @@ class ClientNetworkWithMockedResponseTest(unittest.TestCase): self.assertRaises(messages.Error, self.net.post, 'uri', self.obj, content_type=self.content_type) + def test_post_not_retried(self): + check_response = mock.MagicMock() + check_response.side_effect = [messages.Error.with_code('malformed'), + self.checked_response] + + # pylint: disable=protected-access + self.net._check_response = check_response + self.assertRaises(messages.Error, self.net.post, 'uri', + self.obj, content_type=self.content_type) + def test_post_successful_retry(self): check_response = mock.MagicMock() check_response.side_effect = [messages.Error.with_code('badNonce'),