test_bootstrap.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import pytest
  2. from app.runner.bootstrap import runner_settings_from_env
  3. def test_runner_settings_require_signing_secret_and_explicit_dependencies(
  4. monkeypatch,
  5. ):
  6. required = {
  7. "DATABASE_URL": "postgresql://platform",
  8. "NEO4J_URI": "bolt://neo4j:7687",
  9. "NEO4J_USER": "neo4j",
  10. "NEO4J_PASSWORD": "test",
  11. "DATASOURCE_CREDENTIAL_MASTER_KEY": (
  12. "MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWY="
  13. ),
  14. "DATASOURCE_CREDENTIAL_KEY_VERSION": "v1",
  15. "RUNNER_TASK_TOKEN_SECRET": "x" * 32,
  16. "RUNNER_HTTP_ALLOWED_HOSTS": "events.internal, audit.internal",
  17. "RUNNER_MINIO_HOST": "minio:9000",
  18. "RUNNER_MINIO_USER": "runner-test",
  19. "RUNNER_MINIO_PASSWORD": "runner-test-password",
  20. "RUNNER_MINIO_BUCKET": "dataops-rules",
  21. }
  22. for key, value in required.items():
  23. monkeypatch.setenv(key, value)
  24. settings = runner_settings_from_env()
  25. assert settings.runtime.pool_size == 1
  26. assert settings.runtime.max_overflow == 1
  27. assert settings.runtime.max_idle_pools == 4
  28. assert settings.allowed_http_hosts == {
  29. "events.internal",
  30. "audit.internal",
  31. }
  32. assert settings.artifact_bucket == "dataops-rules"
  33. assert "postgresql://platform" not in repr(settings)
  34. assert required["RUNNER_TASK_TOKEN_SECRET"] not in repr(settings)
  35. assert required["RUNNER_MINIO_PASSWORD"] not in repr(settings)
  36. def test_runner_refuses_to_start_without_a_task_token_secret(monkeypatch):
  37. monkeypatch.delenv("RUNNER_TASK_TOKEN_SECRET", raising=False)
  38. with pytest.raises(ValueError, match="RUNNER_TASK_TOKEN_SECRET"):
  39. runner_settings_from_env()