Skip to content

CI: multi-transport SQL E2E (subprocess, http, unix)#5

Merged
rustyconover merged 1 commit into
mainfrom
multi-transport-sql-ci
Jun 24, 2026
Merged

CI: multi-transport SQL E2E (subprocess, http, unix)#5
rustyconover merged 1 commit into
mainfrom
multi-transport-sql-ci

Conversation

@rustyconover

Copy link
Copy Markdown
Contributor

Adds HTTP and launcher(unix) transport coverage to the haybarn SQL E2E suite, which previously ran only over subprocess/stdio. The same test/sql/*.test files now run three ways via an os × transport matrix; only the ATTACH LOCATION differs.

Per-transport status (verified locally)

  • subprocess: GREEN (44 assertions)
  • http: GREEN (48 assertions — +httpfs INSTALL/LOAD per file)
  • unix: GREEN (44 assertions)

How each transport is launched / discovered

  • http: units-worker --http binds an ephemeral loopback port and prints PORT:<n> to stdout; the script polls the log for it, then VGI_UNITS_WORKER=http://127.0.0.1:<port>.
  • unix: units-worker --unix /tmp/units.<pid>.sock prints UNIX:<sock> and creates the socket; the script waits for both, then VGI_UNITS_WORKER=unix:///tmp/units.<pid>.sock.
  • cargo feature: none needed — the workspace already pins vgi-rpc = { features = ["macros","http"] }, so a plain cargo build --release serves all three.

Failure found + resolved

The http leg's ATTACH failed with Binder Error: VGI HTTP transport requires the httpfs extension. Because that message contains the substring HTTP, DuckDB's sqllogictest runner (default ignore_error_messages = {"HTTP","Unable to connect"}) silently SKIPPED the tests — exit 0, "All tests were skipped" — a deceptive pass. Resolved by injecting a signed INSTALL httpfs FROM core; LOAD httpfs; (via preprocess-require.awk -v transport=http) and hardening run-integration.sh to fail on ANY skipped test.

The fmt/clippy/build/unit (and rustdoc/sccache) jobs and the warm INSTALL vgi FROM community step are untouched.

🤖 Generated with Claude Code

The haybarn sqllogictest suite previously ran only over subprocess/stdio.
Parameterize ci/run-integration.sh by TRANSPORT and turn the integration
job into an os x transport matrix so the SAME test/sql/*.test files run
three ways, differing only in the ATTACH LOCATION:

  subprocess  units-worker binary (DuckDB spawns it; default, unchanged)
  http        units-worker --http  -> http://127.0.0.1:<port>
              (auto port; worker prints PORT:<n> on stdout, polled for readiness)
  unix        units-worker --unix <sock> -> unix:///<sock>
              (worker prints UNIX:<sock> + creates the socket; waited for)

The single release binary serves all three transports: the workspace
already pins vgi-rpc with the "http" feature, so no extra cargo feature
is needed.

http leg: the vgi extension's HTTP client requires DuckDB's httpfs.
Without it ATTACH fails with a Binder Error whose text contains "HTTP" --
and DuckDB's sqllogictest runner silently SKIPs any test whose error
matches its default ignore list {"HTTP","Unable to connect"}, so a
missing httpfs masquerades as a pass-by-skip. Fixed two ways:
  - preprocess-require.awk (-v transport=http) injects a signed
    INSTALL httpfs FROM core; LOAD httpfs; after each LOAD vgi;
  - run-integration.sh now fails if ANY test is skipped (a skip is not
    a pass), guarding against this and future silent-skip masking.

Keeps the warm INSTALL vgi FROM community step and leaves the
fmt/clippy/build/unit jobs untouched. Adds make test-sql-{subprocess,
http,unix} mirroring the matrix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rustyconover rustyconover merged commit 6493292 into main Jun 24, 2026
8 checks passed
@rustyconover rustyconover deleted the multi-transport-sql-ci branch June 24, 2026 00:08
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