From 7a3e248b3371ebef056b9e7135d60578e72c6a18 Mon Sep 17 00:00:00 2001 From: Rusty Conover Date: Fri, 11 Sep 2026 11:18:37 -0400 Subject: [PATCH] Run integration through the worker launcher --- ci/README.md | 12 ++++++------ ci/run-integration.sh | 18 ++++++++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ci/README.md b/ci/README.md index fb3336b..76e8e15 100644 --- a/ci/README.md +++ b/ci/README.md @@ -24,15 +24,15 @@ from): [`preprocess-require.awk`](preprocess-require.awk) rewrites each `require ` into an explicit signed `INSTALL FROM {community,core}; LOAD ;`. `require-env` and everything else pass through. -5. **Run** — [`run-integration.sh`](run-integration.sh) stages the preprocessed tree, wires - `VGI_TEST_WORKER`/`VGI_SIMPLE_WRITABLE_WORKER`/`VGI_BAD_PROTOCOL_WORKER` at the three built - binaries, `FORCE INSTALL`s the vgi extension (so the run uses what users can install today), - then runs the suite in a single `haybarn-unittest` invocation. +5. **Run** — [`run-integration.sh`](run-integration.sh) stages the preprocessed tree and places + the main worker behind DuckDB's `launch:` AF_UNIX pool, so repeated ATTACHes reuse one warm + .NET process. The small stateful and incompatible-protocol fixture workers remain isolated + subprocesses. The harness `FORCE INSTALL`s the vgi extension (so the run uses what users can + install today), then runs the suite in a single `haybarn-unittest` invocation. ## Scope of this version -This is deliberately a **single lane** (the default subprocess transport, matching -`scripts/run_tests.sh`'s `SUBPROCESS=1` mode) with no coverage collection, no skip-reason +This is deliberately a **single launcher lane** with no coverage collection, no skip-reason allowlist, and no executed-case floor — unlike `vgi-go`'s CI, which covers stdio/launch/shm/http lanes and guards against a whole-suite silent skip (a failed `require`/`require-env` is a *skip*, not a failure, so "all tests passed" alone isn't proof anything ran). That hardening is a natural diff --git a/ci/run-integration.sh b/ci/run-integration.sh index 3ace4b3..24caa08 100755 --- a/ci/run-integration.sh +++ b/ci/run-integration.sh @@ -3,9 +3,9 @@ # example worker, using a prebuilt standalone `haybarn-unittest` and the signed # community vgi extension — no C++ build from source. See ci/README.md. # -# Ported from vgi-go's ci/run-integration.sh, trimmed to a single (stdio) -# transport lane for this first version — vgi-go's version additionally covers -# launch:/shm/http lanes with a skip-reason allowlist and an executed-case +# Ported from vgi-go's ci/run-integration.sh, trimmed to a single launcher +# transport lane — vgi-go's version additionally covers stdio/shm/http lanes +# with a skip-reason allowlist and an executed-case # floor to catch silent whole-suite skips; that hardening is a natural # follow-up here once this lane is proven green in real CI (see ci/README.md). # @@ -95,9 +95,15 @@ mkdir -p "$STAGE/test/support" install -m 0755 "$DATABASE_WORKER_FIXTURE" \ "$STAGE/test/support/database_worker_fixture.sh" -# Matches scripts/run_tests.sh's SUBPROCESS=1 lane — the default DuckDB -# `LOCATION` subprocess transport, no launcher/AF_UNIX pooling. -export VGI_TEST_WORKER="$WORKER" +# Pool the main worker behind DuckDB's AF_UNIX launcher. The suite opens many +# connections and ATTACHes the same worker repeatedly; a bare path starts a new +# .NET process for each connection, while launch: reuses one warm process. +export VGI_TEST_WORKER="launch:$WORKER" +export VGI_REQUIRE_LAUNCHER_TRANSPORT=1 + +# Keep the small stateful and deliberately-incompatible fixtures isolated. +# They account for only a handful of tests, and process isolation prevents +# their mutable/error state from contaminating the shared main worker. export VGI_SIMPLE_WRITABLE_WORKER="$SIMPLE_WRITABLE" export VGI_BAD_PROTOCOL_WORKER="$BAD_PROTOCOL"