test: forge-only integration tests (itest) — curated versity partition against the smelt stack - #38
Merged
Merged
Conversation
…t the smelt stack Two changes folded together: ingot owns its integration tests (previously hosted in smelt), and there is no in-memory ingot under test anywhere — the deployment tested is always the real forge-mode daemon. itest/ (build tag itest) boots the full smelt Forge stack via github.com/fil-forge/smelt/pkg/stack and bind-mounts a CGO_ENABLED=0 build of THIS working tree over the published image's /usr/bin/ingot. Compose files and configs travel with the Go import (go:embed) — no smelt checkout needed. The S3 surface is gated by the curated-partition format (formerly smoke_test.go's, now against the real deployment): per upstream versitygw group, a pass table (every case must pass) and an XFail table (known failures, reported as SKIP; an unexpected pass errors so the case gets promoted). One shared stack serves all categories (TestForgeVersity); ListBuckets runs first because its exact-listing cases need the pristine stack. Coverage grew: the old lists missed 16 of 31 CopyObject cases and all 7 multipart groups — all partitioned empirically now (189 pass / 102 xfail / 2 position-sensitive skips). The in-memory harness world is deleted: harness.go (StartHarness + inmem wiring), smoke_test.go, multipart/blobsplit/harness/run-capture tests, and the versity suite-runner machinery (Run/RunT/Suite/stdout capture) — the curated tables invoke upstream cases directly. testing/ shrinks to S3-client glue: Config, exported NewS3Conf, roundtrip helpers. Ingot-unique assertions were ported to run over the stack (scenarios_test.go, one small-max_blob_size stack via smelt's WithServiceConfig + testdata/config-smallblob.yaml): blob-split round-trip with spooled-by-digest proof (spool counted inside the container), zero-byte objects, a multipart part spanning multiple internal blobs, and failed-Complete session recovery. Assertions duplicating upstream coverage (abort semantics) were dropped. Test pattern, locally and in CI: make test (unit, seconds, no Docker) → make itest (integration, ~6 min); the CI itest job runs only after the unit job passes (go-test.yml two stages; separate e2e workflow removed). Also: TestForgeNativeProvision (guppy-free onboarding + ship-path round-trip) and TestForgeReadAfterEviction (read tier re-fetches from piri after spool wipe), each on their own stack. deps: smelt pin pulls newer spf13/genproto — the pre-split genproto monolith pruned away entirely, resolving the ambiguous-import collision documented in smelt's DEVELOPING.md without a replace. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ingot now owns its integration tests, and every test runs against the real forge-mode deployment — there is no in-memory ingot under test anywhere.
What this does
itestbuild tag andmake itest— a newitest/package boots the smelt Forge stack (smelt as a Go test dependency) and bind-mounts a build of the working tree over the published image. CI gates it behind unit tests (go-test.yml:unit→itest).TestForgeVersity— the S3 conformance partition: per upstream versitygw group, a curated pass table and a known-fail (XFail) table. 189 pass / 102 xfail / 2 skips; an XFail case that starts passing errors so it gets promoted.TestForgeScenarios— ingot-unique behavior (blob-split/spool-by-digest, zero-byte objects, part-spans-blobs multipart, failed-Complete recovery) on a small-max_blob_sizeconfig.TestForgeNativeProvision,TestForgeReadAfterEviction— onboarding and the network read tier.StartHarness+ inmem wiring),smoke_test.go, the multipart/blobsplit harness tests, and the versity suite-runner machinery.testing/shrinks to S3-client glue (Config,NewS3Conf, roundtrip helpers). Coverage moved, it didn't shrink — the curated partition now also covers all of CopyObject and the 7 multipart groups, which the old lists missed.Try it
See
itest/README.mdfor the category table and curation rules.🤖 Generated with Claude Code