# 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:

```text
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:

```powershell
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:

```powershell
$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 validate full plaintext reconstruction from MinIO-written encrypted data — that lives in the reader suite at `rustfs/src/storage/minio_generated_read_test.rs`, run with `--features rio-v2` over the same fixture captures.
