Files
Unraid-AppOps-Gateway-Public/backend/tests/test_mcp_hub_legacy_registry_compatibility.py
T

105 lines
4.0 KiB
Python

from __future__ import annotations
import pytest
from backend.tests.test_mcp_hub_governed_topology import _legacy_target, _load_controller
LEGACY_SOURCE = "/srv/example/appdata/itworx-mcp-hub/deployment/repository"
def observed_legacy_target(controller):
project = _legacy_target(controller)
project.pop("exact_source")
project.pop("verify_oci_revision")
project["source_dir"] = LEGACY_SOURCE
project["compose_dir"] = "infrastructure/compose"
project["compose_files"] = list(controller.MCP_HUB_COMPOSE_FILES[:3])
project["env_source"] = "/srv/example/appdata/itworx-mcp-hub/deploy.env"
return project
@pytest.mark.parametrize("legacy", [False, True])
def test_observed_hub_legacy_source_is_only_normalized_in_memory(legacy):
controller = _load_controller()
project = observed_legacy_target(controller) if legacy else _legacy_target(controller)
canonical = (controller.EXACT_SOURCE_ROOT / "itworx-mcp-hub").as_posix()
original = LEGACY_SOURCE if legacy else canonical
project["source_dir"] = original
effective = controller.effective_mcp_hub_project(controller.MCP_HUB_REPOSITORY, project)
assert effective["source_dir"] == canonical
assert project["source_dir"] == original
assert effective["containers"] == list(controller.MCP_HUB_CONTAINERS)
assert effective["compose_files"] == list(controller.MCP_HUB_COMPOSE_FILES)
assert effective["_mcp_hub_contract"] == controller.MCP_HUB_TOPOLOGY_CONTRACT
def test_observed_legacy_registry_omissions_are_upgraded_only_in_memory():
controller = _load_controller()
project = observed_legacy_target(controller)
effective = controller.effective_mcp_hub_project(controller.MCP_HUB_REPOSITORY, project)
assert effective["exact_source"] is True
assert effective["verify_oci_revision"] is True
assert "exact_source" not in project
assert "verify_oci_revision" not in project
@pytest.mark.parametrize(
"field,value",
[
("source_dir", "/mnt/cache/appdata/gitea-deploy-runners/sources/itworx-mcp-hub"),
("compose_dir", "."),
("compose_files", ["other.yml"]),
("env_source", "/tmp/deploy.env"),
("exact_source", None),
("exact_source", False),
("exact_source", True),
("verify_oci_revision", None),
("verify_oci_revision", False),
("verify_oci_revision", True),
("clean_untracked_paths", None),
("clean_untracked_paths", False),
("clean_untracked_paths", []),
("clean_untracked_paths", ["local.env"]),
],
)
def test_legacy_registry_omissions_do_not_widen_other_target_shapes(field, value):
controller = _load_controller()
project = observed_legacy_target(controller)
project[field] = value
with pytest.raises(controller.DeployError, match="exact legacy 15-container contract"):
controller.effective_mcp_hub_project(controller.MCP_HUB_REPOSITORY, project)
@pytest.mark.parametrize("field", ["exact_source", "verify_oci_revision"])
def test_fully_declared_legacy_target_rejects_explicit_false_verification(field):
controller = _load_controller()
project = observed_legacy_target(controller)
project[field] = False
with pytest.raises(controller.DeployError, match="exact legacy 15-container contract"):
controller.effective_mcp_hub_project(controller.MCP_HUB_REPOSITORY, project)
@pytest.mark.parametrize(
"source",
[
None,
True,
{},
LEGACY_SOURCE + "/",
LEGACY_SOURCE + "/../repository",
"/mnt/cache/appdata/itworx-mcp-hub/deployment/repository",
"/srv/example/appdata/another-hub/deployment/repository",
"/tmp/repository",
],
)
def test_hub_legacy_source_compatibility_rejects_other_spellings_and_types(source):
controller = _load_controller()
project = _legacy_target(controller)
project["source_dir"] = source
with pytest.raises(controller.DeployError, match="exact legacy 15-container contract"):
controller.effective_mcp_hub_project(controller.MCP_HUB_REPOSITORY, project)