mirror of
https://github.com/jmcorgan/fips.git
synced 2026-10-30 07:37:36 +00:00
The node-synthetic group is an allow-list of test modules, and an allow-list goes stale the day the next socket test lands: the new module runs beside the others and the first sign is a dropped handshake on a loaded runner, far from the cause. testing/check-node-test-groups.py recomputes the membership. It flags every function under src/node/tests/ (and in src/testutil.rs) that uses a socket primitive or calls a flagged function, to a fixpoint, so modules that reach a socket only through a helper are caught. Module names come from mod.rs's declarations. It then evaluates both profiles' overrides in order, as nextest does, and fails when a test in a flagged module is not in node-synthetic or a lock_large_network_test() holder is not in node-large. It also checks the nextest pin in the workflows matches the config. It exits 2 rather than pass when it finds no test modules, no flagged module, no lock holder, or a filter it cannot evaluate, so a moved directory or a reformatted filter cannot pass vacuously. Uses that open no socket are exempted one function and primitive at a time, each with its reason, in testing/node-test-groups/exemptions.toml. The fixtures beside it cover each way a test reaches a socket and each check the guard makes; every case names the output it expects, so a case that fails for the wrong reason fails the runner. Both run from local CI's guards and from the ci-parity job.
19 lines
746 B
Plaintext
19 lines
746 B
Plaintext
# The exempted function also binds a UdpSocket: an exemption covers one
|
|
# primitive, not the function.
|
|
expect exit 1
|
|
expect module never_started is flagged (never_started::built_but_never_started uses UdpSocket (line 6))
|
|
=== src/node/tests/never_started.rs
|
|
use super::*;
|
|
|
|
/// The exempted function, now also binding a socket of another kind: the
|
|
/// exemption covers UdpTransport only, so this still flags the module.
|
|
fn built_but_never_started() -> crate::transport::udp::UdpTransport {
|
|
let _peer = std::net::UdpSocket::bind("127.0.0.1:0").unwrap();
|
|
crate::transport::udp::UdpTransport::new(TransportId::new(9), None, UdpConfig::default(), tx())
|
|
}
|
|
|
|
#[test]
|
|
fn a_dead_transport_fails_to_send() {
|
|
let _t = built_but_never_started();
|
|
}
|