- 新增 STARTUP_BOOTSTRAP_ENABLED / STARTUP_CACHE_WARMUP_ENABLED 配置开关 - lifespan 拆分 bootstrap 步骤并后台线程预热缓存,失败可降级继续启动 - server_start.sh / web_start.sh 扩展 SERVER_PORT、启动与调度开关的 env 覆盖 - bootstrap_paddleocr_mobile.sh 改用 python3 并补充 poppler-utils 依赖 - 补充启动 bootstrap 与 env 覆盖优先级测试
142 lines
4.8 KiB
Python
142 lines
4.8 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import os
|
|
import subprocess
|
|
|
|
|
|
def _run_script_prefix(
|
|
tmp_path: Path,
|
|
relative_script_path: str,
|
|
env_file_content: str,
|
|
env: dict[str, str],
|
|
output_vars: list[str],
|
|
) -> subprocess.CompletedProcess[str]:
|
|
project_dir = tmp_path / "project"
|
|
script_source = Path(__file__).resolve().parents[2] / relative_script_path
|
|
script_copy = project_dir / relative_script_path
|
|
script_copy.parent.mkdir(parents=True, exist_ok=True)
|
|
script_copy.write_text(script_source.read_text(encoding="utf-8"), encoding="utf-8")
|
|
(project_dir / ".env").write_text(env_file_content, encoding="utf-8")
|
|
|
|
script_prefix = script_copy.read_text(encoding="utf-8").split('case "$MODE" in', 1)[0]
|
|
print_lines = "\n".join(f'printf "{name}=%s\\n" "${{{name}:-}}"' for name in output_vars)
|
|
command = f"""{script_prefix}
|
|
{print_lines}
|
|
"""
|
|
|
|
return subprocess.run(
|
|
["bash", "-c", command, str(script_copy)],
|
|
capture_output=True,
|
|
text=True,
|
|
env={**os.environ, **env, "MODE": "test"},
|
|
cwd=script_copy.parent,
|
|
check=False,
|
|
)
|
|
|
|
|
|
def test_server_start_can_prefer_env_file_over_inherited_onlyoffice_values(tmp_path: Path) -> None:
|
|
result = _run_script_prefix(
|
|
tmp_path,
|
|
"server/server_start.sh",
|
|
env_file_content=(
|
|
"ONLYOFFICE_ENABLED=true\n"
|
|
"ONLYOFFICE_PUBLIC_URL=http://10.10.10.122:8082\n"
|
|
"ONLYOFFICE_BACKEND_URL=http://main:8000\n"
|
|
"ONLYOFFICE_JWT_SECRET=change-me-onlyoffice\n"
|
|
),
|
|
env={
|
|
"ONLYOFFICE_ENABLED": "false",
|
|
"ONLYOFFICE_PUBLIC_URL": "http://127.0.0.1:8082",
|
|
"X_FINANCIAL_PREFER_ENV_FILE": "true",
|
|
},
|
|
output_vars=["ONLYOFFICE_ENABLED", "ONLYOFFICE_PUBLIC_URL"],
|
|
)
|
|
|
|
assert result.returncode == 0, result.stderr
|
|
assert "ONLYOFFICE_ENABLED=true" in result.stdout
|
|
assert "ONLYOFFICE_PUBLIC_URL=http://10.10.10.122:8082" in result.stdout
|
|
|
|
|
|
def test_root_start_can_prefer_env_file_over_inherited_onlyoffice_values(tmp_path: Path) -> None:
|
|
result = _run_script_prefix(
|
|
tmp_path,
|
|
"start.sh",
|
|
env_file_content=(
|
|
"ONLYOFFICE_ENABLED=true\n"
|
|
"ONLYOFFICE_PUBLIC_URL=http://10.10.10.122:8082\n"
|
|
"ONLYOFFICE_BACKEND_URL=http://main:8000\n"
|
|
"ONLYOFFICE_JWT_SECRET=change-me-onlyoffice\n"
|
|
),
|
|
env={
|
|
"ONLYOFFICE_ENABLED": "false",
|
|
"ONLYOFFICE_PUBLIC_URL": "http://127.0.0.1:8082",
|
|
"X_FINANCIAL_PREFER_ENV_FILE": "true",
|
|
},
|
|
output_vars=["ONLYOFFICE_ENABLED", "ONLYOFFICE_PUBLIC_URL"],
|
|
)
|
|
|
|
assert result.returncode == 0, result.stderr
|
|
assert "ONLYOFFICE_ENABLED=true" in result.stdout
|
|
assert "ONLYOFFICE_PUBLIC_URL=http://10.10.10.122:8082" in result.stdout
|
|
|
|
|
|
def test_web_start_preserves_inherited_runtime_ports(tmp_path: Path) -> None:
|
|
result = _run_script_prefix(
|
|
tmp_path,
|
|
"web/web_start.sh",
|
|
env_file_content=(
|
|
"WEB_HOST=10.10.10.122\n"
|
|
"WEB_PORT=5273\n"
|
|
"SERVER_HOST=10.10.10.122\n"
|
|
"SERVER_PORT=9000\n"
|
|
"POSTGRES_HOST=10.10.10.189\n"
|
|
),
|
|
env={
|
|
"WEB_HOST": "0.0.0.0",
|
|
"WEB_PORT": "5173",
|
|
"SERVER_HOST": "0.0.0.0",
|
|
"SERVER_PORT": "8000",
|
|
"POSTGRES_HOST": "www.caoxiaozhu.com",
|
|
},
|
|
output_vars=["WEB_HOST", "WEB_PORT", "SERVER_HOST", "SERVER_PORT", "POSTGRES_HOST"],
|
|
)
|
|
|
|
assert result.returncode == 0, result.stderr
|
|
assert "WEB_HOST=0.0.0.0" in result.stdout
|
|
assert "WEB_PORT=5173" in result.stdout
|
|
assert "SERVER_HOST=0.0.0.0" in result.stdout
|
|
assert "SERVER_PORT=8000" in result.stdout
|
|
assert "POSTGRES_HOST=www.caoxiaozhu.com" in result.stdout
|
|
|
|
|
|
def test_server_start_preserves_inherited_runtime_guards(tmp_path: Path) -> None:
|
|
result = _run_script_prefix(
|
|
tmp_path,
|
|
"server/server_start.sh",
|
|
env_file_content=(
|
|
"SERVER_HOST=10.10.10.122\n"
|
|
"SERVER_PORT=9000\n"
|
|
"STARTUP_BOOTSTRAP_ENABLED=true\n"
|
|
"BACKGROUND_SCHEDULERS_ENABLED=true\n"
|
|
),
|
|
env={
|
|
"SERVER_HOST": "0.0.0.0",
|
|
"SERVER_PORT": "8000",
|
|
"STARTUP_BOOTSTRAP_ENABLED": "false",
|
|
"BACKGROUND_SCHEDULERS_ENABLED": "false",
|
|
},
|
|
output_vars=[
|
|
"SERVER_HOST",
|
|
"SERVER_PORT",
|
|
"STARTUP_BOOTSTRAP_ENABLED",
|
|
"BACKGROUND_SCHEDULERS_ENABLED",
|
|
],
|
|
)
|
|
|
|
assert result.returncode == 0, result.stderr
|
|
assert "SERVER_HOST=0.0.0.0" in result.stdout
|
|
assert "SERVER_PORT=8000" in result.stdout
|
|
assert "STARTUP_BOOTSTRAP_ENABLED=false" in result.stdout
|
|
assert "BACKGROUND_SCHEDULERS_ENABLED=false" in result.stdout
|