fix: 修复设置系统脱节、队列计数漂移、资源泄露等全量问题
- 统一设置系统:create_scheduler_service 读取 DB 设置覆盖默认值 - 修复 ProxyRepository.update_score 误删所有无效代理的 SQL - ValidationQueue:修复 Worker 计数漂移与启动恢复任务饿死 - SchedulerService:移除 drain() 阻塞,主循环可正常响应 stop - TaskService:在调度器周期内自动清理过期任务,防止内存泄漏 - lifespan/conftest:规范关闭顺序,消除 Event loop closed 警告 - Repository:异常日志增加 exc_info,今日新增按 created_at 统计 - ValidatorService:防止 HTTP session 重复关闭,移除 SOCKS 多余 close - 前端:补全 pluginsStore.isEmpty,ProxyList 最低分数上限改为 100 - 删除 config.py 中冗余的 cors_origins_list property
This commit is contained in:
@@ -117,19 +117,33 @@ class TestPluginsAPI:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_crawl_plugin(self, client):
|
||||
"""测试 POST /api/plugins/{id}/crawl"""
|
||||
"""测试 POST /api/plugins/{id}/crawl - 异步任务模式"""
|
||||
import asyncio
|
||||
response = await client.get("/api/plugins")
|
||||
plugins = response.json()["data"]["plugins"]
|
||||
if not plugins:
|
||||
pytest.skip("没有可用的插件")
|
||||
|
||||
plugin_id = plugins[0]["id"]
|
||||
# 这个测试可能需要较长时间,设置较短的超时
|
||||
response = await client.post(f"/api/plugins/{plugin_id}/crawl")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["code"] == 200
|
||||
assert "proxy_count" in data["data"]
|
||||
assert "task_id" in data["data"]
|
||||
|
||||
task_id = data["data"]["task_id"]
|
||||
# 轮询任务状态
|
||||
task_data = None
|
||||
for _ in range(10):
|
||||
await asyncio.sleep(0.3)
|
||||
res = await client.get(f"/api/tasks/{task_id}")
|
||||
assert res.status_code == 200
|
||||
task_data = res.json()["data"]
|
||||
if task_data["status"] in ("completed", "failed"):
|
||||
break
|
||||
|
||||
assert task_data is not None
|
||||
assert task_data["status"] == "completed"
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_crawl_nonexistent_plugin(self, client):
|
||||
@@ -139,9 +153,24 @@ class TestPluginsAPI:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_crawl_all_plugins(self, client):
|
||||
"""测试 POST /api/plugins/crawl-all"""
|
||||
"""测试 POST /api/plugins/crawl-all - 异步任务模式"""
|
||||
import asyncio
|
||||
response = await client.post("/api/plugins/crawl-all")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["code"] == 200
|
||||
assert "total_crawled" in data["data"]
|
||||
assert "task_id" in data["data"]
|
||||
|
||||
task_id = data["data"]["task_id"]
|
||||
# 轮询任务状态
|
||||
task_data = None
|
||||
for _ in range(10):
|
||||
await asyncio.sleep(0.3)
|
||||
res = await client.get(f"/api/tasks/{task_id}")
|
||||
assert res.status_code == 200
|
||||
task_data = res.json()["data"]
|
||||
if task_data["status"] in ("completed", "failed"):
|
||||
break
|
||||
|
||||
assert task_data is not None
|
||||
assert task_data["status"] == "completed"
|
||||
|
||||
Reference in New Issue
Block a user