# 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