miroir/tests/integration/README.md
jedarden 7832d1b578 test(integration): Add integration tests per plan §8
Add comprehensive integration tests for Miroir with 3 Meilisearch nodes
via docker-compose. Tests cover:

- Document round-trip with distribution verification (1000 docs)
- Search covers all shards (100 docs with unique keywords)
- Facet aggregation across shards (100 docs, 3 colors)
- Offset/limit paging consistency (50 docs, 5×paged vs single)
- Settings broadcast to all nodes (synonyms test)
- Task polling for large batches (500 docs)
- Node failure with RF=2 (requires docker-compose-dev-rf2)

Also added integration test README with setup and running instructions.

Per plan §8: Integration tests validate end-to-end behavior including
document distribution, shard coverage, facet aggregation, paging, settings
broadcast, task polling, and node failure with RF=2.

Closes: miroir-89x (Phase 9 — Testing)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 01:29:45 -04:00

82 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Miroir Integration Tests
End-to-end integration tests for Miroir with 3 Meilisearch nodes via docker-compose.
Per plan §8: Integration tests validate end-to-end behavior including:
- Document round-trip with distribution verification
- Search covers all shards
- Facet aggregation across shards
- Offset/limit paging consistency
- Settings broadcast to all nodes
- Task polling for large batches
- Node failure with RF=2
## Prerequisites
Start the docker-compose dev stack:
```bash
cd /home/coding/miroir/examples
docker-compose -f docker-compose-dev.yml up -d
```
Wait for all services to be healthy (check with `docker-compose ps`).
## Running Tests
### All integration tests
```bash
cd /home/coding/miroir
cargo test --test integration -- --test-threads=1
```
**Important:** Use `--test-threads=1` to prevent concurrent tests from interfering with each other (they share indexes).
### Individual tests
```bash
cargo test --test integration document_round_trip -- --test-threads=1
cargo test --test integration search_covers_all_shards -- --test-threads=1
cargo test --test integration facet_aggregation -- --test-threads=1
cargo test --test integration offset_limit_paging -- --test-threads=1
cargo test --test integration settings_broadcast -- --test-threads=1
cargo test --test integration task_polling -- --test-threads=1
```
### Node failure test (requires RF=2 stack)
The `node_failure_rf2` test requires the RF=2 docker-compose stack with 6 nodes:
```bash
cd /home/coding/miroir/examples
docker-compose -f docker-compose-dev-rf2.yml up -d
```
Then run:
```bash
MIROIR_RF2_PORT=7700 cargo test --test integration node_failure_rf2 -- --test-threads=1 --ignored
```
## Test Descriptions
| Test | Description | Expected Behavior |
|------|-------------|-------------------|
| `document_round_trip` | Index 1000 documents, retrieve each by ID | All documents found; distributed across ≥2 nodes |
| `search_covers_all_shards` | Index 100 docs with unique keywords, search each | Every search returns exactly 1 hit |
| `facet_aggregation` | 100 docs across 3 colors, facet by color | Facet counts sum to 100 |
| `offset_limit_paging` | 50 docs, compare 5×paged vs single limit=50 | Same documents, same order, no duplicates |
| `settings_broadcast` | Add synonyms, verify on all 3 nodes | All nodes have synonyms; synonym search works |
| `task_polling` | Index 500 docs, poll until succeeded | Task succeeds; all 500 docs searchable |
| `node_failure_rf2` | With RF=2, verify search works with 1 node down | All results returned; no degraded header |
## Troubleshooting
**Connection refused:** Ensure docker-compose stack is running:
```bash
docker-compose -f ../docker-compose-dev.yml ps
```
**Tests timeout:** Increase health check timeout in `ensure_healthy()`.
**Index already exists:** Tests clean up existing indices automatically.
**Node failure test fails:** Ensure the RF=2 stack is running with 6 nodes + Redis.