架构重构(候选 1-6): - storage/repository.py 按域拆分为包(target/scenario/run/campaign/result) - storage/db.py 按域拆分为包(eval/campaign/file/model_config/intelligent_eval) - intelligent_eval/lifecycle.py 按状态机阶段拆分为包 - services/runs.py 编排逻辑下沉 - Campaigns.tsx 拆分为 campaigns/ 子组件 测试补全(候选 7): 前端(+125 用例,107→232): - utils/ 纯函数:date/campaignTime/ruleLabels/fileTree/fileFormat/colors - stores/tabStore 状态管理 - 核心组件:FormDrawer/PageWrapper/ChatBubble/GeneratedMessages/SectionHeader/StatCard/TurnList - 业务组件:CaseBlock/CaseDetail/RuleOverview/WindowTimeline/RunList/TabBar/CampaignRunTimeline - 文件管理:FileCategoryTree/FileTable - hooks:sessionReducer/useFiles/useRunSession 后端(+38 用例,916→954): - targets API CRUD + 404 路径 - WebSocket 连接管理器 - proxy 头部重写(CSP/X-Frame-Options) - target 仓储 update 方法 - app 健康检查 + SPA 404 - scenarios 模板端点 + 404 - files API 边缘分支(404 场景 + 500 兜底) - files service update_category - 智能评估状态机迁移测试 门禁状态: - 前端:tsc 干净 + 232 passed - 后端:954 passed + ruff 全绿
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""Unit tests for the OpenClaw proxy header rewriting."""
|
|
|
|
import httpx
|
|
import pytest
|
|
from agenteval.web.routers.proxy import _rewrite_headers
|
|
|
|
|
|
def test_rewrite_headers_strips_x_frame_options():
|
|
headers = httpx.Headers({
|
|
"content-type": "text/html",
|
|
"x-frame-options": "DENY",
|
|
})
|
|
result = _rewrite_headers(headers)
|
|
assert "x-frame-options" not in result
|
|
assert "content-type" in result
|
|
|
|
|
|
def test_rewrite_headers_strips_transfer_encoding():
|
|
headers = httpx.Headers({
|
|
"content-type": "text/html",
|
|
"transfer-encoding": "chunked",
|
|
})
|
|
result = _rewrite_headers(headers)
|
|
assert "transfer-encoding" not in result
|
|
|
|
|
|
def test_rewrite_headers_rewrites_csp_frame_ancestors():
|
|
headers = httpx.Headers({
|
|
"content-security-policy": "frame-ancestors 'none'; script-src 'self'",
|
|
})
|
|
result = _rewrite_headers(headers)
|
|
csp = result["content-security-policy"]
|
|
assert "frame-ancestors 'self'" in csp
|
|
assert "frame-ancestors 'none'" not in csp
|
|
|
|
|
|
def test_rewrite_headers_rewrites_csp_script_src():
|
|
headers = httpx.Headers({
|
|
"content-security-policy": "script-src 'self'",
|
|
})
|
|
result = _rewrite_headers(headers)
|
|
csp = result["content-security-policy"]
|
|
assert "script-src 'self' 'unsafe-inline'" in csp
|
|
|
|
|
|
def test_rewrite_headers_preserves_other_headers():
|
|
headers = httpx.Headers({
|
|
"content-type": "application/json",
|
|
"x-custom-header": "value",
|
|
})
|
|
result = _rewrite_headers(headers)
|
|
assert result["content-type"] == "application/json"
|
|
assert result["x-custom-header"] == "value"
|