fix mocking
This commit is contained in:
parent
4871bcb651
commit
3da6e9dcee
|
@ -134,7 +134,9 @@ async def plaintext_connect_task_no_login(
|
|||
transport = MagicMock()
|
||||
connected = asyncio.Event()
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -151,7 +153,9 @@ async def plaintext_connect_task_no_login_with_expected_name(
|
|||
transport = MagicMock()
|
||||
connected = asyncio.Event()
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
event_loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -170,7 +174,9 @@ async def plaintext_connect_task_with_login(
|
|||
transport = MagicMock()
|
||||
connected = asyncio.Event()
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
event_loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -193,11 +199,15 @@ async def api_client(
|
|||
password=None,
|
||||
)
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
event_loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
), patch("aioesphomeapi.client.APIConnection", PatchableAPIConnection):
|
||||
), patch(
|
||||
"aioesphomeapi.client.APIConnection", PatchableAPIConnection
|
||||
):
|
||||
connect_task = asyncio.create_task(connect_client(client, login=False))
|
||||
await connected.wait()
|
||||
conn = client._connection
|
||||
|
|
|
@ -198,10 +198,10 @@ async def test_finish_connection_wraps_exceptions_as_unhandled_api_error() -> No
|
|||
"""Verify finish_connect re-wraps exceptions as UnhandledAPIError."""
|
||||
|
||||
cli = APIClient("1.2.3.4", 1234, None)
|
||||
loop = asyncio.get_event_loop()
|
||||
with patch(
|
||||
"aioesphomeapi.client.APIConnection", PatchableAPIConnection
|
||||
), patch.object(loop, "sock_connect"):
|
||||
asyncio.get_event_loop()
|
||||
with patch("aioesphomeapi.client.APIConnection", PatchableAPIConnection), patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
):
|
||||
await cli.start_connection()
|
||||
|
||||
with patch.object(
|
||||
|
@ -217,9 +217,12 @@ async def test_finish_connection_wraps_exceptions_as_unhandled_api_error() -> No
|
|||
async def test_connection_released_if_connecting_is_cancelled() -> None:
|
||||
"""Verify connection is unset if connecting is cancelled."""
|
||||
cli = APIClient("1.2.3.4", 1234, None)
|
||||
loop = asyncio.get_event_loop()
|
||||
asyncio.get_event_loop()
|
||||
|
||||
with patch.object(loop, "sock_connect", side_effect=partial(asyncio.sleep, 1)):
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection",
|
||||
side_effect=partial(asyncio.sleep, 1),
|
||||
):
|
||||
start_task = asyncio.create_task(cli.start_connection())
|
||||
await asyncio.sleep(0)
|
||||
assert cli._connection is not None
|
||||
|
@ -229,9 +232,9 @@ async def test_connection_released_if_connecting_is_cancelled() -> None:
|
|||
await start_task
|
||||
assert cli._connection is None
|
||||
|
||||
with patch(
|
||||
"aioesphomeapi.client.APIConnection", PatchableAPIConnection
|
||||
), patch.object(loop, "sock_connect"):
|
||||
with patch("aioesphomeapi.client.APIConnection", PatchableAPIConnection), patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
):
|
||||
await cli.start_connection()
|
||||
await asyncio.sleep(0)
|
||||
|
||||
|
@ -252,8 +255,9 @@ async def test_request_while_handshaking(event_loop) -> None:
|
|||
pass
|
||||
|
||||
cli = PatchableApiClient("host", 1234, None)
|
||||
with patch.object(
|
||||
event_loop, "sock_connect", side_effect=partial(asyncio.sleep, 1)
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection",
|
||||
side_effect=partial(asyncio.sleep, 1),
|
||||
), patch.object(cli, "finish_connection"):
|
||||
connect_task = asyncio.create_task(cli.connect())
|
||||
|
||||
|
|
|
@ -241,14 +241,15 @@ async def test_start_connection_times_out(
|
|||
conn: APIConnection, resolve_host, socket_socket
|
||||
):
|
||||
"""Test handling of start connection timing out."""
|
||||
loop = asyncio.get_event_loop()
|
||||
asyncio.get_event_loop()
|
||||
|
||||
async def _mock_socket_connect(*args, **kwargs):
|
||||
await asyncio.sleep(500)
|
||||
|
||||
with patch.object(loop, "sock_connect", side_effect=_mock_socket_connect), patch(
|
||||
"aioesphomeapi.connection.TCP_CONNECT_TIMEOUT", 0.0
|
||||
):
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection",
|
||||
side_effect=_mock_socket_connect,
|
||||
), patch("aioesphomeapi.connection.TCP_CONNECT_TIMEOUT", 0.0):
|
||||
connect_task = asyncio.create_task(connect(conn, login=False))
|
||||
await asyncio.sleep(0)
|
||||
|
||||
|
@ -267,9 +268,12 @@ async def test_start_connection_os_error(
|
|||
conn: APIConnection, resolve_host, socket_socket
|
||||
):
|
||||
"""Test handling of start connection has an OSError."""
|
||||
loop = asyncio.get_event_loop()
|
||||
asyncio.get_event_loop()
|
||||
|
||||
with patch.object(loop, "sock_connect", side_effect=OSError("Socket error")):
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection",
|
||||
side_effect=OSError("Socket error"),
|
||||
):
|
||||
connect_task = asyncio.create_task(connect(conn, login=False))
|
||||
await asyncio.sleep(0)
|
||||
with pytest.raises(APIConnectionError, match="Socket error"):
|
||||
|
@ -284,9 +288,12 @@ async def test_start_connection_is_cancelled(
|
|||
conn: APIConnection, resolve_host, socket_socket
|
||||
):
|
||||
"""Test handling of start connection is cancelled."""
|
||||
loop = asyncio.get_event_loop()
|
||||
asyncio.get_event_loop()
|
||||
|
||||
with patch.object(loop, "sock_connect", side_effect=asyncio.CancelledError):
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection",
|
||||
side_effect=asyncio.CancelledError,
|
||||
):
|
||||
connect_task = asyncio.create_task(connect(conn, login=False))
|
||||
await asyncio.sleep(0)
|
||||
with pytest.raises(APIConnectionError, match="Starting connection cancelled"):
|
||||
|
@ -559,7 +566,9 @@ async def test_connect_resolver_times_out(
|
|||
with patch(
|
||||
"aioesphomeapi.host_resolver.async_resolve_host",
|
||||
side_effect=asyncio.TimeoutError,
|
||||
), patch.object(event_loop, "sock_connect"), patch.object(
|
||||
), patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
event_loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -590,7 +599,9 @@ async def test_disconnect_fails_to_send_response(
|
|||
nonlocal expected_disconnect
|
||||
expected_disconnect = _expected_disconnect
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -640,7 +651,9 @@ async def test_disconnect_success_case(
|
|||
nonlocal expected_disconnect
|
||||
expected_disconnect = _expected_disconnect
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
|
|
@ -69,9 +69,13 @@ async def test_log_runner(event_loop: asyncio.AbstractEventLoop, conn: APIConnec
|
|||
await original_subscribe_logs(*args, **kwargs)
|
||||
subscribed.set()
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop, "create_connection", side_effect=_create_mock_transport_protocol
|
||||
), patch.object(cli, "subscribe_logs", _wait_subscribe_cli):
|
||||
), patch.object(
|
||||
cli, "subscribe_logs", _wait_subscribe_cli
|
||||
):
|
||||
stop = await async_run(cli, on_log, aio_zeroconf_instance=async_zeroconf)
|
||||
await connected.wait()
|
||||
protocol = cli._connection._frame_helper
|
||||
|
@ -135,9 +139,13 @@ async def test_log_runner_reconnects_on_disconnect(
|
|||
await original_subscribe_logs(*args, **kwargs)
|
||||
subscribed.set()
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop, "create_connection", side_effect=_create_mock_transport_protocol
|
||||
), patch.object(cli, "subscribe_logs", _wait_subscribe_cli):
|
||||
), patch.object(
|
||||
cli, "subscribe_logs", _wait_subscribe_cli
|
||||
):
|
||||
stop = await async_run(cli, on_log, aio_zeroconf_instance=async_zeroconf)
|
||||
await connected.wait()
|
||||
protocol = cli._connection._frame_helper
|
||||
|
@ -214,7 +222,9 @@ async def test_log_runner_reconnects_on_subscribe_failure(
|
|||
with patch.object(
|
||||
cli, "disconnect", partial(cli.disconnect, force=True)
|
||||
), patch.object(cli, "subscribe_logs", _wait_and_fail_subscribe_cli):
|
||||
with patch.object(loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop, "create_connection", side_effect=_create_mock_transport_protocol
|
||||
):
|
||||
stop = await async_run(cli, on_log, aio_zeroconf_instance=async_zeroconf)
|
||||
|
@ -227,9 +237,13 @@ async def test_log_runner_reconnects_on_subscribe_failure(
|
|||
|
||||
assert cli._connection is None
|
||||
|
||||
with patch.object(loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop, "create_connection", side_effect=_create_mock_transport_protocol
|
||||
), patch.object(cli, "subscribe_logs"):
|
||||
), patch.object(
|
||||
cli, "subscribe_logs"
|
||||
):
|
||||
connected.clear()
|
||||
await asyncio.sleep(0)
|
||||
async_fire_time_changed(
|
||||
|
|
|
@ -710,7 +710,9 @@ async def test_handling_unexpected_disconnect(event_loop: asyncio.AbstractEventL
|
|||
name="fake",
|
||||
)
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -726,7 +728,9 @@ async def test_handling_unexpected_disconnect(event_loop: asyncio.AbstractEventL
|
|||
assert cli._connection.is_connected is True
|
||||
await asyncio.sleep(0)
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
@ -785,7 +789,9 @@ async def test_backoff_on_encryption_error(
|
|||
name="fake",
|
||||
)
|
||||
|
||||
with patch.object(event_loop, "sock_connect"), patch.object(
|
||||
with patch(
|
||||
"aioesphomeapi.connection.aiohappyeyeballs.start_connection"
|
||||
), patch.object(
|
||||
loop,
|
||||
"create_connection",
|
||||
side_effect=partial(_create_mock_transport_protocol, transport, connected),
|
||||
|
|
Loading…
Reference in New Issue