34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
"""打包队列日志时序测试"""
|
|
import asyncio
|
|
|
|
import pytest
|
|
|
|
from backend.services.build_queue import BuildQueue
|
|
from backend.services.log_streamer import log_streamer
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_submit_creates_log_queue_before_worker_runs():
|
|
"""前端订阅任务时,应能拿到入队日志和后续执行日志。"""
|
|
task_id = "queue-log-test"
|
|
log_streamer.cleanup(task_id)
|
|
log_streamer._log_lines.pop(task_id, None)
|
|
|
|
queue = BuildQueue(max_concurrent=1)
|
|
|
|
async def build(task_id: str):
|
|
await log_streamer.emit(task_id, "构建函数已执行")
|
|
|
|
try:
|
|
await queue.submit(task_id, build)
|
|
await asyncio.wait_for(queue._queue.join(), timeout=3)
|
|
|
|
messages = [entry["message"] for entry in log_streamer._log_lines[task_id]]
|
|
assert messages == ["任务已加入队列,等待执行...", "构建函数已执行"]
|
|
finally:
|
|
for worker in queue._workers:
|
|
worker.cancel()
|
|
await asyncio.gather(*queue._workers, return_exceptions=True)
|
|
log_streamer.cleanup(task_id)
|
|
log_streamer._log_lines.pop(task_id, None)
|