65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
from pathlib import Path
|
|
|
|
import yaml
|
|
from django.conf import settings
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
|
|
|
|
def test_only_web_runs_migrations_in_compose() -> None:
|
|
compose = yaml.safe_load((ROOT / "docker-compose.yml").read_text(encoding="utf-8"))
|
|
services = compose["services"]
|
|
|
|
assert services["web"].get("environment", {}).get("VACATURERADAR_RUN_MIGRATIONS", "1") == "1"
|
|
assert services["worker"]["environment"]["VACATURERADAR_RUN_MIGRATIONS"] == "0"
|
|
assert services["scheduler"]["environment"]["VACATURERADAR_RUN_MIGRATIONS"] == "0"
|
|
|
|
|
|
def test_unraid_uses_one_dockerman_container_with_ui_metadata() -> None:
|
|
compose = yaml.safe_load((ROOT / "docker-compose.unraid.yml").read_text(encoding="utf-8"))
|
|
|
|
assert list(compose["services"]) == ["app"]
|
|
labels = compose["services"]["app"]["labels"]
|
|
assert labels["net.unraid.docker.managed"] == "dockerman"
|
|
assert labels["net.unraid.docker.webui"].endswith(":8080]/")
|
|
assert labels["net.unraid.docker.icon"].endswith("/static/favicon.svg")
|
|
|
|
dockerfile = (ROOT / "Dockerfile.unraid").read_text(encoding="utf-8")
|
|
entrypoint = (ROOT / "scripts" / "unraid_aio_entrypoint.sh").read_text(encoding="utf-8")
|
|
assert "python:3.13-slim-trixie" in dockerfile
|
|
assert "postgres-aio17" in entrypoint
|
|
assert "command -v pg_config" in entrypoint
|
|
|
|
|
|
def test_runtime_is_compatible_with_read_only_container() -> None:
|
|
dockerfile = (ROOT / "Dockerfile").read_text(encoding="utf-8")
|
|
deploy_script = (ROOT / "scripts" / "deploy_docker.sh").read_text(encoding="utf-8")
|
|
|
|
assert '"--no-control-socket"' in dockerfile
|
|
assert "exec -T web python manage.py collectstatic" not in deploy_script
|
|
assert "for required_host in 127.0.0.1 localhost" in deploy_script
|
|
|
|
|
|
def test_celery_default_queue_is_consumed_by_worker() -> None:
|
|
compose = yaml.safe_load((ROOT / "docker-compose.yml").read_text(encoding="utf-8"))
|
|
worker_command = compose["services"]["worker"]["command"]
|
|
|
|
assert settings.CELERY_TASK_DEFAULT_QUEUE == "default"
|
|
queue_index = worker_command.index("-Q") + 1
|
|
assert "default" in worker_command[queue_index].split(",")
|
|
|
|
|
|
def test_deployment_examples_use_per_platform_mailbox_configuration() -> None:
|
|
required_keys = {
|
|
"MAILBOX_CREDENTIAL_KEYS",
|
|
"IMAP_CONNECT_TIMEOUT_SECONDS",
|
|
"IMAP_MAX_MESSAGES_PER_POLL",
|
|
"IMAP_MAX_MESSAGE_BYTES",
|
|
}
|
|
for filename in (".env.example", "scripts/codex_bootstrap.sh", "scripts/release_verify.sh"):
|
|
content = (ROOT / filename).read_text(encoding="utf-8")
|
|
|
|
assert "IMAP_ENABLED" not in content
|
|
for key in required_keys:
|
|
assert f"{key}=" in content
|