| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- from pathlib import Path
- ROOT = Path(__file__).resolve().parents[1]
- COMPOSE = ROOT / "deploy/docker/docker-compose.yml"
- def test_local_compose_defines_the_isolated_stack():
- source = COMPOSE.read_text(encoding="utf-8")
- for service in (
- "postgres:",
- "source-postgres:",
- "source-mysql:",
- "neo4j:",
- "minio:",
- "minio-init:",
- "n8n:",
- "backend:",
- "frontend:",
- ):
- assert service in source
- assert "name: dataops-test" in source
- assert "dataops-test-net" in source
- assert "healthcheck:" in source
- assert "DATABASE_URL: postgresql://" in source
- assert "NEO4J_URI: bolt://neo4j:7687" in source
- assert "MINIO_HOST: minio:9000" in source
- assert "N8N_API_URL: http://n8n:5678" in source
- assert "DATASOURCE_CREDENTIAL_MASTER_KEY:" in source
- assert "dataops-test-source-postgres:" in source
- assert "dataops-test-source-mysql:" in source
- assert "import urllib.request" in source
- def test_local_compose_and_n8n_client_have_no_production_fallbacks():
- sources = [
- COMPOSE.read_text(encoding="utf-8"),
- (ROOT / "app/config/config.py").read_text(encoding="utf-8"),
- (ROOT / "app/core/data_factory/n8n_client.py").read_text(encoding="utf-8"),
- ]
- forbidden = (
- "n8n.citupro.com",
- "company.citupro.com",
- "192.168.3.143",
- "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- )
- local_sources = "\n".join(sources)
- for value in forbidden:
- assert value not in local_sources
- def test_active_source_has_no_hardcoded_nonlocal_service_addresses():
- source_files = [
- *sorted((ROOT / "app").rglob("*.py")),
- *sorted((ROOT / "frontend" / "src").rglob("*.js")),
- *sorted((ROOT / "frontend" / "src").rglob("*.vue")),
- *sorted((ROOT / "frontend").glob(".env.*")),
- ]
- active_source = "\n".join(
- path.read_text(encoding="utf-8") for path in source_files
- )
- for value in (
- "n8n.citupro.com",
- "minio.citupro.com",
- "192.168.3.143",
- "192.168.3.91",
- "115.128.14.14",
- ):
- assert value not in active_source
- def test_docker_images_build_from_source_directories_only():
- backend = (ROOT / "deploy/docker/backend.Dockerfile").read_text(encoding="utf-8")
- frontend = (ROOT / "deploy/docker/frontend.Dockerfile").read_text(encoding="utf-8")
- assert "COPY app/" in backend
- assert "COPY migrations/" in backend
- assert "COPY alembic.ini" in backend
- assert "alembic -c alembic.ini upgrade head" in backend
- assert "deployment/app" not in backend
- assert "gcc" in backend
- assert "libc6-dev" in backend
- assert "linux-libc-dev" in backend
- assert "apt-get purge" in backend
- assert "FROM node:24" in frontend
- assert "npm ci" in frontend
- assert (ROOT / "wsgi.py").is_file()
- def test_postgres_bootstrap_reuses_source_ddl_without_reversible_local_user():
- bootstrap = (ROOT / "deploy/docker/postgres/init/000-init.sql").read_text(
- encoding="utf-8"
- )
- for ddl in sorted((ROOT / "database").glob("*.sql")):
- assert f"/dataops-schema/{ddl.name}" in bootstrap
- assert "CREATE DATABASE n8n" in bootstrap
- assert "CREATE EXTENSION IF NOT EXISTS vector" in bootstrap
- assert not (ROOT / "deploy/docker/postgres/init/010-local-test-user.sql").exists()
- readme = (ROOT / "deploy/docker/README.md").read_text(encoding="utf-8")
- assert "app.commands.bootstrap_admin" in readme
|