Skip to content

Pluggable S3 backend matrix via JUnit suites (#223)#272

Open
abashev wants to merge 2 commits into17.0from
feature/suites
Open

Pluggable S3 backend matrix via JUnit suites (#223)#272
abashev wants to merge 2 commits into17.0from
feature/suites

Conversation

@abashev
Copy link
Copy Markdown
Owner

@abashev abashev commented Apr 27, 2026

Summary

  • Replaces the single LocalStack-only abstract base test with a set of backend-specific @Suite classes, each booting its own container in @BeforeSuite and running the shared *Test cases in com.github.vfss3.commonsvfs.tests against it.
  • Drops BaseIntegrationTest; tests share state via the VFS-free S3IntegrationContext (rootUrl + FileSystemOptions + path constants).
  • integrationTest uses useJUnitPlatform { includeEngines 'junit-platform-suite' } so the test classes only execute inside their suite.

Backends in the matrix

Suite Image Tests Notes
LocalStackSuite localstack/localstack:3.8 442 ✓ latest 3.x — testcontainers 1.19.8 doesn't support 4.x/2026.x yet
MinioSuite minio/minio:RELEASE.2025-09-07T16-13-09Z 437 ✓ + 5 skip ACL skipped — see #270
CloudServerSuite zenko/cloudserver:latest-7.70.10 442 ✓ latest numbered Scality release
SeaweedFsSuite chrislusf/seaweedfs:4.22 442 ✓ concurrent delete consistency fixed in 4.22
MiniStackSuite ministackorg/ministack:1.3 437 ✓ + 5 skip new free LocalStack drop-in
FlociSuite floci/floci:1.5.8 437 ✓ + 5 skip new free LocalStack drop-in
S3MockSuite adobe/s3mock:5.0.0 439 ✓ + 3 skip Apache-2.0, lightweight
GarageSuite dxflrs/garage:v2.3.0 433 + 4 fail + 5 skip CopyObject retry bug — #271
RustFsSuite rustfs/rustfs:1.0.0-alpha.99 433 + 4 fail + 5 skip same — #271

Total: 9 suites × 442 = 3978 tests, 8 fail (all #271), 23 skip (all ACL surface incompat — gracefully aborted via Assumptions.abort).

Configuration choices

  • All images pinned to a specific tag (no :latest); where the upstream publishes a major.minor slide we use that, else the newest concrete patch.
  • The ACL helpers in AclHandlingTest catch any exception and emit Assumptions.abort so backends that report supportsAcl=true but return divergent payloads (null grantees, 403, etc.) skip the test rather than failing.
  • Each test class wipes the shared bucket in @BeforeAll to recover the per-class isolation that the old per-class container previously gave for free.

Test plan

Closes #223.
Related: #270 (MinIO ACL NPE), #271 (Garage/RustFS CopyObject retry).

🤖 Generated with Claude Code

Replace the single LocalStack-only abstract base test with a set of
backend-specific @suite classes, each booting its own container in
@BeforeSuite and running the shared *Test cases in
com.github.vfss3.commonsvfs.tests against it.

- LocalStack 3.8, MinIO RELEASE.2025-09-07, CloudServer latest-7.70.10,
  SeaweedFS 4.22, MiniStack 1.3, Floci 1.5.8, Adobe S3Mock 5.0.0,
  Garage v2.3.0, RustFS 1.0.0-alpha.99
- Drop BaseIntegrationTest; tests share state via the VFS-free
  S3IntegrationContext (rootUrl + FileSystemOptions + path constants)
- integrationTest task uses includeEngines 'junit-platform-suite' so
  test classes only run inside their suite
- ACL test wraps backend incompat in Assumptions.abort to skip rather
  than fail when supportsAcl=true but the surface is divergent

Known failures tracked separately:
- MinIO ACL grantee NPE: #270
- Garage / RustFS CopyObject SDK retry header pollution: #271

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@abashev abashev changed the base branch from branch-2.4.x to 17.0 April 27, 2026 22:00
@abashev abashev enabled auto-merge April 27, 2026 22:00
@abashev abashev disabled auto-merge April 27, 2026 22:43
@github-actions
Copy link
Copy Markdown
Contributor

Code Coverage

Overall Project 52.73% 🍏

There is no coverage information present for the Files changed

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.

Local integration testing with pluggable S3-compatible containers

1 participant