niom-turn/docs/testing.md

2.1 KiB

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.

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