From 2f7265795b7f6ddf460bf93c5f880fb24bde9d3a Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 25 Oct 2026 22:49:39 +0100 Subject: add stalled source test --- src/transport/sim.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/transport/sim.rs') diff --git a/src/transport/sim.rs b/src/transport/sim.rs index 3e0163f..1556d69 100644 --- a/src/transport/sim.rs +++ b/src/transport/sim.rs @@ -25,7 +25,7 @@ use tokio::sync::{mpsc, oneshot}; use tracing::{debug, warn}; use super::mycelium::{decode_message, encode_message}; -use super::{EncodedMessage, MessageHandler, ParsedMessage, Transport}; +use super::{EncodedMessage, MessageHandler, MessageKind, ParsedMessage, Transport}; /// How one direction of a link behaves. #[derive(Clone, Debug)] @@ -36,6 +36,9 @@ pub(crate) struct LinkParams { pub(crate) duplicate: f64, /// Delay, uniform in this range. Overlapping delays reorder messages. pub(crate) delay: (Duration, Duration), + /// Messages of these kinds are always lost: a peer that answers some messages but + /// not others (e.g. keepalives but not sync). + pub(crate) drop: Vec, } impl Default for LinkParams { @@ -45,6 +48,7 @@ impl Default for LinkParams { loss: 0.0, duplicate: 0.0, delay: (Duration::from_millis(1), Duration::from_millis(5)), + drop: Vec::new(), } } } @@ -155,7 +159,7 @@ impl SimNet { .get(&(from.to_owned(), message.peer.clone())) .unwrap_or(&inner.default_link) .clone(); - if inner.rng.chance(params.loss) { + if params.drop.contains(&message.kind) || inner.rng.chance(params.loss) { inner.counts.lost += 1; return; } -- cgit v1.3.1