Skip to content

Commit b4da152

Browse files
committed
feat(tests): Add glm45,glm46v,glm5 testcases.
1 parent 69df96c commit b4da152

4 files changed

Lines changed: 174 additions & 0 deletions

File tree

tests/real_upstream_test_utils.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import os
2+
from typing import Any
3+
4+
import pytest
5+
6+
from app.core import upstream as upstream_module
7+
from app.core.upstream import UpstreamClient, _extract_user_id_from_token
8+
9+
REAL_AUTH_TOKEN_ENV = "REAL_AUTH_TOKEN_ENV"
10+
RED_2X2_PNG_DATA_URL = (
11+
"data:image/png;base64,"
12+
"iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAEElEQVR42mP4z8AARAwQCgAf7gP9Y167WwAAAABJRU5ErkJggg=="
13+
)
14+
15+
def install_real_auth(monkeypatch) -> str:
16+
token = os.getenv(REAL_AUTH_TOKEN_ENV, "").strip()
17+
if not token:
18+
pytest.skip(f"需要设置环境变量 {REAL_AUTH_TOKEN_ENV}")
19+
20+
user_id = _extract_user_id_from_token(token)
21+
if not user_id or user_id == "guest":
22+
raise AssertionError(f"{REAL_AUTH_TOKEN_ENV} 不是可解析的认证 token")
23+
24+
async def fake_get_auth_info(
25+
self,
26+
excluded_tokens=None,
27+
excluded_guest_user_ids=None,
28+
):
29+
return {
30+
"token": token,
31+
"user_id": user_id,
32+
"username": "RealUser",
33+
"auth_mode": "authenticated",
34+
"token_source": "env",
35+
"guest_user_id": None,
36+
}
37+
38+
monkeypatch.setattr(UpstreamClient, "get_auth_info", fake_get_auth_info)
39+
monkeypatch.setattr(upstream_module, "get_token_pool", lambda: None)
40+
monkeypatch.setattr(upstream_module, "get_guest_session_pool", lambda: None)
41+
return token
42+
43+
44+
def install_real_anonymous(monkeypatch) -> None:
45+
monkeypatch.setattr(upstream_module, "get_token_pool", lambda: None)
46+
monkeypatch.setattr(upstream_module, "get_guest_session_pool", lambda: None)
47+
monkeypatch.setattr(upstream_module.settings, "ANONYMOUS_MODE", True)
48+
49+
50+
def extract_content(payload: dict[str, Any]) -> str:
51+
assert isinstance(payload, dict), payload
52+
assert "error" not in payload, payload
53+
54+
choices = payload.get("choices") or []
55+
assert choices, payload
56+
57+
message = choices[0].get("message") or {}
58+
content = str(message.get("content") or "").strip()
59+
assert content, payload
60+
return content
61+
62+
63+
def assert_usage_present(payload: dict[str, Any]) -> None:
64+
usage = payload.get("usage") or {}
65+
assert int(usage.get("total_tokens") or 0) > 0, payload

tests/test_glm45_real_token.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import pytest
2+
3+
from app.core.config import settings
4+
from app.core.upstream import UpstreamClient
5+
from app.models.schemas import Message, OpenAIRequest
6+
from tests.real_upstream_test_utils import (
7+
assert_usage_present,
8+
extract_content,
9+
install_real_anonymous,
10+
)
11+
12+
13+
@pytest.mark.asyncio
14+
async def test_glm45_with_real_anonymous_request(monkeypatch):
15+
install_real_anonymous(monkeypatch)
16+
17+
client = UpstreamClient()
18+
request = OpenAIRequest(
19+
model=settings.GLM45_MODEL,
20+
messages=[
21+
Message(
22+
role="user",
23+
content="请只输出字符串 GLM45_OK,不要输出任何其他内容。",
24+
)
25+
],
26+
stream=False,
27+
)
28+
29+
payload = await client.chat_completion(request)
30+
content = extract_content(payload)
31+
32+
assert "GLM45_OK" in content
33+
assert_usage_present(payload)

tests/test_glm46v_real_token.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import pytest
2+
3+
from app.core.config import settings
4+
from app.core.upstream import UpstreamClient
5+
from app.models.schemas import ContentPart, ImageUrl, Message, OpenAIRequest
6+
from tests.real_upstream_test_utils import (
7+
RED_2X2_PNG_DATA_URL,
8+
assert_usage_present,
9+
extract_content,
10+
install_real_auth,
11+
)
12+
13+
14+
@pytest.mark.asyncio
15+
async def test_glm46v_with_real_auth_token_and_image(monkeypatch):
16+
install_real_auth(monkeypatch)
17+
18+
client = UpstreamClient()
19+
request = OpenAIRequest(
20+
model=settings.GLM46V_MODEL,
21+
messages=[
22+
Message(
23+
role="user",
24+
content=[
25+
ContentPart(
26+
type="text",
27+
text="请判断这张图片的主色调。如果它是红色,只输出 RED_OK。",
28+
),
29+
ContentPart(
30+
type="image_url",
31+
image_url=ImageUrl(url=RED_2X2_PNG_DATA_URL),
32+
),
33+
],
34+
)
35+
],
36+
stream=False,
37+
)
38+
39+
payload = await client.chat_completion(request)
40+
content = extract_content(payload)
41+
42+
assert "RED_OK" in content
43+
assert_usage_present(payload)

tests/test_glm5_real_token.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import pytest
2+
3+
from app.core.config import settings
4+
from app.core.upstream import UpstreamClient
5+
from app.models.schemas import Message, OpenAIRequest
6+
from tests.real_upstream_test_utils import (
7+
assert_usage_present,
8+
extract_content,
9+
install_real_anonymous,
10+
)
11+
12+
13+
@pytest.mark.asyncio
14+
async def test_glm5_with_real_anonymous_request(monkeypatch):
15+
install_real_anonymous(monkeypatch)
16+
17+
client = UpstreamClient()
18+
request = OpenAIRequest(
19+
model=settings.GLM5_MODEL,
20+
messages=[
21+
Message(
22+
role="user",
23+
content="请只输出字符串 GLM5_OK,不要输出任何其他内容。",
24+
)
25+
],
26+
stream=False,
27+
)
28+
29+
payload = await client.chat_completion(request)
30+
content = extract_content(payload)
31+
32+
assert "GLM5_OK" in content
33+
assert_usage_present(payload)

0 commit comments

Comments
 (0)