实现侧: - 上下文:任务范围拆分为 范围校验/范围授权;索引按可发现口径重建、索引新鲜度改对称差;依赖校验统一快照漂移说明。 - 知识方法:方法与材料读取口径统一;超限方法材料按可选省略,核对路径不再二次计费;删除无合同的读时重算。 - 任务运行:新增 context.usage/tool.denied 事件类型;连接池常驻并在装配生命周期内开关;调用结算与核对分列。 - 效果评测/审校修订/交付连载/作者经验/作品规划:凭据冻结、标定消费、导出补证、事实引文核对等收尾修复。 - 资源加载:能力正文不再夹带索引用的导航注记(该注记此前进入角色与技能的模型提示)。 - 元数据:受保护骨架与代码保护属性对齐;字段校验与内置结构口径同步。 - 基础设施:环境预检进入装配生命周期;数据库连接运行期字段不参与相等比较;索引指纹归一化 jsonb 浮点。 - 删除被替代实现:7 份旧提示词模板与空壳 资料来源 读取器。 用例侧: - 用例身份与导航元信息迁移;夹具补生命周期、同库暴露与模板封存; - 本轮定向修复:方法材料省略、事实引文、迁移回执、额度与暂停用例、慢用例超时预算等。
141 lines
4.9 KiB
Python
141 lines
4.9 KiB
Python
"""合成安装包验证资源视图与强制磁盘审计,禁止真实作品数据。"""
|
|
|
|
import hashlib
|
|
import json
|
|
import zipfile
|
|
from contextlib import contextmanager
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from muse.共享.错误 import 资源缺失错误
|
|
from muse.基础设施.系统运行 import 读取系统状态
|
|
from muse.资源加载 import 使用资源提供器, 安装包资源提供器
|
|
|
|
|
|
@pytest.fixture
|
|
def 安装资源(tmp_path, monkeypatch):
|
|
数据 = {"规则/合成.txt": b"abc", "规则/备用.txt": b"def"}
|
|
with zipfile.ZipFile(tmp_path / "运行资源.zip", "w") as archive:
|
|
for name, data in 数据.items():
|
|
archive.writestr(name, data)
|
|
(tmp_path / "迁移").mkdir()
|
|
(tmp_path / "迁移/V0001__synthetic.sql").write_bytes(b"SELECT 1;")
|
|
数据["迁移/V0001__synthetic.sql"] = b"SELECT 1;"
|
|
manifest = {
|
|
"发布身份": "release",
|
|
"构建身份": "build",
|
|
"代码哈希": "code",
|
|
"代码版本": "v1",
|
|
"资源": {name: {"sha256": hashlib.sha256(data).hexdigest()} for name, data in 数据.items()},
|
|
}
|
|
(tmp_path / "清单.json").write_text(json.dumps(manifest))
|
|
monkeypatch.setattr("muse.资源加载.resources.files", lambda _: tmp_path)
|
|
monkeypatch.setattr("muse.基础设施.系统运行.运行代码哈希", lambda: "code")
|
|
return tmp_path, 数据
|
|
|
|
|
|
@pytest.mark.case_id("NC-O06-RESOURCE-READY-COST")
|
|
def test_百次就绪只探数据库不扫包代码(安装资源, monkeypatch):
|
|
provider = 安装包资源提供器()
|
|
provider.打开()
|
|
|
|
def forbidden(*_, **__):
|
|
raise AssertionError("warm readiness must not read full resources/code")
|
|
|
|
monkeypatch.setattr("muse.基础设施.系统运行.运行代码哈希", forbidden)
|
|
monkeypatch.setattr(zipfile.ZipFile, "read", forbidden)
|
|
monkeypatch.setattr("muse.资源加载._读取清单字节", forbidden)
|
|
counters = []
|
|
queries = []
|
|
|
|
class Connection:
|
|
@contextmanager
|
|
def transaction(self):
|
|
yield
|
|
|
|
def execute(self, query):
|
|
queries.append(query)
|
|
return self
|
|
|
|
def fetchone(self):
|
|
return ("muse_migration",)
|
|
|
|
def fetchall(self):
|
|
return [(1, hashlib.sha256(b"SELECT 1;").hexdigest())]
|
|
|
|
class Database:
|
|
@contextmanager
|
|
def 连接(self, *, 只读):
|
|
assert 只读
|
|
counters.append(1)
|
|
yield Connection()
|
|
|
|
monkeypatch.setattr("muse.基础设施.数据库.迁移.列出迁移", forbidden)
|
|
cfg = SimpleNamespace(
|
|
运行用途=SimpleNamespace(value="production"),
|
|
原文暂存=None,
|
|
探索草稿=None,
|
|
资源发布身份="build",
|
|
)
|
|
with 使用资源提供器(provider):
|
|
for _ in range(100):
|
|
assert 读取系统状态(cfg, Database())["ready"]
|
|
assert provider.打开资源("规则/合成.txt") == b"abc"
|
|
assert len(counters) == 100
|
|
assert len(queries) == 200
|
|
provider.关闭()
|
|
|
|
|
|
@pytest.mark.case_id("NC-O06-RESOURCE-AUDIT")
|
|
def test_清单副本隔离且强制审计发现缓存后目录篡改(安装资源):
|
|
root, _ = 安装资源
|
|
provider = 安装包资源提供器()
|
|
provider.打开()
|
|
manifest = provider.加载清单()
|
|
manifest["资源"].clear()
|
|
assert provider.打开资源("规则/合成.txt") == b"abc"
|
|
(root / "迁移/V0001__synthetic.sql").write_bytes(b"SELECT 2;")
|
|
assert provider.打开资源("迁移/V0001__synthetic.sql") == b"SELECT 1;"
|
|
with pytest.raises(资源缺失错误, match="哈希"):
|
|
provider.核对资源()
|
|
provider.关闭()
|
|
|
|
|
|
@pytest.mark.case_id("NC-O06-RESOURCE-IDENTITY")
|
|
def test_已知包身份变化拒绝旧视图(安装资源):
|
|
root, _ = 安装资源
|
|
provider = 安装包资源提供器()
|
|
provider.打开()
|
|
(root / "清单.json").write_text("{}")
|
|
with pytest.raises(资源缺失错误, match="身份改变"):
|
|
provider.已核验清单()
|
|
with pytest.raises(资源缺失错误):
|
|
provider.打开资源("规则/合成.txt")
|
|
provider.关闭()
|
|
|
|
|
|
@pytest.mark.case_id("NC-O06-RESOURCE-BOUNDED")
|
|
def test_有界缓存逐项读zip且退出关闭句柄(安装资源):
|
|
provider = 安装包资源提供器(缓存上限=3)
|
|
provider.打开()
|
|
archive = provider._包
|
|
assert provider._缓存字节 <= 3
|
|
assert provider.打开资源("规则/合成.txt") == b"abc"
|
|
assert provider.打开资源("规则/备用.txt") == b"def"
|
|
assert provider._缓存字节 <= 3
|
|
provider.关闭()
|
|
assert archive.fp is None
|
|
with pytest.raises(资源缺失错误, match="尚未完成"):
|
|
provider.已核验清单()
|
|
|
|
|
|
@pytest.mark.case_id("NC-O06-RESOURCE-MISSING")
|
|
def test_缺安装资源启动拒绝且关闭句柄(安装资源):
|
|
root, _ = 安装资源
|
|
(root / "运行资源.zip").unlink()
|
|
provider = 安装包资源提供器()
|
|
with pytest.raises(资源缺失错误):
|
|
provider.打开()
|
|
assert provider._包 is None and provider._清单 is None
|