fix(docker): manage local postgres in default compose
This commit is contained in:
@@ -90,6 +90,10 @@ fi
|
||||
ENV_OVERRIDE_SERVER_HOST_SET=false
|
||||
ENV_OVERRIDE_SERVER_PORT_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_HOST_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_PORT_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_DB_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_USER_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_PASSWORD_SET=false
|
||||
ENV_OVERRIDE_DATABASE_URL_SET=false
|
||||
ENV_OVERRIDE_STARTUP_BOOTSTRAP_ENABLED_SET=false
|
||||
ENV_OVERRIDE_BACKGROUND_SCHEDULERS_ENABLED_SET=false
|
||||
@@ -120,6 +124,26 @@ if [ "${POSTGRES_HOST+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_HOST="$POSTGRES_HOST"
|
||||
fi
|
||||
|
||||
if [ "${POSTGRES_PORT+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_PORT_SET=true
|
||||
ENV_OVERRIDE_POSTGRES_PORT="$POSTGRES_PORT"
|
||||
fi
|
||||
|
||||
if [ "${POSTGRES_DB+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_DB_SET=true
|
||||
ENV_OVERRIDE_POSTGRES_DB="$POSTGRES_DB"
|
||||
fi
|
||||
|
||||
if [ "${POSTGRES_USER+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_USER_SET=true
|
||||
ENV_OVERRIDE_POSTGRES_USER="$POSTGRES_USER"
|
||||
fi
|
||||
|
||||
if [ "${POSTGRES_PASSWORD+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_PASSWORD_SET=true
|
||||
ENV_OVERRIDE_POSTGRES_PASSWORD="$POSTGRES_PASSWORD"
|
||||
fi
|
||||
|
||||
if [ "${DATABASE_URL+x}" = x ]; then
|
||||
ENV_OVERRIDE_DATABASE_URL_SET=true
|
||||
ENV_OVERRIDE_DATABASE_URL="$DATABASE_URL"
|
||||
@@ -171,6 +195,22 @@ if [ "$ENV_OVERRIDE_POSTGRES_HOST_SET" = true ]; then
|
||||
POSTGRES_HOST="$ENV_OVERRIDE_POSTGRES_HOST"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_POSTGRES_PORT_SET" = true ]; then
|
||||
POSTGRES_PORT="$ENV_OVERRIDE_POSTGRES_PORT"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_POSTGRES_DB_SET" = true ]; then
|
||||
POSTGRES_DB="$ENV_OVERRIDE_POSTGRES_DB"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_POSTGRES_USER_SET" = true ]; then
|
||||
POSTGRES_USER="$ENV_OVERRIDE_POSTGRES_USER"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_POSTGRES_PASSWORD_SET" = true ]; then
|
||||
POSTGRES_PASSWORD="$ENV_OVERRIDE_POSTGRES_PASSWORD"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_DATABASE_URL_SET" = true ]; then
|
||||
DATABASE_URL="$ENV_OVERRIDE_DATABASE_URL"
|
||||
fi
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def _run_script_prefix(
|
||||
@@ -81,6 +81,46 @@ def test_root_start_can_prefer_env_file_over_inherited_onlyoffice_values(tmp_pat
|
||||
assert "ONLYOFFICE_PUBLIC_URL=http://10.10.10.122:8082" in result.stdout
|
||||
|
||||
|
||||
def test_root_start_preserves_inherited_database_runtime_values(tmp_path: Path) -> None:
|
||||
result = _run_script_prefix(
|
||||
tmp_path,
|
||||
"start.sh",
|
||||
env_file_content=(
|
||||
"POSTGRES_HOST=external-db\n"
|
||||
"POSTGRES_PORT=6432\n"
|
||||
"POSTGRES_DB=external_financial\n"
|
||||
"POSTGRES_USER=external_user\n"
|
||||
"POSTGRES_PASSWORD=external_password\n"
|
||||
"DATABASE_URL=postgresql://external_user:external_password@external-db:6432/external_financial\n"
|
||||
),
|
||||
env={
|
||||
"POSTGRES_HOST": "postgres",
|
||||
"POSTGRES_PORT": "5432",
|
||||
"POSTGRES_DB": "x_financial",
|
||||
"POSTGRES_USER": "x_financial",
|
||||
"POSTGRES_PASSWORD": "x_financial",
|
||||
"DATABASE_URL": "postgresql://x_financial:x_financial@postgres:5432/x_financial",
|
||||
},
|
||||
output_vars=[
|
||||
"POSTGRES_HOST",
|
||||
"POSTGRES_PORT",
|
||||
"POSTGRES_DB",
|
||||
"POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD",
|
||||
"DATABASE_URL",
|
||||
],
|
||||
)
|
||||
|
||||
assert result.returncode == 0, result.stderr
|
||||
assert "POSTGRES_HOST=postgres" in result.stdout
|
||||
assert "POSTGRES_PORT=5432" in result.stdout
|
||||
assert "POSTGRES_DB=x_financial" in result.stdout
|
||||
assert "POSTGRES_USER=x_financial" in result.stdout
|
||||
assert "POSTGRES_PASSWORD=x_financial" in result.stdout
|
||||
expected_database_url = "postgresql://x_financial:x_financial@postgres:5432/x_financial"
|
||||
assert f"DATABASE_URL={expected_database_url}" in result.stdout
|
||||
|
||||
|
||||
def test_web_start_preserves_inherited_runtime_ports(tmp_path: Path) -> None:
|
||||
result = _run_script_prefix(
|
||||
tmp_path,
|
||||
@@ -139,3 +179,59 @@ def test_server_start_preserves_inherited_runtime_guards(tmp_path: Path) -> None
|
||||
assert "SERVER_PORT=8000" in result.stdout
|
||||
assert "STARTUP_BOOTSTRAP_ENABLED=false" in result.stdout
|
||||
assert "BACKGROUND_SCHEDULERS_ENABLED=false" in result.stdout
|
||||
|
||||
|
||||
def test_server_start_preserves_inherited_database_runtime_values(tmp_path: Path) -> None:
|
||||
result = _run_script_prefix(
|
||||
tmp_path,
|
||||
"server/server_start.sh",
|
||||
env_file_content=(
|
||||
"POSTGRES_HOST=external-db\n"
|
||||
"POSTGRES_PORT=6432\n"
|
||||
"POSTGRES_DB=external_financial\n"
|
||||
"POSTGRES_USER=external_user\n"
|
||||
"POSTGRES_PASSWORD=external_password\n"
|
||||
"DATABASE_URL=postgresql://external_user:external_password@external-db:6432/external_financial\n"
|
||||
),
|
||||
env={
|
||||
"POSTGRES_HOST": "postgres",
|
||||
"POSTGRES_PORT": "5432",
|
||||
"POSTGRES_DB": "x_financial",
|
||||
"POSTGRES_USER": "x_financial",
|
||||
"POSTGRES_PASSWORD": "x_financial",
|
||||
"DATABASE_URL": "postgresql://x_financial:x_financial@postgres:5432/x_financial",
|
||||
},
|
||||
output_vars=[
|
||||
"POSTGRES_HOST",
|
||||
"POSTGRES_PORT",
|
||||
"POSTGRES_DB",
|
||||
"POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD",
|
||||
"DATABASE_URL",
|
||||
],
|
||||
)
|
||||
|
||||
assert result.returncode == 0, result.stderr
|
||||
assert "POSTGRES_HOST=postgres" in result.stdout
|
||||
assert "POSTGRES_PORT=5432" in result.stdout
|
||||
assert "POSTGRES_DB=x_financial" in result.stdout
|
||||
assert "POSTGRES_USER=x_financial" in result.stdout
|
||||
assert "POSTGRES_PASSWORD=x_financial" in result.stdout
|
||||
expected_database_url = "postgresql://x_financial:x_financial@postgres:5432/x_financial"
|
||||
assert f"DATABASE_URL={expected_database_url}" in result.stdout
|
||||
|
||||
|
||||
def test_default_compose_isolates_local_postgres_from_external_env_values() -> None:
|
||||
compose = (Path(__file__).resolve().parents[2] / "docker-compose.yml").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "condition: service_healthy" in compose
|
||||
assert "container_name: x-financial-local-postgres" in compose
|
||||
assert "${LOCAL_POSTGRES_DB:-x_financial}" in compose
|
||||
assert "${LOCAL_POSTGRES_USER:-x_financial}" in compose
|
||||
assert "${LOCAL_POSTGRES_PASSWORD:-x_financial}" in compose
|
||||
assert "${LOCAL_POSTGRES_HOST_PORT:-55432}" in compose
|
||||
assert "${POSTGRES_DB:-x_financial}" not in compose
|
||||
assert "${POSTGRES_USER:-x_financial}" not in compose
|
||||
assert "${POSTGRES_PASSWORD:-x_financial}" not in compose
|
||||
|
||||
Reference in New Issue
Block a user