feat: Refactor imports to use pod_executor and add container verification script

This commit is contained in:
Hans Aschauer 2026-03-05 06:45:00 +01:00
parent 17577d3fba
commit 114381b71c
19 changed files with 79 additions and 79 deletions

View file

@ -15,10 +15,10 @@ from pathlib import Path
def test_create_container_with_valid_params_succeeds():
"""Test that container creation with valid params succeeds."""
from mcp_forge.podman.containers import ContainerConfig, SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger, AuditEventType
from mcp_forge.security.resource_limits import ResourceLimits
from pod_executor.security.resource_limits import ResourceLimits
from mcp_forge.config.schema import SecurityConfig
# Setup mocks
@ -51,7 +51,7 @@ def test_create_container_with_valid_params_succeeds():
def test_create_container_with_forbidden_params_raises_security_error():
"""Test that forbidden parameters raise SecurityError."""
from mcp_forge.podman.containers import ContainerConfig, SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator, SecurityError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -80,7 +80,7 @@ def test_create_container_with_forbidden_params_raises_security_error():
def test_create_container_with_invalid_image_raises_security_error():
"""Test that invalid/disallowed images raise SecurityError."""
from mcp_forge.podman.containers import ContainerConfig, SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator, SecurityError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -126,7 +126,7 @@ def test_create_container_enforces_required_parameters():
def test_resource_limits_are_applied_correctly():
"""Test that resource limits are correctly applied."""
from mcp_forge.podman.containers import ContainerConfig
from mcp_forge.security.resource_limits import ResourceLimits
from pod_executor.security.resource_limits import ResourceLimits
limits = ResourceLimits(
memory="1g",
@ -149,7 +149,7 @@ def test_resource_limits_are_applied_correctly():
def test_volume_mounts_are_validated():
"""Test that volume mounts are validated against allowlist."""
from mcp_forge.podman.containers import ContainerConfig, SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator, SecurityError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -190,7 +190,7 @@ def test_volume_mounts_are_validated():
def test_start_container_on_session_container_succeeds():
"""Test that starting a session container succeeds."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -218,7 +218,7 @@ def test_start_container_on_session_container_succeeds():
def test_start_container_on_non_session_container_raises_security_error():
"""Test that starting a non-session container raises SecurityError."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator, SecurityError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -241,7 +241,7 @@ def test_start_container_on_non_session_container_raises_security_error():
def test_stop_container_works():
"""Test that stopping a container works."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -269,7 +269,7 @@ def test_stop_container_works():
def test_remove_container_works():
"""Test that removing a container works."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -297,7 +297,7 @@ def test_remove_container_works():
def test_cleanup_old_containers():
"""Test cleanup of old containers."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -340,7 +340,7 @@ def test_cleanup_old_containers():
def test_get_container_logs():
"""Test getting container logs."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -371,7 +371,7 @@ def test_get_container_logs():
def test_wait_for_container():
"""Test waiting for container to exit."""
from mcp_forge.podman.containers import SecureContainerManager
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.security.audit import AuditLogger
from mcp_forge.config.schema import SecurityConfig
@ -402,7 +402,7 @@ def test_wait_for_container():
def test_container_config_to_podman_params_includes_all_security_settings():
"""Test that ContainerConfig.to_podman_params includes all required settings."""
from mcp_forge.podman.containers import ContainerConfig
from mcp_forge.security.resource_limits import ResourceLimits
from pod_executor.security.resource_limits import ResourceLimits
config = ContainerConfig(
image="mcp-forge/python:3.11",

View file

@ -13,7 +13,7 @@ from unittest.mock import Mock, MagicMock, patch
def test_connection_to_podman_socket_succeeds(tmp_path):
"""Test that connection to Podman socket succeeds."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -42,7 +42,7 @@ def test_connection_to_podman_socket_succeeds(tmp_path):
def test_connection_failure_raises_clear_error(tmp_path):
"""Test that connection failure raises clear error."""
from mcp_forge.podman.client import PodmanClient, PodmanConnectionError
from pod_executor.containers.client import PodmanClient, PodmanConnectionError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -66,7 +66,7 @@ def test_connection_failure_raises_clear_error(tmp_path):
def test_socket_path_validation(tmp_path):
"""Test that socket path is validated before connecting."""
from mcp_forge.podman.client import PodmanClient, PodmanConnectionError
from pod_executor.containers.client import PodmanClient, PodmanConnectionError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -89,7 +89,7 @@ def test_socket_path_validation(tmp_path):
def test_socket_permissions_check(tmp_path):
"""Test that socket permissions are checked."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -120,7 +120,7 @@ def test_socket_permissions_check(tmp_path):
def test_api_version_compatibility_check(tmp_path):
"""Test that API version is checked."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -154,7 +154,7 @@ def test_api_version_compatibility_check(tmp_path):
def test_ping_health_check(tmp_path):
"""Test that ping/health check works."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -184,7 +184,7 @@ def test_ping_health_check(tmp_path):
def test_lazy_connection(tmp_path):
"""Test that connection is lazy (only connects when needed)."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -215,7 +215,7 @@ def test_lazy_connection(tmp_path):
def test_disconnect_cleanup(tmp_path):
"""Test that disconnect cleans up properly."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -246,7 +246,7 @@ def test_disconnect_cleanup(tmp_path):
def test_connection_error_includes_socket_path(tmp_path):
"""Test that connection errors include the socket path for debugging."""
from mcp_forge.podman.client import PodmanClient, PodmanConnectionError
from pod_executor.containers.client import PodmanClient, PodmanConnectionError
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -270,7 +270,7 @@ def test_connection_error_includes_socket_path(tmp_path):
def test_client_property_auto_connects(tmp_path):
"""Test that accessing client property auto-connects if not connected."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig
@ -304,7 +304,7 @@ def test_client_property_auto_connects(tmp_path):
def test_validator_and_audit_logger_stored(tmp_path):
"""Test that validator and audit logger are stored for later use."""
from mcp_forge.podman.client import PodmanClient
from pod_executor.containers.client import PodmanClient
from mcp_forge.security.audit import AuditLogger
from mcp_forge.security.allowlist import OperationValidator
from mcp_forge.config.schema import SecurityConfig