Set thread dataset's preferred router on add if not set (#98639)

This commit is contained in:
Erik Montnemery 2023-08-21 22:46:15 +02:00 committed by GitHub
parent 07fb47b849
commit 4a03f6482a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 3 deletions

View File

@ -202,8 +202,17 @@ class DatasetStore:
raise HomeAssistantError("Invalid dataset")
# Bail out if the dataset already exists
if any(entry for entry in self.datasets.values() if entry.dataset == dataset):
return
entry: DatasetEntry | None
for entry in self.datasets.values():
if entry.dataset == dataset:
if (
preferred_border_agent_id
and entry.preferred_border_agent_id is None
):
self.async_set_preferred_border_agent_id(
entry.id, preferred_border_agent_id
)
return
# Update if dataset with same extended pan id exists and the timestamp
# is newer
@ -248,6 +257,10 @@ class DatasetStore:
self.datasets[entry.id], tlv=tlv
)
self.async_schedule_save()
if preferred_border_agent_id and entry.preferred_border_agent_id is None:
self.async_set_preferred_border_agent_id(
entry.id, preferred_border_agent_id
)
return
entry = DatasetEntry(

View File

@ -546,9 +546,32 @@ async def test_set_preferred_border_agent_id(hass: HomeAssistant) -> None:
assert await dataset_store.async_get_preferred_dataset(hass) is None
await dataset_store.async_add_dataset(
hass, "source", DATASET_1, preferred_border_agent_id="blah"
hass, "source", DATASET_3, preferred_border_agent_id="blah"
)
store = await dataset_store.async_get_store(hass)
assert len(store.datasets) == 1
assert list(store.datasets.values())[0].preferred_border_agent_id == "blah"
await dataset_store.async_add_dataset(
hass, "source", DATASET_3, preferred_border_agent_id="bleh"
)
assert list(store.datasets.values())[0].preferred_border_agent_id == "blah"
await dataset_store.async_add_dataset(hass, "source", DATASET_2)
assert len(store.datasets) == 2
assert list(store.datasets.values())[1].preferred_border_agent_id is None
await dataset_store.async_add_dataset(
hass, "source", DATASET_2, preferred_border_agent_id="blah"
)
assert list(store.datasets.values())[1].preferred_border_agent_id == "blah"
await dataset_store.async_add_dataset(hass, "source", DATASET_1)
assert len(store.datasets) == 3
assert list(store.datasets.values())[2].preferred_border_agent_id is None
await dataset_store.async_add_dataset(
hass, "source", DATASET_1_LARGER_TIMESTAMP, preferred_border_agent_id="blah"
)
assert list(store.datasets.values())[1].preferred_border_agent_id == "blah"