diff options
| author | tv <tv@krebsco.de> | 2026-10-25 22:49:39 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-25 22:49:39 +0100 |
| commit | 2f7265795b7f6ddf460bf93c5f880fb24bde9d3a (patch) | |
| tree | a0d386b8fc498aa404664bfec09162920013985f /src/transport | |
| parent | ce08d7855f44e4a15cf6951c508952d5799d4545 (diff) | |
add stalled source test
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/sim.rs | 8 |
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; } |
