mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 15:57:06 +00:00
Detect blocking ssl context creation in the event loop (#123240)
This commit is contained in:
parent
fe4e6f24f5
commit
1eaaa00687
@ -8,6 +8,7 @@ import glob
|
|||||||
from http.client import HTTPConnection
|
from http.client import HTTPConnection
|
||||||
import importlib
|
import importlib
|
||||||
import os
|
import os
|
||||||
|
from ssl import SSLContext
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
@ -143,6 +144,24 @@ _BLOCKING_CALLS: tuple[BlockingCall, ...] = (
|
|||||||
strict_core=False,
|
strict_core=False,
|
||||||
skip_for_tests=True,
|
skip_for_tests=True,
|
||||||
),
|
),
|
||||||
|
BlockingCall(
|
||||||
|
original_func=SSLContext.load_default_certs,
|
||||||
|
object=SSLContext,
|
||||||
|
function="load_default_certs",
|
||||||
|
check_allowed=None,
|
||||||
|
strict=False,
|
||||||
|
strict_core=False,
|
||||||
|
skip_for_tests=True,
|
||||||
|
),
|
||||||
|
BlockingCall(
|
||||||
|
original_func=SSLContext.load_verify_locations,
|
||||||
|
object=SSLContext,
|
||||||
|
function="load_verify_locations",
|
||||||
|
check_allowed=None,
|
||||||
|
strict=False,
|
||||||
|
strict_core=False,
|
||||||
|
skip_for_tests=True,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import glob
|
|||||||
import importlib
|
import importlib
|
||||||
import os
|
import os
|
||||||
from pathlib import Path, PurePosixPath
|
from pathlib import Path, PurePosixPath
|
||||||
|
import ssl
|
||||||
import time
|
import time
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
@ -330,6 +331,29 @@ async def test_protect_loop_walk(
|
|||||||
assert "Detected blocking call to walk with args" not in caplog.text
|
assert "Detected blocking call to walk with args" not in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
async def test_protect_loop_load_default_certs(
|
||||||
|
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||||
|
) -> None:
|
||||||
|
"""Test SSLContext.load_default_certs calls in the loop are logged."""
|
||||||
|
with patch.object(block_async_io, "_IN_TESTS", False):
|
||||||
|
block_async_io.enable()
|
||||||
|
context = ssl.create_default_context()
|
||||||
|
assert "Detected blocking call to load_default_certs" in caplog.text
|
||||||
|
assert context
|
||||||
|
|
||||||
|
|
||||||
|
async def test_protect_loop_load_verify_locations(
|
||||||
|
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||||
|
) -> None:
|
||||||
|
"""Test SSLContext.load_verify_locations calls in the loop are logged."""
|
||||||
|
with patch.object(block_async_io, "_IN_TESTS", False):
|
||||||
|
block_async_io.enable()
|
||||||
|
context = ssl.create_default_context()
|
||||||
|
with pytest.raises(OSError):
|
||||||
|
context.load_verify_locations("/dev/null")
|
||||||
|
assert "Detected blocking call to load_verify_locations" in caplog.text
|
||||||
|
|
||||||
|
|
||||||
async def test_open_calls_ignored_in_tests(caplog: pytest.LogCaptureFixture) -> None:
|
async def test_open_calls_ignored_in_tests(caplog: pytest.LogCaptureFixture) -> None:
|
||||||
"""Test opening a file in tests is ignored."""
|
"""Test opening a file in tests is ignored."""
|
||||||
assert block_async_io._IN_TESTS
|
assert block_async_io._IN_TESTS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user