Files
rustfs/crates/rio-v2/tests
overtrue 5571d4830b test(interop): let the MinIO fixture lab build from registry mirrors
The fixture lab's throwaway image hardcoded two Docker Hub base images, so on a network that cannot reach registry-1.docker.io the capture script fails at build time and no MinIO fixtures can be generated at all. That matters more than it looks: the interop reader tests are #[ignore]d precisely because the fixtures are gitignored and must be generated locally, so an unreachable registry silently keeps the whole MinIO SSE interop lane unverifiable.

Both base images become build args with the current Docker Hub values as defaults, and the capture script forwards MINIO_LAB_MINIO_IMAGE / MINIO_LAB_PYTHON_IMAGE when set. CI keeps the defaults; a restricted network can point at quay.io (which publishes the MinIO releases) and public.ecr.aws (which mirrors the official Python images), both verified to produce a working lab image and real fixtures.

The README documents the override and warns against an unpinned :latest MinIO tag, since the captured on-disk format is exactly what the interop tests assert against.

Refs rustfs/backlog#1638.
2026-08-16 21:23:17 +08:00
..

rio-v2 Fixture Tests

This directory holds interoperability tests for rustfs-rio-v2.

Generated MinIO fixtures

The integration test minio_generated_fixtures.rs reads raw MinIO backend data generated by crates/rio-v2/tests/minio_fixture_lab/lab.py.

Default fixture root:

crates/rio-v2/tests/fixtures/minio-generated

The generated MinIO fixture data is intentionally not checked in and these tests are ignored by default, so they are not part of automated CI runs.

To generate or expand fixtures locally, use:

uv run python .\minio_fixture_lab\lab.py capture-matrix `
  --root .\rustfs\crates\rio-v2\tests\fixtures\minio-generated `
  --minio-binary .\rustfs\tmp\minio.darwin-arm64.RELEASE.2025-09-07T16-13-09Z `
  --endpoint https://127.0.0.1:19000 `
  --disk-count 1

Or point the tests at another generated root:

$env:RUSTFS_MINIO_FIXTURE_ROOT = '.\rustfs\tmp\minio-fixture-lab-smoke'
cargo +1.97.1 test -p rustfs-rio-v2 --test minio_generated_fixtures -- --ignored

Scope

The current fixture test covers the full default capture matrix:

  • sse-s3-singlepart-64k
  • sse-s3-multipart-8m
  • sse-kms-singlepart-64k
  • sse-kms-multipart-8m
  • sse-c-singlepart-64k
  • sse-c-multipart-8m

It checks that:

  • raw xl.meta can be parsed through rustfs-filemeta
  • singlepart and multipart fixture structures are recognized
  • SSE-S3, SSE-KMS, and SSE-C metadata markers survive capture
  • KMS key ids are derived from each fixture's own manifest.json, so local static-KMS runs are not tied to one hard-coded key name
  • SSE-C HEAD responses round-trip the expected customer algorithm and customer-key MD5

These tests do not yet validate full plaintext reconstruction from MinIO-written encrypted data.