Test results¶
Results for release 1.3 (GaiaKeep/gfs 1.3, 8461e1a, 2026-10-01). Every number here comes from
an executed run whose output is recorded in the repository (eval/results/) or in the CI run logs.
Continuous integration¶
The GitHub workflow runs on every push. It ran on ubuntu-24.04 with 4 vCPUs, with the result for
8461e1a listed against each step:
| Step | Result |
|---|---|
| Core unit and integration suite (JUnit 5) | 2,188 tests, 0 failures, 0 errors, 0 skipped, in 29 min |
| Java client suite, including the Python client run against the Java core | 50 tests, 0 failures |
| Python client suite, including Java interop | green (90 passed; 5 skipped are hardware or live-fabric only) |
| Java↔Python transfer-protocol conformance (golden vectors) | required, never skipped: green |
| Wire-contract lint (rules R1–R8: registration, core verbs, node verbs, signing) | 0 violations |
| Eval tooling tests | 34 tests green |
| Transport defaults check | green |
| Release jar build and publish | published |
Flaky-test policy. A test that fails is re-run up to twice. A test that passes only on a re-run
is listed by name in the run summary as flaky, so it is never hidden; one that fails all three times
fails the build. The run for 8461e1a had no flaky tests.
The core suite by area¶
These counts are from the CI run above:
| Area | Test classes | Tests | What it covers |
|---|---|---|---|
| Storage engine | 30 | 508 | publish, dedup, versions, repair, scrub, trim, recovery, reclaim, withdrawal |
| Core service (RPC surface) | 75 | 437 | every verb: auth, jobs, ingest, transfers, follower reads, chain replication, failover |
| Crash matrix | 2 | 156 | a crash injected at every registered maintenance and write step, in 4 loss modes |
| Index (prototype journal) | 6 | 122 | journal, replication and its history chain |
| Replicated core log (Raft) | 9 | 112 | elections, lease, pre-vote, snapshots, compaction, non-voter catch-up, simulation |
| Key custody | 7 | 86 | key sources, PKCS#11, rotation, key splitting |
| Lifecycle | 10 | 70 | forget, prune, destroy, retention, legal hold, quorum |
| Storage-node protocol | 7 | 59 | signed node requests, term fencing, pinning |
| Transfer protocol (GKT) | 6 | 57 | windows, acknowledgements, loss, reordering, duplication |
| Authentication and audit | 7 | 57 | signed requests, roles, replay, audit chain |
| Power loss | 10 | 52 | power cuts on page-cache models of every log and store |
| Blocks, placement, refs, versions, tenancy | 20 | 150 | block codec, placement rules, counted references, policy engine |
| Format adapters and chunkers | 8 | 54 | DICOM, NIfTI, TIFF cut rules, content-defined chunking, conformance |
| Tape | 7 | 67 | binding, catalogue, deferred reads, simulator, SCSI path, benchmark |
| Pack and block stores | 8 | 66 | containers, repack, power loss, independent reference reader |
| Metadata encryption | 4 | 19 | sealed partitions, keyed ids, sealed snapshots, wire |
| Model-based engine tests | 3 | 16 | random operation sequences against a reference model |
| Other (jobs, API, tools, crypto, util) | 19 | 100 |
Beyond the unit suite¶
| Campaign | Result |
|---|---|
| Power-cut campaigns (page-cache model) | Core log and index journal: 600 histories each, all three cut modes, about 750 cuts inside recovery per log. Pack store: 1,500 rounds with 7,043 cuts in work and 1,851 in recovery. Earlier engine campaign: 720 histories and 3,720 cuts. No acknowledged write lost in the final runs; every defect found on the way was fixed first. |
| Real power cuts | 200/200 LazyFS rounds and 30/30 VM power-offs, all clean. |
| Crash matrix | 153 crash points by 4 loss modes, plus a live version that arms a crash point on a running fabric. |
| Model-based testing | Every CI run plays 220 seeds of 60 operations against a reference model; the long run plays 5,000 × 150. Six engine defects were found this way and fixed. |
| Chain chaos test | 1,118 publishes under 1,107 injected kills, partitions and delays: every acknowledged version intact. |
| Two-sided network partition | The minority leader acknowledges nothing, and after healing no acknowledged write is lost. |
| Live fabric check, single host | 61/61 (prototype fabric), then the secured build on the merged code. |
| Live fabric check, HPC (secured: signed requests, strict node-key pinning, sealed keys) | 88/88 on the shipped build. It covers crash mid-publish, recovery, reconcile, failover and replica agreement. |
| Simulated tape, end to end | Archive, lose the disk copies, recall and read back byte-identical. Also covered: recall ordering, concurrent recalls on two drives, a drive dying mid-write, failover with a recall outstanding, and scrubbing from tape. Run on the simulator and on virtual tape drives (mhVTL). |
| WAN emulation (netem, 5 sites) | 30 ms round trip passes at every loss level, with BBR congestion control. 80 ms is partly passing; see Benchmarks. |
| Adversarial reviews | Two rounds over the merged code, by area: authorization, durability, replication, transport and data path. Every finding was reproduced with a test before being fixed. |
Framework (Cresco) validation¶
| Check | Result |
|---|---|
| No silent message loss | 40/40 two-node runs delivered 800/800 messages, with every drop counter 0. The previous jar lost messages in 2 of 35 runs. |
| Tunnel integrity under load (SHA-256 checked) | 10/10 runs intact, including a late-starting target. The previous jar truncated silently. |
| Speed suite under heavy load | 10/10 runs |
| Secrets in logs and exported config | none found in any log, store or reply |