"""Connection-pool benchmarks — measure the cost of pool acquire/release vs. fresh connect. The win on the pool side is *avoiding the login handshake*. Cold connect to Informix is ~5-15ms (server-side auth + protocol negotiation). Pool acquire is ~50-200µs (validation only). The benchmark makes that delta visible. """ from __future__ import annotations import pytest import informix_db from informix_db.pool import ConnectionPool, create_pool from tests.conftest import ConnParams pytestmark = [pytest.mark.benchmark, pytest.mark.integration] @pytest.fixture(scope="module") def pool(conn_params: ConnParams): """Module-scoped pool kept warm across the bench file.""" p = create_pool( host=conn_params.host, port=conn_params.port, user=conn_params.user, password=conn_params.password, database=conn_params.database, server=conn_params.server, autocommit=True, min_size=2, max_size=10, ) try: yield p finally: p.close() def test_cold_connect_disconnect(benchmark, conn_params: ConnParams) -> None: """Full login handshake + close per call — the worst case.""" def run() -> None: conn = informix_db.connect( host=conn_params.host, port=conn_params.port, user=conn_params.user, password=conn_params.password, database=conn_params.database, server=conn_params.server, autocommit=True, ) conn.close() # Cold-connect is slow (~10ms); cap at 5 rounds, no per-round iteration benchmark.pedantic(run, rounds=5, iterations=1) def test_pool_acquire_release(benchmark, pool: ConnectionPool) -> None: """Pool acquire+release — the steady-state cost of a pooled query.""" def run() -> None: with pool.connection() as _conn: pass benchmark(run) def test_pool_acquire_query_release( benchmark, pool: ConnectionPool ) -> None: """Realistic per-query cost: acquire, run a tiny query, release.""" def run() -> object: with pool.connection() as conn: cur = conn.cursor() cur.execute("SELECT 1 FROM systables WHERE tabid = 1") row = cur.fetchone() cur.close() return row benchmark(run)