Skip to content

ci: multi-transport SQL E2E (subprocess + http + unix)#1

Merged
rustyconover merged 2 commits into
mainfrom
ci/multi-transport-sql-e2e
Jun 24, 2026
Merged

ci: multi-transport SQL E2E (subprocess + http + unix)#1
rustyconover merged 2 commits into
mainfrom
ci/multi-transport-sql-e2e

Conversation

@rustyconover

Copy link
Copy Markdown
Contributor

Adds multi-transport coverage to the haybarn SQL E2E suite (test/sql/*.test).
Previously it ran only over subprocess/stdio. The vgi extension picks its
transport from the worker LOCATION, so the same suite now runs once per
transport via a CI matrix.

  • ci/run-integration.sh is parameterized by TRANSPORT (subprocess|http|unix).
    • http: boots java -jar <jar> --http --host 127.0.0.1 --port 18110, waits
      for GET /health 200, sets VGI_ICAL_WORKER=http://127.0.0.1:18110.
    • unix: boots java -jar <jar> --unix <sock>, waits for the socket, sets
      VGI_ICAL_WORKER=unix://<sock>.
    • For http/unix the worker is started by the script (not DuckDB), launched with
      cwd = the stage dir so relative test/sql/data/*.ics fixtures resolve.
    • Worker is trap-killed on exit; the warm INSTALL vgi FROM community step is kept.
  • test.yml: integration job becomes strategy.matrix.transport: [subprocess, http, unix],
    named SQL E2E (<transport>). Unit/build/lint + boot smoke test untouched.
  • ci/README.md: documents the matrix, the vgi Java SDK --http/--host/--port
    (+ /health, PORT:<n>) and --unix flags, and fixture/cwd handling.

Local validation: subprocess GREEN (43 assertions), unix GREEN (43 assertions).
The http leg is validated on the Linux CI runner (a local haybarn-unittest
masks it via a built-in skip on error_message matching 'HTTP' rule; the worker
itself serves /health and the RPC /init endpoint correctly).

🤖 Generated with Claude Code

rustyconover and others added 2 commits June 23, 2026 19:57
The haybarn sqllogictest suite (test/sql/*.test) previously ran only over the
subprocess/stdio transport. The vgi extension picks its transport from the
worker LOCATION string, so the same suite exercises a different transport just
by changing what VGI_ICAL_WORKER resolves to.

- ci/run-integration.sh: parameterize by TRANSPORT (subprocess|http|unix).
  * http: boot `java -jar <jar> --http --host 127.0.0.1 --port <p>`, wait for
    GET /health to return 200, set VGI_ICAL_WORKER=http://127.0.0.1:<p>.
  * unix: boot `java -jar <jar> --unix <sock>`, wait for the socket to appear,
    set VGI_ICAL_WORKER=unix://<sock>.
  For http/unix the worker is started by the script (not DuckDB), so it is
  launched with cwd = the stage dir where the committed .ics fixtures live, so
  the relative `test/sql/data/*.ics` paths resolve identically to subprocess.
  trap-kill the worker on exit. Keep the warm `INSTALL vgi FROM community` step.
- test.yml: turn the integration job into a transport matrix
  (subprocess, http, unix), named "SQL E2E (<transport>)". Unit/build/lint and
  the boot smoke test are untouched.
- ci/README.md: document the transport matrix, the worker --http/--host/--port
  (+ /health, PORT:<n>) and --unix flags from the vgi Java SDK, fixture/cwd
  handling, and the haybarn "skip on error_message matching 'HTTP'" caveat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… suite)

The vgi extension's HTTP worker transport uses DuckDB's HTTP client, which lives
in the httpfs extension; without it, ATTACH over an http:// LOCATION raises
"VGI HTTP transport requires the httpfs extension". On the standalone
haybarn-unittest runner, auto-load/auto-install is off, so httpfs must be
installed and loaded explicitly.

Before this fix the http matrix leg was GREEN but DECEPTIVE: every test was
silently skipped. Some haybarn-unittest builds carry a built-in
`skip on error_message matching 'HTTP'` rule, and the httpfs-missing
BinderException contains the substring "HTTP", so the runner skipped the whole
suite instead of failing it ("All tests were skipped (total skipped 3)").

Fix:
- test/sql/*.test: add `require httpfs` (preprocess-require.awk already rewrites
  it to `INSTALL httpfs FROM core; LOAD httpfs;`). httpfs is a no-op for the
  subprocess/unix transports, keeping the suite transport-agnostic.
- run-integration.sh: also warm `INSTALL httpfs FROM core` alongside vgi.
- ci/README.md: document the httpfs requirement and the silent-skip trap.

Verified locally: subprocess / http / unix all "All tests passed (49 assertions
in 3 test cases)" — http now genuinely runs the suite rather than skipping it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rustyconover rustyconover merged commit 538936f into main Jun 24, 2026
5 checks passed
@rustyconover rustyconover deleted the ci/multi-transport-sql-e2e branch June 24, 2026 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant