| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from __future__ import annotations
- import pytest
- from pydantic import ValidationError
- from supply_infra.config import InfraSettings
- def _settings(**overrides: object) -> InfraSettings:
- values: dict[str, object] = {
- "PROCESS_ROLE": "api",
- "MYSQL_CONNECTION_BUDGET": 40,
- "MYSQL_POOL_SIZE_API": 6,
- "MYSQL_POOL_SIZE_CONTROL": 1,
- "MYSQL_OPERATIONAL_RESERVE": 4,
- "MYSQL_MAX_OVERFLOW": 0,
- "PIPELINE_WORKER_PROCESSES": 4,
- "PIPELINE_MAX_ACTIVE_STEPS": 4,
- }
- values.update(overrides)
- return InfraSettings(_env_file=None, **values)
- def test_standard_connection_profile_uses_twenty_of_forty() -> None:
- settings = _settings()
- assert settings.pipeline_required_connections == 20
- assert settings.mysql_connection_budget == 40
- def test_high_concurrency_profile_stays_within_fifty() -> None:
- settings = _settings(
- MYSQL_CONNECTION_BUDGET=50,
- PIPELINE_WORKER_PROCESSES=20,
- PIPELINE_MAX_ACTIVE_STEPS=10,
- )
- assert settings.pipeline_required_connections == 42
- def test_connection_budget_rejects_unbounded_twenty_by_twenty() -> None:
- with pytest.raises(ValidationError, match="connection budget exceeded"):
- _settings(
- MYSQL_CONNECTION_BUDGET=50,
- PIPELINE_WORKER_PROCESSES=20,
- PIPELINE_MAX_ACTIVE_STEPS=20,
- )
- def test_pool_overflow_must_remain_zero() -> None:
- with pytest.raises(ValidationError, match="MYSQL_MAX_OVERFLOW"):
- _settings(MYSQL_MAX_OVERFLOW=1)
|