niom-turn/docs/testing.md

61 lines
2.1 KiB
Markdown

# Testing
Dieses Projekt ist so aufgebaut, dass sich die wichtigsten TURN-Pfade als **Unit- und Integrationstests** ausführen lassen.
## Schnellstart
- Alle Tests: `cargo test`
- Mit weniger Output: `cargo test -q`
- Mit Logs (Beispiele):
- `RUST_LOG=warn,niom_turn=info cargo test -- --nocapture`
Hinweis: Die Integrationstests initialisieren `tracing` über die Helpers in `tests/support`.
## Was wird getestet?
### STUN RFC-Interop (FINGERPRINT)
- Unit-Tests prüfen, dass der Server `FINGERPRINT` an Responses anhängt und dass die CRC32/XOR Validierung fehlschlägt, wenn die Nachricht manipuliert wird.
Siehe: Unit-Tests in [src/stun.rs](../src/stun.rs).
### STUN RFC-Interop (MESSAGE-INTEGRITY)
- Unit-Tests prüfen `MESSAGE-INTEGRITY` Validierung (inkl. Fall „MI + nachfolgendes FINGERPRINT“).
- UDP-Integrationstests prüfen, dass Responses nach erfolgreicher Authentisierung `MESSAGE-INTEGRITY` enthalten und validierbar sind.
### UDP (turn:)
- Auth-Challenge (401 + NONCE) und erfolgreicher Allocate
- Refresh mit `LIFETIME=0` entfernt Allocation
- CreatePermission + Send → Peer erhält UDP Payload über Relay
Siehe: `tests/udp_turn.rs` sowie die thematischen Ordner in `tests/`.
### TLS (turns:) / Stream-basierte Data-Plane
- Allocate/Refresh über TLS-Stream
- (Neu) Data-Plane Rückweg Peer→Client über denselben TLS-Stream (Data-Indication oder ChannelData)
Siehe: `tests/tls_turn.rs` und `tests/tls_data_plane.rs`.
### TCP (turn:?transport=tcp) / Stream-basierte Data-Plane
- (Neu) Allocate/CreatePermission/Send über TCP
- (Neu) Peer→Client Rückweg als STUN Data Indication über TCP
- (Neu) ChannelBind + ChannelData in beide Richtungen
Siehe: `tests/tcp_turn.rs`.
## Test-Hilfen
- STUN/TURN Builder: `tests/support/stun_builders.rs`
- Stream-Framing (STUN + ChannelData über TCP/TLS): `tests/support/stream.rs`
- TLS Test-Certs: `tests/support/tls.rs`
## Erweiterungsideen (nächste sinnvolle Abdeckung)
- Split-Reads/Writes (Frames in mehreren TCP Reads) als Regressionstest
- IPv6 Encode/Decode Tests für XOR-ADDRESS Varianten
- Negative Tests: Peer nicht permitted, Channel ohne Bind, Allocation Timeout