ForcePilot/backend/test/unit/backends/test_sandbox_paths.py

45 lines
1.7 KiB
Python
Raw Normal View History

"""Tests for yuxi.agents.backends.sandbox.paths uid sanitize behavior.
服务账号 uid 格式 ``svc:channel:{channel_type}:{account_id}`` 含冒号
paths.py._sanitize_uid 必须将其转义为文件系统安全的路径组件且与
docker/sandbox_provisioner/app.py 中的转义规则保持一致确保宿主机
路径与容器挂载路径映射一致
"""
from __future__ import annotations
import pytest
from yuxi.agents.backends.sandbox.paths import _sanitize_uid
def test_sanitize_uid_passes_through_safe_chars() -> None:
assert _sanitize_uid("user-1_2") == "user-1_2"
assert _sanitize_uid("abcDEF123") == "abcDEF123"
def test_sanitize_uid_escapes_colons_in_service_account_uid() -> None:
# 服务账号 uid: svc:channel:{channel_type}:{account_id}
assert _sanitize_uid("svc:channel:wechat_woc:acc-1") == "svc_channel_wechat_woc_acc-1"
assert _sanitize_uid("svc:channel:feishu:host_1_bridge_2") == "svc_channel_feishu_host_1_bridge_2"
def test_sanitize_uid_escapes_unsafe_chars_to_underscore() -> None:
assert _sanitize_uid("user/name") == "user_name"
assert _sanitize_uid("user name") == "user_name"
assert _sanitize_uid("user;rm") == "user_rm"
assert _sanitize_uid("user.name") == "user_name"
# 路径穿越尝试被转义后不再包含 ..(每个非法字符独立替换为 _
assert _sanitize_uid("../user") == "___user"
assert _sanitize_uid("..") == "__"
def test_sanitize_uid_rejects_empty_or_whitespace() -> None:
for value in ["", " ", None]:
with pytest.raises(ValueError):
_sanitize_uid(value) # type: ignore[arg-type]
def test_sanitize_uid_strips_surrounding_whitespace() -> None:
assert _sanitize_uid(" user-1 ") == "user-1"