Correct logic for picking bluetooth local name (#102823)
* Correct logic for picking bluetooth local name * make test more robust --------- Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
69a0c0d435
commit
64f0ea60d1
2 changed files with 29 additions and 4 deletions
|
@ -330,7 +330,7 @@ class BaseHaRemoteScanner(BaseHaScanner):
|
||||||
prev_manufacturer_data = prev_advertisement.manufacturer_data
|
prev_manufacturer_data = prev_advertisement.manufacturer_data
|
||||||
prev_name = prev_device.name
|
prev_name = prev_device.name
|
||||||
|
|
||||||
if local_name and prev_name and len(prev_name) > len(local_name):
|
if prev_name and (not local_name or len(prev_name) > len(local_name)):
|
||||||
local_name = prev_name
|
local_name = prev_name
|
||||||
|
|
||||||
if service_uuids and service_uuids != prev_service_uuids:
|
if service_uuids and service_uuids != prev_service_uuids:
|
||||||
|
|
|
@ -42,7 +42,10 @@ from . import (
|
||||||
from tests.common import async_fire_time_changed, load_fixture
|
from tests.common import async_fire_time_changed, load_fixture
|
||||||
|
|
||||||
|
|
||||||
async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> None:
|
@pytest.mark.parametrize("name_2", [None, "w"])
|
||||||
|
async def test_remote_scanner(
|
||||||
|
hass: HomeAssistant, enable_bluetooth: None, name_2: str | None
|
||||||
|
) -> None:
|
||||||
"""Test the remote scanner base class merges advertisement_data."""
|
"""Test the remote scanner base class merges advertisement_data."""
|
||||||
manager = _get_manager()
|
manager = _get_manager()
|
||||||
|
|
||||||
|
@ -61,12 +64,25 @@ async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> No
|
||||||
)
|
)
|
||||||
switchbot_device_2 = generate_ble_device(
|
switchbot_device_2 = generate_ble_device(
|
||||||
"44:44:33:11:23:45",
|
"44:44:33:11:23:45",
|
||||||
"w",
|
name_2,
|
||||||
{},
|
{},
|
||||||
rssi=-100,
|
rssi=-100,
|
||||||
)
|
)
|
||||||
switchbot_device_adv_2 = generate_advertisement_data(
|
switchbot_device_adv_2 = generate_advertisement_data(
|
||||||
local_name="wohand",
|
local_name=name_2,
|
||||||
|
service_uuids=["00000001-0000-1000-8000-00805f9b34fb"],
|
||||||
|
service_data={"00000001-0000-1000-8000-00805f9b34fb": b"\n\xff"},
|
||||||
|
manufacturer_data={1: b"\x01", 2: b"\x02"},
|
||||||
|
rssi=-100,
|
||||||
|
)
|
||||||
|
switchbot_device_3 = generate_ble_device(
|
||||||
|
"44:44:33:11:23:45",
|
||||||
|
"wohandlonger",
|
||||||
|
{},
|
||||||
|
rssi=-100,
|
||||||
|
)
|
||||||
|
switchbot_device_adv_3 = generate_advertisement_data(
|
||||||
|
local_name="wohandlonger",
|
||||||
service_uuids=["00000001-0000-1000-8000-00805f9b34fb"],
|
service_uuids=["00000001-0000-1000-8000-00805f9b34fb"],
|
||||||
service_data={"00000001-0000-1000-8000-00805f9b34fb": b"\n\xff"},
|
service_data={"00000001-0000-1000-8000-00805f9b34fb": b"\n\xff"},
|
||||||
manufacturer_data={1: b"\x01", 2: b"\x02"},
|
manufacturer_data={1: b"\x01", 2: b"\x02"},
|
||||||
|
@ -125,6 +141,15 @@ async def test_remote_scanner(hass: HomeAssistant, enable_bluetooth: None) -> No
|
||||||
"00000001-0000-1000-8000-00805f9b34fb",
|
"00000001-0000-1000-8000-00805f9b34fb",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The longer name should be used
|
||||||
|
scanner.inject_advertisement(switchbot_device_3, switchbot_device_adv_3)
|
||||||
|
assert discovered_device.name == switchbot_device_3.name
|
||||||
|
|
||||||
|
# Inject the shorter name / None again to make
|
||||||
|
# sure we always keep the longer name
|
||||||
|
scanner.inject_advertisement(switchbot_device_2, switchbot_device_adv_2)
|
||||||
|
assert discovered_device.name == switchbot_device_3.name
|
||||||
|
|
||||||
cancel()
|
cancel()
|
||||||
unsetup()
|
unsetup()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue