693cd952cd
仓库首次入库(此前仅存在于本地工作区与测试服构建产物中,未上传)。 改动(src/knowledge_adapter/asset_content_processor.py): - 新增 _TRUNCATED_TRAILING_MARKDOWN_RESOURCE_IMAGE 规则,清除 chunk 末尾被截断的  - 回归测试 tests/test_asset_content_processor.py:: test_truncated_trailing_markdown_resource_image_is_removed 验证证据: - 测试服 120.76.217.51,镜像 knowledge-adapter-service:reviewed-test-aeab4b5fca2d (release aeab4b5fca2d8661):KB d015d05c-25c8-4d63-b2ab-e8590d3c2dfb 5 个查询全部 http=200、records=5、残留 resource:// = 0;KB b9dacd62 无退化;容器日志无 error/exception - 本地:pytest 141 项全通过、ruff 全通过 - 该文件与 258c31e0fe07fd08 源码的差异经逐文件 md5 比对,为唯一变更文件
111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
import pytest
|
|
|
|
from knowledge_adapter.resource_locator import (
|
|
InvalidResourceLocator,
|
|
InvalidResourceReference,
|
|
parse_oss_object_key,
|
|
parse_resource_reference,
|
|
)
|
|
|
|
VALID_HANDLE = "AbCdEfGhIjKlMnOpQrSt_1"
|
|
|
|
|
|
def test_parse_resource_reference_accepts_only_canonical_handle() -> None:
|
|
assert parse_resource_reference(f"resource://{VALID_HANDLE}") == VALID_HANDLE
|
|
|
|
invalid_values = [
|
|
"resource://short",
|
|
"resource://AbCdEfGhIjKlMnOpQrSt/1",
|
|
"resource://AbCdEfGhIjKlMnOpQrSt%1",
|
|
"https://example.com/image.png",
|
|
"http://example.com/image.png",
|
|
]
|
|
for value in invalid_values:
|
|
with pytest.raises(InvalidResourceReference):
|
|
parse_resource_reference(value)
|
|
|
|
|
|
def test_parse_oss_object_key_accepts_matching_wrapped_locator() -> None:
|
|
object_key = parse_oss_object_key(
|
|
provider="oss",
|
|
physical_path=(
|
|
"storage://backend-test/"
|
|
"oss://private-assets/weknora/10008/assets/image.png"
|
|
),
|
|
storage_backend_id="backend-test",
|
|
expected_storage_backend_id="backend-test",
|
|
expected_bucket="private-assets",
|
|
)
|
|
|
|
assert object_key == "weknora/10008/assets/image.png"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("provider", "physical_path", "storage_backend_id"),
|
|
[
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets/../secret.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets//absolute.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets/folder\\image.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets/image.png\x00ignored",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets/image.png?signature=bad",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"cos",
|
|
"storage://backend-test/oss://private-assets/image.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://other/oss://private-assets/image.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://other-bucket/image.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"https://example.com/image.png",
|
|
"backend-test",
|
|
),
|
|
(
|
|
"oss",
|
|
"storage://backend-test/oss://private-assets/" + ("x" * 1024),
|
|
"backend-test",
|
|
),
|
|
],
|
|
)
|
|
def test_parse_oss_object_key_rejects_locator_outside_fixed_boundary(
|
|
provider: str,
|
|
physical_path: str,
|
|
storage_backend_id: str,
|
|
) -> None:
|
|
with pytest.raises(InvalidResourceLocator):
|
|
parse_oss_object_key(
|
|
provider=provider,
|
|
physical_path=physical_path,
|
|
storage_backend_id=storage_backend_id,
|
|
expected_storage_backend_id="backend-test",
|
|
expected_bucket="private-assets",
|
|
)
|