chore: 迁移服务器前同步本地修改
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
"""进程内 actor 运行时(``kilostar.utils.actor``)单元测试。
|
||||
|
||||
覆盖:注册/寻址/注销;句柄对同步与异步方法都返回 awaitable;便捷 getter;
|
||||
未注册抛 KeyError。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from kilostar.utils import actor as actor_mod
|
||||
from kilostar.utils.actor import (
|
||||
clear_actors,
|
||||
get_actor,
|
||||
get_gsm,
|
||||
get_gwm,
|
||||
get_postgres,
|
||||
register_actor,
|
||||
unregister_actor,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _clean_registry():
|
||||
clear_actors()
|
||||
yield
|
||||
clear_actors()
|
||||
|
||||
|
||||
class _Sample:
|
||||
def __init__(self) -> None:
|
||||
self.value = 7
|
||||
|
||||
def sync_method(self, x):
|
||||
return x + 1
|
||||
|
||||
async def async_method(self, x):
|
||||
return x * 2
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_sync_method_is_awaitable_through_handle():
|
||||
register_actor("sample", _Sample())
|
||||
handle = get_actor("sample")
|
||||
assert await handle.sync_method(41) == 42
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_async_method_forwards_through_handle():
|
||||
register_actor("sample", _Sample())
|
||||
handle = get_actor("sample")
|
||||
assert await handle.async_method(21) == 42
|
||||
|
||||
|
||||
def test_non_callable_attribute_passthrough():
|
||||
register_actor("sample", _Sample())
|
||||
assert get_actor("sample").value == 7
|
||||
|
||||
|
||||
def test_get_unregistered_raises_keyerror():
|
||||
with pytest.raises(KeyError):
|
||||
get_actor("does_not_exist")
|
||||
|
||||
|
||||
def test_unregister_then_missing():
|
||||
register_actor("sample", _Sample())
|
||||
assert get_actor("sample") is not None
|
||||
unregister_actor("sample")
|
||||
with pytest.raises(KeyError):
|
||||
get_actor("sample")
|
||||
# 幂等:再次注销不报错
|
||||
unregister_actor("sample")
|
||||
|
||||
|
||||
def test_convenience_getters_resolve_named_actors():
|
||||
register_actor("postgres_database", _Sample())
|
||||
register_actor("global_state_machine", _Sample())
|
||||
register_actor("global_workflow_manager", _Sample())
|
||||
assert get_postgres() is get_actor("postgres_database")
|
||||
assert get_gsm() is get_actor("global_state_machine")
|
||||
assert get_gwm() is get_actor("global_workflow_manager")
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_reregister_overwrites_underlying_instance():
|
||||
first = _Sample()
|
||||
first.value = 100
|
||||
register_actor("sample", first)
|
||||
assert get_actor("sample").value == 100
|
||||
|
||||
second = _Sample()
|
||||
second.value = 200
|
||||
register_actor("sample", second)
|
||||
assert get_actor("sample").value == 200
|
||||
Reference in New Issue
Block a user