db1d565b64
Integration Tests / melodic (push) Has been cancelled
Integration Tests / noetic (push) Has been cancelled
Integration Tests / humble (push) Has been cancelled
Integration Tests / jazzy (push) Has been cancelled
Ruff Lint & Format / ruff (push) Has been cancelled
Sync main to develop / Check if sync is needed (push) Has been cancelled
Sync main to develop / Sync main to develop (push) Has been cancelled
120 lines
3.4 KiB
Python
120 lines
3.4 KiB
Python
"""
|
|
Tests for pip-based installation methods.
|
|
|
|
These tests verify that pip install works from git and from local source.
|
|
All tests install from git/source to validate before publishing.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from .conftest import build_docker_image, cleanup_docker_image
|
|
|
|
|
|
@pytest.mark.installation
|
|
@pytest.mark.slow
|
|
def test_pip_install_from_git(repo_root: Path, docker_dir: Path, git_branch: str, repo_url: str):
|
|
"""
|
|
Test pip install ros-mcp from git in a clean container.
|
|
|
|
This verifies that pip can install the package from a git branch.
|
|
"""
|
|
dockerfile = docker_dir / "Dockerfile.pip-git"
|
|
tag = "ros-mcp-test:pip-git"
|
|
|
|
try:
|
|
result = build_docker_image(
|
|
dockerfile_path=dockerfile,
|
|
context_path=repo_root,
|
|
tag=tag,
|
|
build_args={
|
|
"REPO_URL": repo_url,
|
|
"BRANCH": git_branch,
|
|
},
|
|
timeout=300, # 5 minutes for package downloads
|
|
)
|
|
|
|
assert result.returncode == 0, (
|
|
f"pip install from git failed (branch: {git_branch}):\n"
|
|
f"STDOUT:\n{result.stdout}\n"
|
|
f"STDERR:\n{result.stderr}"
|
|
)
|
|
|
|
finally:
|
|
cleanup_docker_image(tag)
|
|
|
|
|
|
@pytest.mark.installation
|
|
@pytest.mark.slow
|
|
def test_pip_install_from_source(repo_root: Path, docker_dir: Path):
|
|
"""
|
|
Test pip install . from cloned repository in a clean container.
|
|
|
|
This verifies that developers can install the package from local source.
|
|
"""
|
|
dockerfile = docker_dir / "Dockerfile.pip-source"
|
|
tag = "ros-mcp-test:pip-source"
|
|
|
|
try:
|
|
result = build_docker_image(
|
|
dockerfile_path=dockerfile,
|
|
context_path=repo_root,
|
|
tag=tag,
|
|
timeout=300,
|
|
)
|
|
|
|
assert result.returncode == 0, (
|
|
f"pip install from source failed:\nSTDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}"
|
|
)
|
|
|
|
finally:
|
|
cleanup_docker_image(tag)
|
|
|
|
|
|
@pytest.mark.installation
|
|
@pytest.mark.slow
|
|
@pytest.mark.parametrize("python_version", ["3.10", "3.11", "3.12"])
|
|
def test_pip_install_python_versions(
|
|
repo_root: Path, docker_dir: Path, git_branch: str, repo_url: str, python_version: str
|
|
):
|
|
"""
|
|
Test pip install works on multiple Python versions.
|
|
|
|
This ensures compatibility across supported Python versions.
|
|
"""
|
|
# Read the Dockerfile and modify the base image
|
|
dockerfile_content = (docker_dir / "Dockerfile.pip-git").read_text()
|
|
dockerfile_content = dockerfile_content.replace(
|
|
"FROM python:3.10-slim", f"FROM python:{python_version}-slim"
|
|
)
|
|
|
|
# Write temporary Dockerfile
|
|
temp_dockerfile = docker_dir / f"Dockerfile.pip-git-{python_version}"
|
|
temp_dockerfile.write_text(dockerfile_content)
|
|
tag = f"ros-mcp-test:pip-py{python_version}"
|
|
|
|
try:
|
|
result = build_docker_image(
|
|
dockerfile_path=temp_dockerfile,
|
|
context_path=repo_root,
|
|
tag=tag,
|
|
build_args={
|
|
"REPO_URL": repo_url,
|
|
"BRANCH": git_branch,
|
|
},
|
|
timeout=300,
|
|
)
|
|
|
|
assert result.returncode == 0, (
|
|
f"pip install failed on Python {python_version} (branch: {git_branch}):\n"
|
|
f"STDOUT:\n{result.stdout}\n"
|
|
f"STDERR:\n{result.stderr}"
|
|
)
|
|
|
|
finally:
|
|
cleanup_docker_image(tag)
|
|
# Clean up temporary Dockerfile
|
|
if temp_dockerfile.exists():
|
|
temp_dockerfile.unlink()
|