summaryrefslogtreecommitdiffstats
path: root/src/transport/sim.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-25 22:49:39 +0100
committertv <tv@krebsco.de>2026-10-25 22:49:39 +0100
commit2f7265795b7f6ddf460bf93c5f880fb24bde9d3a (patch)
treea0d386b8fc498aa404664bfec09162920013985f /src/transport/sim.rs
parentce08d7855f44e4a15cf6951c508952d5799d4545 (diff)
add stalled source test
Diffstat (limited to 'src/transport/sim.rs')
-rw-r--r--src/transport/sim.rs8
1 files changed, 6 insertions, 2 deletions
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<MessageKind>,
}
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;
}