Fix off by one in HomeKit iid allocator (#81793)
This commit is contained in:
parent
88a7c76739
commit
2cb58b8189
3 changed files with 10 additions and 6 deletions
|
@ -109,12 +109,12 @@ class AccessoryIIDStorage:
|
|||
# AID must be a string since JSON keys cannot be int
|
||||
aid_str = str(aid)
|
||||
accessory_allocation = self.allocations.setdefault(aid_str, {})
|
||||
accessory_allocated_iids = self.allocated_iids.setdefault(aid_str, [])
|
||||
accessory_allocated_iids = self.allocated_iids.setdefault(aid_str, [1])
|
||||
if service_hap_type == ACCESSORY_INFORMATION_SERVICE and char_uuid is None:
|
||||
allocated_iid = 1
|
||||
elif allocation_key in accessory_allocation:
|
||||
return 1
|
||||
if allocation_key in accessory_allocation:
|
||||
return accessory_allocation[allocation_key]
|
||||
elif accessory_allocated_iids:
|
||||
if accessory_allocated_iids:
|
||||
allocated_iid = accessory_allocated_iids[-1] + 1
|
||||
else:
|
||||
allocated_iid = 2
|
||||
|
|
|
@ -51,7 +51,6 @@ async def test_config_entry_running(hass, hass_client, hk_driver, mock_async_zer
|
|||
"3E__23_": 5,
|
||||
"3E__30_": 6,
|
||||
"3E__52_": 7,
|
||||
"3E___": 1,
|
||||
"A2__37_": 9,
|
||||
"A2___": 8,
|
||||
}
|
||||
|
@ -278,7 +277,6 @@ async def test_config_entry_accessory(
|
|||
"3E__23_": 5,
|
||||
"3E__30_": 6,
|
||||
"3E__52_": 7,
|
||||
"3E___": 1,
|
||||
"43__25_": 11,
|
||||
"43___": 10,
|
||||
"A2__37_": 9,
|
||||
|
|
|
@ -152,23 +152,29 @@ async def test_iid_generation_and_restore_v2(hass, iid_storage, hass_storage):
|
|||
1, "000000AA-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert not_accessory_info_service_iid == 2
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2]}
|
||||
not_accessory_info_service_iid_2 = iid_storage.get_or_allocate_iid(
|
||||
1, "000000BB-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert not_accessory_info_service_iid_2 == 3
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2, 3]}
|
||||
not_accessory_info_service_iid_2 = iid_storage.get_or_allocate_iid(
|
||||
1, "000000BB-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert not_accessory_info_service_iid_2 == 3
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2, 3]}
|
||||
accessory_info_service_iid = iid_storage.get_or_allocate_iid(
|
||||
1, "0000003E-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert accessory_info_service_iid == 1
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2, 3]}
|
||||
accessory_info_service_iid = iid_storage.get_or_allocate_iid(
|
||||
1, "0000003E-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert accessory_info_service_iid == 1
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2, 3]}
|
||||
accessory_info_service_iid = iid_storage.get_or_allocate_iid(
|
||||
2, "0000003E-0000-1000-8000-0026BB765291", None, None, None
|
||||
)
|
||||
assert accessory_info_service_iid == 1
|
||||
assert iid_storage.allocated_iids == {"1": [1, 2, 3], "2": [1]}
|
||||
|
|
Loading…
Add table
Reference in a new issue