diff options
Diffstat (limited to 'tests/asyncio')
-rw-r--r-- | tests/asyncio/future/test_async_future.py | 1 | ||||
-rw-r--r-- | tests/asyncio/gapic/test_method_async.py | 49 | ||||
-rw-r--r-- | tests/asyncio/operations_v1/test_operations_async_client.py | 28 | ||||
-rw-r--r-- | tests/asyncio/test_grpc_helpers_async.py | 88 | ||||
-rw-r--r-- | tests/asyncio/test_operation_async.py | 6 | ||||
-rw-r--r-- | tests/asyncio/test_page_iterator_async.py | 16 | ||||
-rw-r--r-- | tests/asyncio/test_retry_async.py | 16 |
7 files changed, 127 insertions, 77 deletions
diff --git a/tests/asyncio/future/test_async_future.py b/tests/asyncio/future/test_async_future.py index 3322cb0..1e9ae33 100644 --- a/tests/asyncio/future/test_async_future.py +++ b/tests/asyncio/future/test_async_future.py @@ -125,7 +125,6 @@ async def test_result_with_polling(): class AsyncFutureTimeout(AsyncFutureWithPoll): - async def done(self): await asyncio.sleep(0.2) return False diff --git a/tests/asyncio/gapic/test_method_async.py b/tests/asyncio/gapic/test_method_async.py index 7318362..2c6bbab 100644 --- a/tests/asyncio/gapic/test_method_async.py +++ b/tests/asyncio/gapic/test_method_async.py @@ -18,8 +18,11 @@ from grpc.experimental import aio import mock import pytest -from google.api_core import (exceptions, gapic_v1, grpc_helpers_async, - retry_async, timeout) +from google.api_core import exceptions +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async +from google.api_core import retry_async +from google.api_core import timeout def _utcnow_monotonic(): @@ -55,9 +58,7 @@ async def test_wrap_method_with_no_client_info(): fake_call = grpc_helpers_async.FakeUnaryUnaryCall() method = mock.Mock(spec=aio.UnaryUnaryMultiCallable, return_value=fake_call) - wrapped_method = gapic_v1.method_async.wrap_method( - method, client_info=None - ) + wrapped_method = gapic_v1.method_async.wrap_method(method, client_info=None) await wrapped_method(1, 2, meep="moop") @@ -76,9 +77,7 @@ async def test_wrap_method_with_custom_client_info(): fake_call = grpc_helpers_async.FakeUnaryUnaryCall() method = mock.Mock(spec=aio.UnaryUnaryMultiCallable, return_value=fake_call) - wrapped_method = gapic_v1.method_async.wrap_method( - method, client_info=client_info - ) + wrapped_method = gapic_v1.method_async.wrap_method(method, client_info=client_info) await wrapped_method(1, 2, meep="moop") @@ -125,10 +124,10 @@ async def test_invoke_wrapped_method_with_metadata_as_none(): @pytest.mark.asyncio async def test_wrap_method_with_default_retry_and_timeout(unused_sleep): fake_call = grpc_helpers_async.FakeUnaryUnaryCall(42) - method = mock.Mock(spec=aio.UnaryUnaryMultiCallable, side_effect=[ - exceptions.InternalServerError(None), - fake_call, - ]) + method = mock.Mock( + spec=aio.UnaryUnaryMultiCallable, + side_effect=[exceptions.InternalServerError(None), fake_call], + ) default_retry = retry_async.AsyncRetry() default_timeout = timeout.ConstantTimeout(60) @@ -147,10 +146,10 @@ async def test_wrap_method_with_default_retry_and_timeout(unused_sleep): @pytest.mark.asyncio async def test_wrap_method_with_default_retry_and_timeout_using_sentinel(unused_sleep): fake_call = grpc_helpers_async.FakeUnaryUnaryCall(42) - method = mock.Mock(spec=aio.UnaryUnaryMultiCallable, side_effect=[ - exceptions.InternalServerError(None), - fake_call, - ]) + method = mock.Mock( + spec=aio.UnaryUnaryMultiCallable, + side_effect=[exceptions.InternalServerError(None), fake_call], + ) default_retry = retry_async.AsyncRetry() default_timeout = timeout.ConstantTimeout(60) @@ -159,8 +158,7 @@ async def test_wrap_method_with_default_retry_and_timeout_using_sentinel(unused_ ) result = await wrapped_method( - retry=gapic_v1.method_async.DEFAULT, - timeout=gapic_v1.method_async.DEFAULT, + retry=gapic_v1.method_async.DEFAULT, timeout=gapic_v1.method_async.DEFAULT, ) assert result == 42 @@ -172,10 +170,10 @@ async def test_wrap_method_with_default_retry_and_timeout_using_sentinel(unused_ @pytest.mark.asyncio async def test_wrap_method_with_overriding_retry_and_timeout(unused_sleep): fake_call = grpc_helpers_async.FakeUnaryUnaryCall(42) - method = mock.Mock(spec=aio.UnaryUnaryMultiCallable, side_effect=[ - exceptions.NotFound(None), - fake_call, - ]) + method = mock.Mock( + spec=aio.UnaryUnaryMultiCallable, + side_effect=[exceptions.NotFound(None), fake_call], + ) default_retry = retry_async.AsyncRetry() default_timeout = timeout.ConstantTimeout(60) @@ -184,7 +182,9 @@ async def test_wrap_method_with_overriding_retry_and_timeout(unused_sleep): ) result = await wrapped_method( - retry=retry_async.AsyncRetry(retry_async.if_exception_type(exceptions.NotFound)), + retry=retry_async.AsyncRetry( + retry_async.if_exception_type(exceptions.NotFound) + ), timeout=timeout.ConstantTimeout(22), ) @@ -204,7 +204,8 @@ async def test_wrap_method_with_overriding_retry_deadline(utcnow, unused_sleep): fake_call = grpc_helpers_async.FakeUnaryUnaryCall(42) method = mock.Mock( spec=aio.UnaryUnaryMultiCallable, - side_effect=([exceptions.InternalServerError(None)] * 4) + [fake_call]) + side_effect=([exceptions.InternalServerError(None)] * 4) + [fake_call], + ) default_retry = retry_async.AsyncRetry() default_timeout = timeout.ExponentialTimeout(deadline=60) diff --git a/tests/asyncio/operations_v1/test_operations_async_client.py b/tests/asyncio/operations_v1/test_operations_async_client.py index a646901..5473e8a 100644 --- a/tests/asyncio/operations_v1/test_operations_async_client.py +++ b/tests/asyncio/operations_v1/test_operations_async_client.py @@ -16,8 +16,7 @@ from grpc.experimental import aio import mock import pytest -from google.api_core import (grpc_helpers_async, operations_v1, - page_iterator_async) +from google.api_core import grpc_helpers_async, operations_v1, page_iterator_async from google.longrunning import operations_pb2 from google.protobuf import empty_pb2 @@ -33,14 +32,17 @@ def _mock_grpc_objects(response): @pytest.mark.asyncio async def test_get_operation(): mocked_channel, method, fake_call = _mock_grpc_objects( - operations_pb2.Operation(name="meep")) + operations_pb2.Operation(name="meep") + ) client = operations_v1.OperationsAsyncClient(mocked_channel) response = await client.get_operation("name", metadata=[("header", "foo")]) assert method.call_count == 1 assert tuple(method.call_args_list[0])[0][0].name == "name" assert ("header", "foo") in tuple(method.call_args_list[0])[1]["metadata"] - assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1]["metadata"] + assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1][ + "metadata" + ] assert response == fake_call.response @@ -66,7 +68,9 @@ async def test_list_operations(): assert method.call_count == 1 assert ("header", "foo") in tuple(method.call_args_list[0])[1]["metadata"] - assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1]["metadata"] + assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1][ + "metadata" + ] request = tuple(method.call_args_list[0])[0][0] assert isinstance(request, operations_pb2.ListOperationsRequest) assert request.name == "name" @@ -75,8 +79,7 @@ async def test_list_operations(): @pytest.mark.asyncio async def test_delete_operation(): - mocked_channel, method, fake_call = _mock_grpc_objects( - empty_pb2.Empty()) + mocked_channel, method, fake_call = _mock_grpc_objects(empty_pb2.Empty()) client = operations_v1.OperationsAsyncClient(mocked_channel) await client.delete_operation("name", metadata=[("header", "foo")]) @@ -84,13 +87,14 @@ async def test_delete_operation(): assert method.call_count == 1 assert tuple(method.call_args_list[0])[0][0].name == "name" assert ("header", "foo") in tuple(method.call_args_list[0])[1]["metadata"] - assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1]["metadata"] + assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1][ + "metadata" + ] @pytest.mark.asyncio async def test_cancel_operation(): - mocked_channel, method, fake_call = _mock_grpc_objects( - empty_pb2.Empty()) + mocked_channel, method, fake_call = _mock_grpc_objects(empty_pb2.Empty()) client = operations_v1.OperationsAsyncClient(mocked_channel) await client.cancel_operation("name", metadata=[("header", "foo")]) @@ -98,4 +102,6 @@ async def test_cancel_operation(): assert method.call_count == 1 assert tuple(method.call_args_list[0])[0][0].name == "name" assert ("header", "foo") in tuple(method.call_args_list[0])[1]["metadata"] - assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1]["metadata"] + assert ("x-goog-request-params", "name=name") in tuple(method.call_args_list[0])[1][ + "metadata" + ] diff --git a/tests/asyncio/test_grpc_helpers_async.py b/tests/asyncio/test_grpc_helpers_async.py index 868018c..a511ed4 100644 --- a/tests/asyncio/test_grpc_helpers_async.py +++ b/tests/asyncio/test_grpc_helpers_async.py @@ -170,8 +170,10 @@ async def test_wrap_stream_errors_aiter(): grpc_error = RpcErrorImpl(grpc.StatusCode.INVALID_ARGUMENT) mock_call = mock.Mock(aio.StreamStreamCall, autospec=True) - mocked_aiter = mock.Mock(spec=['__anext__']) - mocked_aiter.__anext__ = mock.AsyncMock(side_effect=[mock.sentinel.response, grpc_error]) + mocked_aiter = mock.Mock(spec=["__anext__"]) + mocked_aiter.__anext__ = mock.AsyncMock( + side_effect=[mock.sentinel.response, grpc_error] + ) mock_call.__aiter__ = mock.Mock(return_value=mocked_aiter) multicallable = mock.Mock(return_value=mock_call) @@ -186,11 +188,13 @@ async def test_wrap_stream_errors_aiter(): @pytest.mark.asyncio async def test_wrap_stream_errors_aiter_non_rpc_error(): - non_grpc_error = TypeError('Not a gRPC error') + non_grpc_error = TypeError("Not a gRPC error") mock_call = mock.Mock(aio.StreamStreamCall, autospec=True) - mocked_aiter = mock.Mock(spec=['__anext__']) - mocked_aiter.__anext__ = mock.AsyncMock(side_effect=[mock.sentinel.response, non_grpc_error]) + mocked_aiter = mock.Mock(spec=["__anext__"]) + mocked_aiter.__anext__ = mock.AsyncMock( + side_effect=[mock.sentinel.response, non_grpc_error] + ) mock_call.__aiter__ = mock.Mock(return_value=mocked_aiter) multicallable = mock.Mock(return_value=mock_call) @@ -283,7 +287,7 @@ def test_create_channel_implicit(grpc_secure_channel, default, composite_creds_c @mock.patch( "google.auth.transport.requests.Request", autospec=True, - return_value=mock.sentinel.Request + return_value=mock.sentinel.Request, ) @mock.patch("grpc.composite_channel_credentials") @mock.patch( @@ -292,7 +296,9 @@ def test_create_channel_implicit(grpc_secure_channel, default, composite_creds_c return_value=(mock.sentinel.credentials, mock.sentinel.projet), ) @mock.patch("grpc.experimental.aio.secure_channel") -def test_create_channel_implicit_with_default_host(grpc_secure_channel, default, composite_creds_call, request, auth_metadata_plugin): +def test_create_channel_implicit_with_default_host( + grpc_secure_channel, default, composite_creds_call, request, auth_metadata_plugin +): target = "example.com:443" default_host = "example.com" composite_creds = composite_creds_call.return_value @@ -302,7 +308,9 @@ def test_create_channel_implicit_with_default_host(grpc_secure_channel, default, assert channel is grpc_secure_channel.return_value default.assert_called_once_with(scopes=None, default_scopes=None) - auth_metadata_plugin.assert_called_once_with(mock.sentinel.credentials, mock.sentinel.Request, default_host=default_host) + auth_metadata_plugin.assert_called_once_with( + mock.sentinel.credentials, mock.sentinel.Request, default_host=default_host + ) grpc_secure_channel.assert_called_once_with(target, composite_creds) @@ -361,7 +369,9 @@ def test_create_channel_implicit_with_default_scopes( target = "example.com:443" composite_creds = composite_creds_call.return_value - channel = grpc_helpers_async.create_channel(target, default_scopes=["three", "four"]) + channel = grpc_helpers_async.create_channel( + target, default_scopes=["three", "four"] + ) assert channel is grpc_secure_channel.return_value @@ -376,7 +386,7 @@ def test_create_channel_explicit_with_duplicate_credentials(): grpc_helpers_async.create_channel( target, credentials_file="credentials.json", - credentials=mock.sentinel.credentials + credentials=mock.sentinel.credentials, ) assert "mutually exclusive" in str(excinfo.value) @@ -389,9 +399,13 @@ def test_create_channel_explicit(grpc_secure_channel, auth_creds, composite_cred target = "example.com:443" composite_creds = composite_creds_call.return_value - channel = grpc_helpers_async.create_channel(target, credentials=mock.sentinel.credentials) + channel = grpc_helpers_async.create_channel( + target, credentials=mock.sentinel.credentials + ) - auth_creds.assert_called_once_with(mock.sentinel.credentials, scopes=None, default_scopes=None) + auth_creds.assert_called_once_with( + mock.sentinel.credentials, scopes=None, default_scopes=None + ) assert channel is grpc_secure_channel.return_value grpc_secure_channel.assert_called_once_with(target, composite_creds) @@ -417,7 +431,9 @@ def test_create_channel_explicit_scoped(grpc_secure_channel, composite_creds_cal @mock.patch("grpc.composite_channel_credentials") @mock.patch("grpc.experimental.aio.secure_channel") -def test_create_channel_explicit_default_scopes(grpc_secure_channel, composite_creds_call): +def test_create_channel_explicit_default_scopes( + grpc_secure_channel, composite_creds_call +): target = "example.com:443" default_scopes = ["3", "4"] composite_creds = composite_creds_call.return_value @@ -429,18 +445,24 @@ def test_create_channel_explicit_default_scopes(grpc_secure_channel, composite_c target, credentials=credentials, default_scopes=default_scopes ) - credentials.with_scopes.assert_called_once_with(scopes=None, default_scopes=default_scopes) + credentials.with_scopes.assert_called_once_with( + scopes=None, default_scopes=default_scopes + ) assert channel is grpc_secure_channel.return_value grpc_secure_channel.assert_called_once_with(target, composite_creds) @mock.patch("grpc.composite_channel_credentials") @mock.patch("grpc.experimental.aio.secure_channel") -def test_create_channel_explicit_with_quota_project(grpc_secure_channel, composite_creds_call): +def test_create_channel_explicit_with_quota_project( + grpc_secure_channel, composite_creds_call +): target = "example.com:443" composite_creds = composite_creds_call.return_value - credentials = mock.create_autospec(google.auth.credentials.CredentialsWithQuotaProject, instance=True) + credentials = mock.create_autospec( + google.auth.credentials.CredentialsWithQuotaProject, instance=True + ) channel = grpc_helpers_async.create_channel( target, credentials=credentials, quota_project_id="project-foo" @@ -456,9 +478,11 @@ def test_create_channel_explicit_with_quota_project(grpc_secure_channel, composi @mock.patch( "google.auth.load_credentials_from_file", autospec=True, - return_value=(mock.sentinel.credentials, mock.sentinel.project) + return_value=(mock.sentinel.credentials, mock.sentinel.project), ) -def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_secure_channel, composite_creds_call): +def test_create_channnel_with_credentials_file( + load_credentials_from_file, grpc_secure_channel, composite_creds_call +): target = "example.com:443" credentials_file = "/path/to/credentials/file.json" @@ -468,7 +492,9 @@ def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_ target, credentials_file=credentials_file ) - google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=None) + google.auth.load_credentials_from_file.assert_called_once_with( + credentials_file, scopes=None, default_scopes=None + ) assert channel is grpc_secure_channel.return_value grpc_secure_channel.assert_called_once_with(target, composite_creds) @@ -478,9 +504,11 @@ def test_create_channnel_with_credentials_file(load_credentials_from_file, grpc_ @mock.patch( "google.auth.load_credentials_from_file", autospec=True, - return_value=(mock.sentinel.credentials, mock.sentinel.project) + return_value=(mock.sentinel.credentials, mock.sentinel.project), ) -def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call): +def test_create_channel_with_credentials_file_and_scopes( + load_credentials_from_file, grpc_secure_channel, composite_creds_call +): target = "example.com:443" scopes = ["1", "2"] @@ -491,7 +519,9 @@ def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_f target, credentials_file=credentials_file, scopes=scopes ) - google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=scopes, default_scopes=None) + google.auth.load_credentials_from_file.assert_called_once_with( + credentials_file, scopes=scopes, default_scopes=None + ) assert channel is grpc_secure_channel.return_value grpc_secure_channel.assert_called_once_with(target, composite_creds) @@ -501,9 +531,11 @@ def test_create_channel_with_credentials_file_and_scopes(load_credentials_from_f @mock.patch( "google.auth.load_credentials_from_file", autospec=True, - return_value=(mock.sentinel.credentials, mock.sentinel.project) + return_value=(mock.sentinel.credentials, mock.sentinel.project), ) -def test_create_channel_with_credentials_file_and_default_scopes(load_credentials_from_file, grpc_secure_channel, composite_creds_call): +def test_create_channel_with_credentials_file_and_default_scopes( + load_credentials_from_file, grpc_secure_channel, composite_creds_call +): target = "example.com:443" default_scopes = ["3", "4"] @@ -514,12 +546,16 @@ def test_create_channel_with_credentials_file_and_default_scopes(load_credential target, credentials_file=credentials_file, default_scopes=default_scopes ) - google.auth.load_credentials_from_file.assert_called_once_with(credentials_file, scopes=None, default_scopes=default_scopes) + google.auth.load_credentials_from_file.assert_called_once_with( + credentials_file, scopes=None, default_scopes=default_scopes + ) assert channel is grpc_secure_channel.return_value grpc_secure_channel.assert_called_once_with(target, composite_creds) -@pytest.mark.skipif(grpc_helpers_async.HAS_GRPC_GCP, reason="grpc_gcp module not available") +@pytest.mark.skipif( + grpc_helpers_async.HAS_GRPC_GCP, reason="grpc_gcp module not available" +) @mock.patch("grpc.experimental.aio.secure_channel") def test_create_channel_without_grpc_gcp(grpc_secure_channel): target = "example.com:443" diff --git a/tests/asyncio/test_operation_async.py b/tests/asyncio/test_operation_async.py index e35d139..907cda7 100644 --- a/tests/asyncio/test_operation_async.py +++ b/tests/asyncio/test_operation_async.py @@ -177,15 +177,15 @@ def test_from_gapic(): operations_client, struct_pb2.Struct, metadata_type=struct_pb2.Struct, - grpc_metadata=[('x-goog-request-params', 'foo')] + grpc_metadata=[("x-goog-request-params", "foo")], ) assert future._result_type == struct_pb2.Struct assert future._metadata_type == struct_pb2.Struct assert future.operation.name == TEST_OPERATION_NAME assert future.done - assert future._refresh.keywords["metadata"] == [('x-goog-request-params', 'foo')] - assert future._cancel.keywords["metadata"] == [('x-goog-request-params', 'foo')] + assert future._refresh.keywords["metadata"] == [("x-goog-request-params", "foo")] + assert future._cancel.keywords["metadata"] == [("x-goog-request-params", "foo")] def test_deserialize(): diff --git a/tests/asyncio/test_page_iterator_async.py b/tests/asyncio/test_page_iterator_async.py index 4abacc6..75f9e1c 100644 --- a/tests/asyncio/test_page_iterator_async.py +++ b/tests/asyncio/test_page_iterator_async.py @@ -21,13 +21,11 @@ from google.api_core import page_iterator_async class PageAsyncIteratorImpl(page_iterator_async.AsyncIterator): - async def _next_page(self): return mock.create_autospec(page_iterator_async.Page, instance=True) class TestAsyncIterator: - def test_constructor(self): client = mock.sentinel.client item_to_value = mock.sentinel.item_to_value @@ -51,7 +49,9 @@ class TestAsyncIterator: async def test_anext(self): parent = mock.sentinel.parent page_1 = page_iterator_async.Page( - parent, ("item 1.1", "item 1.2"), page_iterator_async._item_to_value_identity + parent, + ("item 1.1", "item 1.2"), + page_iterator_async._item_to_value_identity, ) page_2 = page_iterator_async.Page( parent, ("item 2.1",), page_iterator_async._item_to_value_identity @@ -96,7 +96,8 @@ class TestAsyncIterator: async def test__page_aiter_increment(self): iterator = PageAsyncIteratorImpl(None, None) page = page_iterator_async.Page( - iterator, ("item",), page_iterator_async._item_to_value_identity) + iterator, ("item",), page_iterator_async._item_to_value_identity + ) iterator._next_page = mock.AsyncMock(side_effect=[page, None]) assert iterator.num_results == 0 @@ -128,9 +129,11 @@ class TestAsyncIterator: # Make pages from mock responses parent = mock.sentinel.parent page1 = page_iterator_async.Page( - parent, (item1, item2), page_iterator_async._item_to_value_identity) + parent, (item1, item2), page_iterator_async._item_to_value_identity + ) page2 = page_iterator_async.Page( - parent, (item3,), page_iterator_async._item_to_value_identity) + parent, (item3,), page_iterator_async._item_to_value_identity + ) iterator = PageAsyncIteratorImpl(None, None) iterator._next_page = mock.AsyncMock(side_effect=[page1, page2, None]) @@ -187,7 +190,6 @@ class TestAsyncIterator: class TestAsyncGRPCIterator(object): - def test_constructor(self): client = mock.sentinel.client items_field = "items" diff --git a/tests/asyncio/test_retry_async.py b/tests/asyncio/test_retry_async.py index 8f86366..9e51044 100644 --- a/tests/asyncio/test_retry_async.py +++ b/tests/asyncio/test_retry_async.py @@ -66,7 +66,9 @@ async def test_retry_target_w_on_error(utcnow, sleep): on_error = mock.Mock() - result = await retry_async.retry_target(target, predicate, range(10), None, on_error=on_error) + result = await retry_async.retry_target( + target, predicate, range(10), None, on_error=on_error + ) assert result == 42 assert call_count["target"] == 3 @@ -122,11 +124,12 @@ async def test_retry_target_deadline_exceeded(utcnow, sleep): @pytest.mark.asyncio async def test_retry_target_bad_sleep_generator(): with pytest.raises(ValueError, match="Sleep generator"): - await retry_async.retry_target(mock.sentinel.target, mock.sentinel.predicate, [], None) + await retry_async.retry_target( + mock.sentinel.target, mock.sentinel.predicate, [], None + ) class TestAsyncRetry: - def test_constructor_defaults(self): retry_ = retry_async.AsyncRetry() assert retry_._predicate == retry_async.if_transient_error @@ -276,7 +279,9 @@ class TestAsyncRetry: async def test___call___and_execute_retry(self, sleep, uniform): on_error = mock.Mock(spec=["__call__"], side_effect=[None]) - retry_ = retry_async.AsyncRetry(predicate=retry_async.if_exception_type(ValueError)) + retry_ = retry_async.AsyncRetry( + predicate=retry_async.if_exception_type(ValueError) + ) target = mock.AsyncMock(spec=["__call__"], side_effect=[ValueError(), 42]) # __name__ is needed by functools.partial. @@ -325,6 +330,7 @@ class TestAsyncRetry: # time clock. def increase_time(sleep_delay): patched_utcnow.return_value += datetime.timedelta(seconds=sleep_delay) + sleep.side_effect = increase_time with pytest.raises(exceptions.RetryError): @@ -339,7 +345,7 @@ class TestAsyncRetry: last_wait = sleep.call_args.args[0] total_wait = sum(call_args.args[0] for call_args in sleep.call_args_list) - assert last_wait == 2.9 # and not 8.0, because the last delay was shortened + assert last_wait == 2.9 # and not 8.0, because the last delay was shortened assert total_wait == 9.9 # the same as the deadline @mock.patch("asyncio.sleep", autospec=True) |