From 79b170b8873c932f5fa9e0971a9d0daa4de6131c Mon Sep 17 00:00:00 2001 From: Davide Angelocola Date: Wed, 24 Jun 2026 08:51:08 +0200 Subject: [PATCH] test(integration): bump Rust-oracle fixtures v0.72.0 -> v0.75.0 The correctness oracle (RustWritesJavaReads, RustJavaReaderComparison, PcoFixtureInspection) was pinned to v0.72.0 while the Rust reference is at v0.75.0. The bucket keeps identical fixture file names across versions but rewrites the bytes (verified: dict.vortex ETag differs), so this validates the decoders against the current wire format. All 38 oracle round-trips pass. Also fixes a latent cache bug: the shared /tmp/pco-fixtures cache was keyed by file name only, so a version bump would have silently served stale bytes. The cache path is now keyed by FIXTURE_VERSION. RustJavaReaderComparison downloads into a fresh @TempDir, so it only needed the version string. masked/patched/variant remain absent from the bucket through v0.75.0 (no Rust oracle); doc wording updated accordingly. Co-Authored-By: Claude Opus 4.8 --- docs/compatibility.md | 18 ++++++++++-------- .../PcoFixtureInspectionIntegrationTest.java | 11 ++++++++--- ...ustJavaReaderComparisonIntegrationTest.java | 2 +- .../RustWritesJavaReadsIntegrationTest.java | 9 +++++++-- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/docs/compatibility.md b/docs/compatibility.md index 2807fb2d..b38da82f 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -213,14 +213,16 @@ For unsupported extension ids the inspector falls back to a placeholder cell correctly via the primitive accessors, callers just have to format the value themselves. -## S3 Fixture Status (v0.72.0) +## S3 Fixture Status (v0.75.0) -> **Note:** the fixture matrix below is locked to `v0.72.0/`. The Rust reference is -> now at `v0.74.0`; re-run the integration suite against `v0.74.0/arrays/` once -> upstream publishes the corresponding fixture set, and refresh this section. +> **Note:** the oracle round-trip suite is pinned to `v0.75.0/` (current Rust +> release). The bucket reuses identical fixture file names across versions but +> rewrites the bytes, so the `/tmp/pco-fixtures` cache is version-keyed; bump the +> `FIXTURE_VERSION` constant in the integration tests and refresh this section +> when a newer set is published. Cross-language round-trips tested against Rust-written fixture files hosted at -`s3://vortex-compat-fixtures/v0.72.0/arrays/`. +`s3://vortex-compat-fixtures/v0.75.0/arrays/`. | Fixture | Status | |-------------------------------------|--------| @@ -259,6 +261,6 @@ Cross-language round-trips tested against Rust-written fixture files hosted at | `pco.vortex` | ✅ | | `clickbench_hits_5k.compact.vortex` | ✅ | | `clickbench_hits_5k.regular.vortex` | ✅ | -| `masked.vortex` | ❓ | No fixture in v0.72.0 | -| `patched.vortex` | ❓ | No fixture in v0.72.0 | -| `variant.vortex` | ❓ | No fixture in v0.72.0 | +| `masked.vortex` | ❓ | No fixture through v0.75.0 | +| `patched.vortex` | ❓ | No fixture through v0.75.0 | +| `variant.vortex` | ❓ | No fixture through v0.75.0 | diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/PcoFixtureInspectionIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/PcoFixtureInspectionIntegrationTest.java index 7b6ef132..55940836 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/PcoFixtureInspectionIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/PcoFixtureInspectionIntegrationTest.java @@ -37,7 +37,9 @@ /// implement first). class PcoFixtureInspectionIntegrationTest { - private static final String BASE = "https://vortex-compat-fixtures.s3.amazonaws.com/v0.72.0/arrays/"; + private static final String FIXTURE_VERSION = "v0.75.0"; + private static final String BASE = + "https://vortex-compat-fixtures.s3.amazonaws.com/" + FIXTURE_VERSION + "/arrays/"; private static final String[] FIXTURES = { "pco.vortex", "tpch_lineitem.compact.vortex", @@ -303,8 +305,11 @@ private static String formatDType(DType d) { } private static Path downloadIfMissing(Path tmp, String name) throws Exception { - // Reuse /tmp/pco-fixtures cache if present. - Path cached = Path.of("/tmp/pco-fixtures", name); + // Reuse the version-keyed /tmp/pco-fixtures cache if present. The version + // segment matters: the Rust reference rewrites identical file names with + // different bytes across versions, so a version-less cache would serve + // stale bytes after a bump. + Path cached = Path.of("/tmp/pco-fixtures", FIXTURE_VERSION, name); if (Files.exists(cached)) { return cached; } diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/RustJavaReaderComparisonIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/RustJavaReaderComparisonIntegrationTest.java index 2eaec3c5..72e9e54a 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/RustJavaReaderComparisonIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/RustJavaReaderComparisonIntegrationTest.java @@ -59,7 +59,7 @@ class RustJavaReaderComparisonIntegrationTest { private static final URI BASE = - URI.create("https://vortex-compat-fixtures.s3.amazonaws.com/v0.72.0/arrays/"); + URI.create("https://vortex-compat-fixtures.s3.amazonaws.com/v0.75.0/arrays/"); private static final Session SESSION = Session.create(); private static final BufferAllocator ALLOCATOR = ArrowAllocation.rootAllocator(); diff --git a/integration/src/test/java/io/github/dfa1/vortex/integration/RustWritesJavaReadsIntegrationTest.java b/integration/src/test/java/io/github/dfa1/vortex/integration/RustWritesJavaReadsIntegrationTest.java index 8a16ffee..70748e63 100644 --- a/integration/src/test/java/io/github/dfa1/vortex/integration/RustWritesJavaReadsIntegrationTest.java +++ b/integration/src/test/java/io/github/dfa1/vortex/integration/RustWritesJavaReadsIntegrationTest.java @@ -57,7 +57,9 @@ /// Cross-compatibility: Rust (JNI) writer → Java reader. class RustWritesJavaReadsIntegrationTest { - private static final String S3_BASE = "https://vortex-compat-fixtures.s3.amazonaws.com/v0.72.0/arrays/"; + private static final String FIXTURE_VERSION = "v0.75.0"; + private static final String S3_BASE = + "https://vortex-compat-fixtures.s3.amazonaws.com/" + FIXTURE_VERSION + "/arrays/"; private static final Session SESSION = Session.create(); private static final BufferAllocator ALLOCATOR = ArrowAllocation.rootAllocator(); @@ -218,7 +220,10 @@ private static long[] readJavaLongColumn(Path file, String column) throws IOExce } private static Path downloadIfMissing(Path tmp, String name) throws Exception { - Path cached = Path.of("/tmp/pco-fixtures", name); + // Cache is keyed by fixture version: the Rust reference rewrites the same + // file names with different bytes across versions, so a version-less cache + // would silently serve stale bytes after a version bump. + Path cached = Path.of("/tmp/pco-fixtures", FIXTURE_VERSION, name); if (Files.exists(cached)) { return cached; }