58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
"""流程发布前的处理器身份、版本与保护路径合同。"""
|
|
|
|
import pytest
|
|
|
|
from muse.任务运行.接口 import 步骤处理器, 步骤结果, 步骤计划
|
|
from muse.编排.接口 import 流程定义, 流程校验错误, 流程登记
|
|
|
|
|
|
def 构造登记() -> 流程登记:
|
|
登记 = 流程登记()
|
|
登记.登记处理器(
|
|
步骤处理器("guard", "1", lambda _: 步骤结果({}), "v1", "v1", 保护职责="来源校验")
|
|
)
|
|
登记.登记处理器(步骤处理器("work", "1", lambda _: 步骤结果({}), "v1", "v1"))
|
|
登记.登记类型("example", 必需保护=("来源校验",))
|
|
return 登记
|
|
|
|
|
|
def test_未知处理器与保护绕行拒绝__a50001() -> None:
|
|
登记 = 构造登记()
|
|
with pytest.raises(流程校验错误):
|
|
登记.冻结(流程定义("example", "1", (步骤计划("s1", "/tmp/script.py", "1"),)))
|
|
with pytest.raises(流程校验错误, match="保护"):
|
|
登记.冻结(
|
|
流程定义(
|
|
"example", "1", (步骤计划("guard", "guard", "1"), 步骤计划("work", "work", "1"))
|
|
)
|
|
)
|
|
计划 = 登记.冻结(
|
|
流程定义(
|
|
"example",
|
|
"1",
|
|
(步骤计划("guard", "guard", "1"), 步骤计划("work", "work", "1", ("guard",))),
|
|
)
|
|
)
|
|
assert 计划.流程ID == "example"
|
|
|
|
|
|
def test_流程依赖环与不兼容槽位拒绝__a50002() -> None:
|
|
登记 = 构造登记()
|
|
with pytest.raises(流程校验错误, match="环"):
|
|
登记.冻结(
|
|
流程定义(
|
|
"example",
|
|
"1",
|
|
(步骤计划("g", "guard", "1", ("w",)), 步骤计划("w", "work", "1", ("g",))),
|
|
)
|
|
)
|
|
登记.登记处理器(步骤处理器("incompatible", "1", lambda _: 步骤结果({}), "v2", "v2"))
|
|
with pytest.raises(流程校验错误, match="合同"):
|
|
登记.冻结(
|
|
流程定义(
|
|
"example",
|
|
"1",
|
|
(步骤计划("g", "guard", "1"), 步骤计划("w", "incompatible", "1", ("g",))),
|
|
)
|
|
)
|