Skip to content

Commit 91dc87f

Browse files
authored
add some evil cases (#3240)
* add repitation early stop cases * add repitation early stop cases * add bad cases * add bad cases * add evil cases
1 parent 256a82b commit 91dc87f

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

test/ce/server/test_evil_cases.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,93 @@
55
"""
66
边缘检测 ,攻击性测试
77
"""
8+
9+
10+
import pytest
11+
from core import TEMPLATE, URL, build_request_payload, send_request
12+
13+
14+
def test_missing_messages_field():
15+
"""缺失 messages 字段,服务应返回合理错误,而非崩溃"""
16+
data = {
17+
"stream": False,
18+
"max_tokens": 10,
19+
}
20+
payload = build_request_payload(TEMPLATE, data)
21+
resp = send_request(URL, payload).json()
22+
23+
assert "detail" in resp, "返回中未包含 detail 错误信息字段"
24+
assert any("messages" in err.get("loc", []) for err in resp["detail"]), "未检测到 messages 字段缺失的报错"
25+
assert any("Field required" in err.get("msg", "") for err in resp["detail"]), "未检测到 'Field required' 错误提示"
26+
27+
28+
def test_malformed_messages_format():
29+
"""messages 为非列表,应报错而非崩溃"""
30+
data = {
31+
"stream": False,
32+
"messages": "我是一个非法的消息结构",
33+
"max_tokens": 10,
34+
}
35+
payload = build_request_payload(TEMPLATE, data)
36+
resp = send_request(URL, payload).json()
37+
assert "detail" in resp, "非法结构未被识别"
38+
assert any("messages" in err.get("loc", []) for err in resp["detail"]), "未检测到 messages 字段结构错误"
39+
assert any(
40+
"Input should be a valid list" in err.get("msg", "") for err in resp["detail"]
41+
), "未检测到 'Input should be a valid list' 错误提示"
42+
43+
44+
def test_extremely_large_max_tokens():
45+
"""设置极大 max_tokens,观察模型内存/容错行为"""
46+
data = {
47+
"stream": False,
48+
"messages": [{"role": "user", "content": "1+1=?"}],
49+
"max_tokens": 10000000,
50+
}
51+
payload = build_request_payload(TEMPLATE, data)
52+
try:
53+
resp = send_request(URL, payload).json()
54+
assert "error" in resp or resp["usage"]["completion_tokens"] < 10000000
55+
except Exception:
56+
pytest.fail("设置极大 max_tokens 时服务崩溃")
57+
58+
59+
def test_null_metadata():
60+
"""metadata = null"""
61+
data = {
62+
"stream": False,
63+
"messages": [{"role": "user", "content": "介绍下你自己"}],
64+
"max_tokens": 10,
65+
"metadata": None,
66+
}
67+
payload = build_request_payload(TEMPLATE, data)
68+
resp = send_request(URL, payload).json()
69+
assert "error" not in resp, "metadata=null 应被容忍而不是报错"
70+
71+
72+
def test_top_p_exceed_1():
73+
"""top_p 超过1,违反规定,服务应报错"""
74+
data = {
75+
"stream": False,
76+
"messages": [{"role": "user", "content": "非洲的首都是?"}],
77+
"top_p": 1.5,
78+
"max_tokens": 10,
79+
}
80+
payload = build_request_payload(TEMPLATE, data)
81+
resp = send_request(URL, payload).json()
82+
assert resp.get("object") == "error", "top_p > 1 应触发校验异常"
83+
assert "top_p value can only be defined" in resp.get("message", ""), "未返回预期的 top_p 错误信息"
84+
85+
86+
def test_mixed_valid_invalid_fields():
87+
"""混合合法字段与非法字段,看是否污染整个请求"""
88+
data = {
89+
"stream": False,
90+
"messages": [{"role": "user", "content": "你好"}],
91+
"max_tokens": 10,
92+
"invalid_field": "this_should_be_ignored_or_warned",
93+
}
94+
payload = build_request_payload(TEMPLATE, data)
95+
resp = send_request(URL, payload).json()
96+
assert "error" not in resp, "非法字段不应导致请求失败"
97+

0 commit comments

Comments
 (0)