refactor: improve startup and sync performance

This commit is contained in:
3252a8
2026-05-20 23:04:29 +03:00
parent 8192eaf55b
commit a7f298743d
12 changed files with 973 additions and 97 deletions
+60
View File
@@ -1,3 +1,4 @@
import asyncio
import unittest
from types import SimpleNamespace
from unittest.mock import AsyncMock, patch
@@ -46,6 +47,65 @@ class PanelApiServiceLoggingTests(unittest.IsolatedAsyncioTestCase):
self.assertTrue(service._request.await_args.kwargs["log_full_response"])
async def test_get_user_by_uuid_uses_short_ttl_cache_and_update_invalidates(self):
service = self._make_service()
service._request = AsyncMock(return_value={"response": {"uuid": "user-uuid"}})
first = await service.get_user_by_uuid("user-uuid")
second = await service.get_user_by_uuid("user-uuid")
self.assertEqual(first, {"uuid": "user-uuid"})
self.assertEqual(second, {"uuid": "user-uuid"})
self.assertEqual(service._request.await_count, 1)
await service.update_user_details_on_panel("user-uuid", {"description": "updated"})
await service.get_user_by_uuid("user-uuid")
self.assertEqual(service._request.await_count, 3)
async def test_get_user_devices_uses_short_ttl_cache_and_disconnect_invalidates(self):
service = self._make_service()
service._request = AsyncMock(return_value={"response": [{"hwid": "device-1"}]})
first = await service.get_user_devices("user-uuid")
second = await service.get_user_devices("user-uuid")
self.assertEqual(first, [{"hwid": "device-1"}])
self.assertEqual(second, [{"hwid": "device-1"}])
self.assertEqual(service._request.await_count, 1)
await service.disconnect_device("user-uuid", "device-1")
await service.get_user_devices("user-uuid")
self.assertEqual(service._request.await_count, 3)
async def test_get_all_panel_users_uses_singleflight_cache_and_update_invalidates(self):
service = self._make_service()
get_calls = 0
async def fake_request(method, endpoint, **kwargs):
nonlocal get_calls
if method == "GET":
get_calls += 1
return {"response": {"users": [{"uuid": "user-uuid"}]}}
return {"response": {"uuid": "user-uuid"}}
service._request = AsyncMock(side_effect=fake_request)
first, second = await asyncio.gather(
service.get_all_panel_users(),
service.get_all_panel_users(),
)
self.assertEqual(first, [{"uuid": "user-uuid"}])
self.assertEqual(second, [{"uuid": "user-uuid"}])
self.assertEqual(get_calls, 1)
await service.update_user_details_on_panel("user-uuid", {"description": "updated"})
await service.get_all_panel_users()
self.assertEqual(get_calls, 2)
if __name__ == "__main__":
unittest.main()