Initial commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
import asyncio
|
||||
from types import SimpleNamespace
|
||||
|
||||
from opc.engine import OPCEngine
|
||||
|
||||
|
||||
class _StubStore:
|
||||
def __init__(self, name: str) -> None:
|
||||
self.name = name
|
||||
self.close_calls = 0
|
||||
|
||||
async def save_task(self, task: object) -> None:
|
||||
return None
|
||||
|
||||
async def save_runtime_session(self, session: object) -> None:
|
||||
return None
|
||||
|
||||
async def close(self) -> None:
|
||||
self.close_calls += 1
|
||||
|
||||
|
||||
class EngineStoreBindingTests(unittest.TestCase):
|
||||
def test_bind_store_rebinds_cached_store_references(self) -> None:
|
||||
engine = OPCEngine()
|
||||
old_store = _StubStore("old")
|
||||
new_store = _StubStore("new")
|
||||
|
||||
engine.store = old_store
|
||||
engine.memory = SimpleNamespace(store=old_store)
|
||||
engine.org_engine = SimpleNamespace(store=old_store)
|
||||
engine.task_scheduler = SimpleNamespace(store=old_store)
|
||||
engine.communication = SimpleNamespace(store=old_store)
|
||||
engine.context_assembler = SimpleNamespace(store=old_store)
|
||||
engine.approval_engine = SimpleNamespace(store=old_store)
|
||||
engine.external_broker = SimpleNamespace(store=old_store)
|
||||
engine.secretary = SimpleNamespace(store=old_store)
|
||||
engine.reorg_manager = SimpleNamespace(store=old_store)
|
||||
engine.cost_tracker = SimpleNamespace(store=old_store)
|
||||
engine.context_loader = SimpleNamespace(store=old_store)
|
||||
engine.heartbeat_scheduler = SimpleNamespace(store=old_store)
|
||||
engine.company_executor = SimpleNamespace(save_task=old_store.save_task)
|
||||
|
||||
engine.bind_store(new_store)
|
||||
|
||||
self.assertIs(engine.store, new_store)
|
||||
self.assertIs(engine.memory.store, new_store)
|
||||
self.assertIs(engine.org_engine.store, new_store)
|
||||
self.assertIs(engine.task_scheduler.store, new_store)
|
||||
self.assertIs(engine.communication.store, new_store)
|
||||
self.assertIs(engine.context_assembler.store, new_store)
|
||||
self.assertIs(engine.approval_engine.store, new_store)
|
||||
self.assertIs(engine.external_broker.store, new_store)
|
||||
self.assertIs(engine.secretary.store, new_store)
|
||||
self.assertIs(engine.reorg_manager.store, new_store)
|
||||
self.assertIs(engine.cost_tracker.store, new_store)
|
||||
self.assertIs(engine.context_loader.store, new_store)
|
||||
self.assertIs(engine.heartbeat_scheduler.store, new_store)
|
||||
self.assertIs(engine.company_executor.save_task.__self__, new_store)
|
||||
|
||||
def test_shutdown_does_not_close_unowned_shared_store(self) -> None:
|
||||
shared_store = _StubStore("shared")
|
||||
engine = OPCEngine(store=shared_store, owns_store=False)
|
||||
engine.comms_reactivation_sweeper = None
|
||||
engine.heartbeat_scheduler = None
|
||||
engine.channel_manager = None
|
||||
engine.mcp_manager = None
|
||||
engine.llm = None
|
||||
|
||||
asyncio.run(engine.shutdown())
|
||||
|
||||
self.assertEqual(shared_store.close_calls, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user