"""v2 P5+ 安全网:OLC 自动初始化兜底测试
验证:未显式调用 OLC.get_instance() 的情况下,
直接调用 process / async_process 会自动触发初始化。
"""
import asyncio
import unittest
from unittest.mock import MagicMock, patch
from olc.olc import OLC
def _arun(coro):
return asyncio.new_event_loop().run_until_complete(coro)
class TestAutoInitialization(unittest.TestCase):
def setUp(self):
self._saved_instance = OLC._instance
OLC._instance = None
def tearDown(self):
OLC._instance = self._saved_instance
def test_process_auto_initializes_when_not_initialized(self):
"""直接调 process(),应该自动触发 init"""
with patch.object(OLC, "get_instance", wraps=OLC.get_instance) as spy:
request = MagicMock()
request.tags = {}
request.token_number = 1
OLC.process(request)
self.assertGreaterEqual(spy.call_count, 1)
self.assertIsNotNone(OLC._instance, "OLC._instance 应该被自动初始化填充")
def test_async_process_auto_initializes(self):
"""直接 await async_process(),应该自动触发 init(且不阻塞事件循环)"""
async def go():
request = MagicMock()
request.tags = {}
request.token_number = 1
await OLC.async_process(request)
_arun(go())
self.assertIsNotNone(OLC._instance)
if __name__ == "__main__":
unittest.main(verbosity=2)