Files
scenar-creator/tests/test_docker_integration.py
Martin Sukany 9a7ffdeb2c copilot test
2025-11-13 11:37:28 +01:00

57 lines
1.7 KiB
Python

import os
import shutil
import subprocess
import time
import socket
import urllib.request
import pytest
def docker_available():
return shutil.which("docker") is not None
def wait_for_http(url, timeout=30):
end = time.time() + timeout
last_exc = None
while time.time() < end:
try:
with urllib.request.urlopen(url, timeout=3) as r:
body = r.read().decode('utf-8', errors='ignore')
return r.getcode(), body
except Exception as e:
last_exc = e
time.sleep(0.5)
raise RuntimeError(f"HTTP check failed after {timeout}s: {last_exc}")
@pytest.mark.skipif(not docker_available(), reason="Docker is not available on this runner")
@pytest.mark.integration
def test_build_run_and_cleanup_docker():
image_tag = "scenar-creator:latest"
container_name = "scenar-creator-test"
port = int(os.environ.get('SCENAR_TEST_PORT', '8080'))
# Build image
subprocess.run(["docker", "build", "-t", image_tag, "."], check=True)
# Ensure no leftover container
subprocess.run(["docker", "rm", "-f", container_name], check=False)
try:
# Run container
subprocess.run([
"docker", "run", "-d", "--name", container_name, "-p", f"{port}:8080", image_tag
], check=True)
# Wait for HTTP and verify content
code, body = wait_for_http(f"http://127.0.0.1:{port}/")
assert code == 200
assert "Vytvoření Scénáře" in body or "Scenar" in body or "Vytvoření" in body
finally:
# Cleanup container and image
subprocess.run(["docker", "rm", "-f", container_name], check=False)
subprocess.run(["docker", "rmi", image_tag], check=False)