Bump the default Nostr-discovery advert namespace from `fips-overlay-v1` to `fips-overlay-v1-next` on next. Master continues to publish under `fips-overlay-v1`. Background: next runs FMP-v1 (Noise XX, msg1 33 bytes) which is wire-incompatible with master's FMP-v0. Until now both branches defaulted to the same Nostr advert namespace, so a stock next-branch daemon's open-discovery sweep would happily pick up master peers' adverts (and vice versa), succeed at the UDP punch, adopt the socket, and fail every FMP handshake at the version-gate. The per-peer-mismatch cooldown introduced on master is the safety net for any case that slips past this default; the namespace separation is the structural answer. Three sites updated: - `src/discovery/nostr/types.rs` `ADVERT_IDENTIFIER` const documents why the value is branch-specific. - `src/config/node.rs` `default_app()` matches. - `src/discovery/nostr/tests.rs` and the `testing/nat/scripts/nostr-relay-test.sh` malformed-advert fixture publish under the new namespace so test harnesses see the same adverts a real daemon would. Operators who need cross-branch discovery during a coordinated rolling upgrade can override `node.discovery.nostr.app` in fips.yaml back to `fips-overlay-v1`.
FIPS Testing
Integration and simulation test harnesses for FIPS, using Docker containers running the full protocol stack.
Test Harnesses
static/ -- Static Docker Network
Fixed topologies with manual scripts for building, config generation, connectivity tests (ping, iperf), and network impairment (netem). Useful for deterministic debugging and validating specific topology configurations.
| Topology | Nodes | Transport | Description |
|---|---|---|---|
| mesh | 5 | UDP | Sparse mesh, 6 links, multi-hop |
| chain | 5 | UDP | Linear chain, max 4-hop paths |
| mesh-public | 5+1 | UDP | Mesh with external public node |
| tcp-chain | 3 | TCP | Linear chain over TCP (port 8443) |
| rekey | 5 | UDP | Rekey integration test topology |
tor/ -- Tor Transport Integration
End-to-end Tor transport testing with Docker containers running real Tor daemons. Requires internet access for Tor bootstrapping.
| Scenario | Description |
|---|---|
| socks5-outbound | Outbound SOCKS5 connections through Tor to clearnet peer |
| directory-mode | Inbound via HiddenServiceDir onion service (co-located) |
nat/ -- NAT Traversal Lab
Real Docker NAT traversal tests for the Nostr/STUN bootstrap path,
using router containers with iptables-based NAT, a local Nostr relay,
and a local STUN responder.
| Scenario | Description |
|---|---|
| cone | Two NATed peers establish a UDP traversal path |
| symmetric | UDP traversal fails under symmetric NAT, TCP fallback wins |
| lan | Peers on the same LAN prefer local addresses over reflexive |
chaos/ -- Stochastic Simulation
Automated network testing with configurable node counts, topology algorithms (random geometric, Erdos-Renyi, chain, explicit), and fault injection (netem mutation, link flaps, traffic generation, node churn). 20 scenarios covering general stress testing, cost-based parent selection, mixed link technologies (fiber/Bluetooth/WiFi), transport-specific validation (UDP, TCP, Ethernet), and ECN/congestion testing. Scenarios are defined in YAML and executed via a Python harness that manages the full lifecycle: topology generation, Docker orchestration, fault scheduling, log collection, and analysis.