You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Suite runs in ~0.5s with no DuckDB engine, network, or docker — wired into CI as the Backend tests (pytest) job and added to the required status checks on main.
The two items from the original scope that didn't land here:
Connection / query happy path against local MinIO — currently covered by manual docker compose up --build verification on every PR touching the query path. If we want this hermetic in CI, better scoped as a follow-up (needs MinIO service container + pyiceberg seeding in the GitHub Actions runner).
Activity
ci: add GitHub Actions workflow for lint and docker build
ci: add GitHub Actions workflow for lint and docker build (#19)
test(backend): add pytest suite for validators and converters
Use a per-request DuckDB connection (#24)
gordonmurray commentedon Apr 15, 2026
Pytest suite shipped in PR #24 with 35 unit tests covering the highest-risk guards:
_validate_and_limit_sql(sqlglot SELECT-only validator, LIMIT injection, multi-statement rejection)_convert_to_iceberg_query(read_parquet rewriting, REST catalog refs)ConnectionConfigPydantic validators (SQL injection attempts, control chars, /metadata stripping, identifier patterns)_sql_string_literal(quote doubling, control-char rejection)Suite runs in ~0.5s with no DuckDB engine, network, or docker — wired into CI as the
Backend tests (pytest)job and added to the required status checks onmain.The two items from the original scope that didn't land here:
docker compose up --buildverification on every PR touching the query path. If we want this hermetic in CI, better scoped as a follow-up (needs MinIO service container + pyiceberg seeding in the GitHub Actions runner)._limit_query— deleted in PR fix(security): replace naive SQL validator with sqlglot AST check #23; replaced by_validate_and_limit_sqlwhich is fully covered.Closing as substantively done. Additional coverage will land with #25 (metrics) and #26 (probing) — both of those already have red tests driving them.