1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-27 06:28:31 +00:00

Move local bluetooth scanner code into habluetooth library (#104970)

This commit is contained in:
J. Nick Koston
2023-12-05 07:19:02 -10:00
committed by GitHub
parent 428c184c75
commit b6245c834d
12 changed files with 180 additions and 592 deletions

View File

@@ -14,7 +14,6 @@ from homeassistant.components.bluetooth.const import (
SCANNER_WATCHDOG_INTERVAL,
SCANNER_WATCHDOG_TIMEOUT,
)
from homeassistant.components.bluetooth.scanner import NEED_RESET_ERRORS
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import HomeAssistant
@@ -30,6 +29,14 @@ from . import (
from tests.common import MockConfigEntry, async_fire_time_changed
# If the adapter is in a stuck state the following errors are raised:
NEED_RESET_ERRORS = [
"org.bluez.Error.Failed",
"org.bluez.Error.InProgress",
"org.bluez.Error.NotReady",
"not found",
]
async def test_config_entry_can_be_reloaded_when_stop_raises(
hass: HomeAssistant,
@@ -42,7 +49,7 @@ async def test_config_entry_can_be_reloaded_when_stop_raises(
assert entry.state == ConfigEntryState.LOADED
with patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.stop",
"habluetooth.scanner.OriginalBleakScanner.stop",
side_effect=BleakError,
):
await hass.config_entries.async_reload(entry.entry_id)
@@ -57,10 +64,8 @@ async def test_dbus_socket_missing_in_container(
) -> None:
"""Test we handle dbus being missing in the container."""
with patch(
"homeassistant.components.bluetooth.scanner.is_docker_env", return_value=True
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
with patch("habluetooth.scanner.is_docker_env", return_value=True), patch(
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=FileNotFoundError,
):
await async_setup_with_one_adapter(hass)
@@ -79,10 +84,8 @@ async def test_dbus_socket_missing(
) -> None:
"""Test we handle dbus being missing."""
with patch(
"homeassistant.components.bluetooth.scanner.is_docker_env", return_value=False
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
with patch("habluetooth.scanner.is_docker_env", return_value=False), patch(
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=FileNotFoundError,
):
await async_setup_with_one_adapter(hass)
@@ -101,10 +104,8 @@ async def test_dbus_broken_pipe_in_container(
) -> None:
"""Test we handle dbus broken pipe in the container."""
with patch(
"homeassistant.components.bluetooth.scanner.is_docker_env", return_value=True
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
with patch("habluetooth.scanner.is_docker_env", return_value=True), patch(
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=BrokenPipeError,
):
await async_setup_with_one_adapter(hass)
@@ -124,10 +125,8 @@ async def test_dbus_broken_pipe(
) -> None:
"""Test we handle dbus broken pipe."""
with patch(
"homeassistant.components.bluetooth.scanner.is_docker_env", return_value=False
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
with patch("habluetooth.scanner.is_docker_env", return_value=False), patch(
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=BrokenPipeError,
):
await async_setup_with_one_adapter(hass)
@@ -148,7 +147,7 @@ async def test_invalid_dbus_message(
"""Test we handle invalid dbus message."""
with patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=InvalidMessageError,
):
await async_setup_with_one_adapter(hass)
@@ -168,10 +167,10 @@ async def test_adapter_needs_reset_at_start(
"""Test we cycle the adapter when it needs a restart."""
with patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner.start",
"habluetooth.scanner.OriginalBleakScanner.start",
side_effect=[BleakError(error), None],
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
"habluetooth.util.recover_adapter", return_value=True
) as mock_recover_adapter:
await async_setup_with_one_adapter(hass)
@@ -216,7 +215,7 @@ async def test_recovery_from_dbus_restart(
return mock_discovered
with patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
MockBleakScanner,
):
await async_setup_with_one_adapter(hass)
@@ -306,7 +305,7 @@ async def test_adapter_recovery(hass: HomeAssistant, one_adapter: None) -> None:
"habluetooth.base_scanner.MONOTONIC_TIME",
return_value=start_time_monotonic,
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
return_value=scanner,
):
await async_setup_with_one_adapter(hass)
@@ -343,7 +342,7 @@ async def test_adapter_recovery(hass: HomeAssistant, one_adapter: None) -> None:
+ SCANNER_WATCHDOG_TIMEOUT
+ SCANNER_WATCHDOG_INTERVAL.total_seconds(),
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
"habluetooth.util.recover_adapter", return_value=True
) as mock_recover_adapter:
async_fire_time_changed(hass, dt_util.utcnow() + SCANNER_WATCHDOG_INTERVAL)
await hass.async_block_till_done()
@@ -395,7 +394,7 @@ async def test_adapter_scanner_fails_to_start_first_time(
"habluetooth.base_scanner.MONOTONIC_TIME",
return_value=start_time_monotonic,
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
return_value=scanner,
):
await async_setup_with_one_adapter(hass)
@@ -432,7 +431,7 @@ async def test_adapter_scanner_fails_to_start_first_time(
+ SCANNER_WATCHDOG_TIMEOUT
+ SCANNER_WATCHDOG_INTERVAL.total_seconds(),
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
"habluetooth.util.recover_adapter", return_value=True
) as mock_recover_adapter:
async_fire_time_changed(hass, dt_util.utcnow() + SCANNER_WATCHDOG_INTERVAL)
await hass.async_block_till_done()
@@ -448,7 +447,7 @@ async def test_adapter_scanner_fails_to_start_first_time(
+ SCANNER_WATCHDOG_TIMEOUT
+ SCANNER_WATCHDOG_INTERVAL.total_seconds(),
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
"habluetooth.util.recover_adapter", return_value=True
) as mock_recover_adapter:
async_fire_time_changed(hass, dt_util.utcnow() + SCANNER_WATCHDOG_INTERVAL)
await hass.async_block_till_done()
@@ -503,16 +502,16 @@ async def test_adapter_fails_to_start_and_takes_a_bit_to_init(
start_time_monotonic = time.monotonic()
with patch(
"homeassistant.components.bluetooth.scanner.ADAPTER_INIT_TIME",
"habluetooth.scanner.ADAPTER_INIT_TIME",
0,
), patch(
"habluetooth.base_scanner.MONOTONIC_TIME",
return_value=start_time_monotonic,
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
return_value=scanner,
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
"habluetooth.util.recover_adapter", return_value=True
) as mock_recover_adapter:
await async_setup_with_one_adapter(hass)
@@ -554,17 +553,15 @@ async def test_restart_takes_longer_than_watchdog_time(
start_time_monotonic = time.monotonic()
with patch(
"homeassistant.components.bluetooth.scanner.ADAPTER_INIT_TIME",
"habluetooth.scanner.ADAPTER_INIT_TIME",
0,
), patch(
"habluetooth.base_scanner.MONOTONIC_TIME",
return_value=start_time_monotonic,
), patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
return_value=scanner,
), patch(
"homeassistant.components.bluetooth.util.recover_adapter", return_value=True
):
), patch("habluetooth.util.recover_adapter", return_value=True):
await async_setup_with_one_adapter(hass)
assert called_start == 1
@@ -617,7 +614,7 @@ async def test_setup_and_stop_macos(
"""Register a callback."""
with patch(
"homeassistant.components.bluetooth.scanner.OriginalBleakScanner",
"habluetooth.scanner.OriginalBleakScanner",
MockBleakScanner,
):
assert await async_setup_component(