105 lines
4.0 KiB
Python
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)
|