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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user