79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
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()
|