2.0 KiB
2.0 KiB
Testing
This project is structured so the most important TURN paths can be exercised via unit and integration tests.
Quick start
- All tests:
cargo test - Less output:
cargo test -q - With logs (examples):
RUST_LOG=warn,niom_turn=info cargo test -- --nocapture
Note: integration tests initialise tracing via helpers in tests/support.
What is covered?
STUN RFC-Interop (FINGERPRINT)
- Unit tests verify that the server appends
FINGERPRINTto responses and that CRC32/XOR validation fails when the message is tampered with.
See: unit tests in src/stun.rs.
STUN RFC-Interop (MESSAGE-INTEGRITY)
- Unit tests verify
MESSAGE-INTEGRITYvalidation (including the “MI + trailing FINGERPRINT” case). - UDP integration tests verify that responses after successful authentication contain
MESSAGE-INTEGRITYand are verifiable.
UDP (turn:)
- Auth challenge (401 + NONCE) and successful allocate
- Refresh with
LIFETIME=0releases the allocation - CreatePermission + Send → peer receives UDP payload via the relay
See: tests/udp_turn.rs and the topic folders under tests/.
TLS (turns:) / stream-based data plane
- Allocate/Refresh over the TLS stream
- Data-plane return path peer→client over the same TLS stream (Data Indication or ChannelData)
See: tests/tls_turn.rs and tests/tls_data_plane.rs.
TCP (turn:?transport=tcp) / stream-based data plane
- Allocate/CreatePermission/Send over TCP
- Peer→client return path as STUN Data Indication over TCP
- ChannelBind + ChannelData in both directions
See: tests/tcp_turn.rs.
Test helpers
- STUN/TURN builder:
tests/support/stun_builders.rs - Stream framing (STUN + ChannelData over TCP/TLS):
tests/support/stream.rs - TLS test certs:
tests/support/tls.rs
Expansion ideas (useful next coverage)
- Split reads/writes (frames spanning multiple TCP reads) as regression tests
- IPv6 encode/decode tests for XOR-ADDRESS variants
- Negative tests: peer not permitted, channel without binding, allocation timeout