Files
rustfs/crates/rio-v2/tests
唐小鸭 f7724d223b feat(rio): rio_v2 is compatible with minio for storing data. (#3115)
* Set up a compatibility layer for replacing old Rio components with new ones.

* fix(rio). compress range

* feat(rio). Add the experimental feature rio_v2 to support minio data at the binary level.

* feat(rio_v2): add sse-c test

* test compression component

* simple fix

* fix minlz encode

* fix metadata

* fix kms key cache error

* Update launch.json

* ci: set nix crate download user agent

* fix: gate obs pyroscope backend

* ignore minio test

* fix encrypt check

* fix

* fix

* fix

* Update object_usecase.rs

* Update ci.yml

* fix

* ci add rio-v2 test

* fix

* ci fix

* fix

* Reconstructed into a more reasonable compatibility mode

* fix

* fix

---------

Signed-off-by: houseme <housemecn@gmail.com>
Signed-off-by: 唐小鸭 <tangtang1251@qq.com>
Co-authored-by: houseme <housemecn@gmail.com>
Co-authored-by: cxymds <Cxymds@qq.com>
Co-authored-by: 安正超 <anzhengchao@gmail.com>
2026-06-08 11:59:14 +00: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.95.0 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.