diff --git a/rs/tests/message_routing/xnet/slo_test_lib/xnet_slo_test_lib.rs b/rs/tests/message_routing/xnet/slo_test_lib/xnet_slo_test_lib.rs index a8545a5297ae..8a1acb4bd544 100644 --- a/rs/tests/message_routing/xnet/slo_test_lib/xnet_slo_test_lib.rs +++ b/rs/tests/message_routing/xnet/slo_test_lib/xnet_slo_test_lib.rs @@ -135,6 +135,11 @@ impl Config { config } + pub fn with_send_rate_threshold(mut self, send_rate_threshold: f64) -> Self { + self.send_rate_threshold = send_rate_threshold; + self + } + pub fn with_payload_bytes(self, payload_size_bytes: u64) -> Self { let mut config = self.clone(); config.request_payload_size_bytes = payload_size_bytes; diff --git a/rs/tests/message_routing/xnet/xnet_slo_120_subnets_staging_test.rs b/rs/tests/message_routing/xnet/xnet_slo_120_subnets_staging_test.rs index 1b82fc1694d5..3b1abcb22533 100644 --- a/rs/tests/message_routing/xnet/xnet_slo_120_subnets_staging_test.rs +++ b/rs/tests/message_routing/xnet/xnet_slo_120_subnets_staging_test.rs @@ -16,7 +16,14 @@ fn main() -> Result<()> { let config = Config::new(SUBNETS, NODES_PER_SUBNET, RUNTIME, REQUEST_RATE) // Only best-effort calls with 30 seconds timeout, so the test doesn't hang for // minutes in case we can't connect to some replica/subnet to pull. - .with_call_timeouts(&[Some(30)]); + .with_call_timeouts(&[Some(30)]) + // With 120 single-node subnets colocated on shared performance hardware, the + // per-subnet block production rate varies between runs. On loaded runs a few + // "straggler" subnets dip just below the default 0.3 send rate threshold (down + // to ~0.28), while on unloaded runs the minimum is ~0.43. Lower the threshold to + // 0.2 to absorb this hardware variance while still catching systemic XNet + // regressions (the median send rate is ~0.7). + .with_send_rate_threshold(0.2); let test = config.clone().test(); SystemTestGroup::new()