1
0
Fork 0
docker-easy-haproxy/tests_e2e/conftest.py
Joao Gilberto Magalhaes 904a102b0a Enhance logging and error handling in E2E tests and CI workflows
- Added detailed log messages in `conftest.py` for SSL certificate and JWT generation steps.
- Improved Docker Compose E2E test output with service-specific logs during startup and cleanup.
- Adjusted pytest run options in CI workflows to use `--tb=short` for concise error traceback.
2026-02-12 18:26:59 -05:00

90 lines
No EOL
3 KiB
Python

"""
Shared pytest fixtures for EasyHAProxy integration tests.
This module provides fixtures used by both Docker Compose and Kubernetes tests.
"""
import subprocess
from pathlib import Path
import pytest
from utils import generate_jwt_token
BASE_DIR = Path(__file__).parent.absolute()
@pytest.fixture(scope="session", autouse=True)
def generate_ssl_certificates():
"""
Generate SSL certificates once for all tests (Docker + Kubernetes).
Runs automatically at the start of the test session.
This fixture uses the working Docker approach (BASE_DIR) instead of the
broken K8s approach (BASE_DIR.parent) which was outdated after restructuring.
"""
script_path = BASE_DIR / "generate-keys.sh"
if not script_path.exists():
pytest.skip(f"SSL certificate generation script not found: {script_path}")
# Run from tests_e2e directory (Docker approach - WORKING)
print("\n[Setup] Generating SSL certificates and JWT keys...")
result = subprocess.run(
["bash", str(script_path)],
cwd=BASE_DIR, # NOT BASE_DIR.parent (K8s bug)
capture_output=True,
text=True
)
if result.returncode != 0:
print(f"[Setup] ERROR: Certificate generation failed!")
print(f"[Setup] stderr: {result.stderr}")
pytest.fail(f"Failed to generate SSL certificates:\n{result.stderr}")
print("[Setup] ✓ SSL certificates and JWT keys generated successfully")
# Return paths for K8s tests to use
yield {
"host1_local": BASE_DIR / "static" / "host1.local.pem",
"host2_local": BASE_DIR / "docker" / "host2.local.pem",
"jwt_private": BASE_DIR / "docker" / "jwt_private.pem",
"jwt_pubkey": BASE_DIR / "docker" / "jwt_pubkey.pem",
}
# No cleanup needed - certificates can be reused
@pytest.fixture
def jwt_token(generate_ssl_certificates) -> str:
"""
Generate a valid JWT token for Docker Compose tests.
Uses simple defaults suitable for docker-compose examples.
"""
certs = generate_ssl_certificates
return generate_jwt_token(
private_key_path=certs["jwt_private"],
issuer='https://auth.example.com/',
audience='https://api.example.com',
expired=False
)
def verify_haproxy_stats(port: int = 1936, username: str = "admin", password: str = "password"):
"""
Verify HAProxy stats interface is accessible.
This eliminates the duplicated test method that appears in 7 different
test classes in test_docker_compose.py.
Args:
port: HAProxy stats port
username: Basic auth username
password: Basic auth password
Raises:
AssertionError: If stats page not accessible or missing expected content
"""
import requests
response = requests.get(f"http://localhost:{port}", auth=(username, password))
assert response.status_code == 200, f"Expected 200, got {response.status_code}"
assert "Statistics Report for HAProxy" in response.text, \
"HAProxy stats page content not found"