diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-12-10 18:35:15 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-12-10 18:36:19 +0100 |
commit | 39e820aed41d62d1c709d02406b1a47729ccf34f (patch) | |
tree | 051d15d8c7e874a579fe466c71e79e12e558324f | |
parent | 4ed7c5aa6279e74d21829003f0a901e5ff3945f7 (diff) |
Add simple reactor test
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | lib/src/reactor/gossip/mod.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/src/reactor/gossip/mod.rs b/lib/src/reactor/gossip/mod.rs index 9ee19e5..d84f985 100644 --- a/lib/src/reactor/gossip/mod.rs +++ b/lib/src/reactor/gossip/mod.rs @@ -158,3 +158,59 @@ impl GossipReactor { } } +#[cfg(test)] +mod tests { + use super::*; + + use std::convert::TryFrom; + use std::sync::Arc; + use tokio::sync::RwLock; + + use crate::config::Config; + + #[tokio::test] + async fn test_gossip_reactor_simple() { + let _ = env_logger::try_init(); + + let profile = Profile::new_inmemory(Config::default(), "test-gossip-reactor-simple").await; + assert!(profile.is_ok()); + let profile = Arc::new(RwLock::new(profile.unwrap())); + + let gossip_topic_name = String::from("test-gossip-reactor-simple-topic"); + let (reactor, tx) = GossipReactor::new(profile.clone(), gossip_topic_name); + + let (reply_sender, mut reply_receiver) = tokio::sync::mpsc::unbounded_channel(); + tx.send((ReactorRequest::Ping, reply_sender)); + + let mut pong_received = false; + tokio::select! { + reply = reply_receiver.recv() => { + match reply { + Some(ReactorReply::Pong) => { + pong_received = true; + let (reply_sender, mut reply_receiver) = tokio::sync::mpsc::unbounded_channel(); + tx.send((ReactorRequest::Exit, reply_sender)); + } + Some(r) => { + assert!(false, "Expected ReactorReply::Pong, got: {:?}", r); + } + None => { + // nothing + } + } + }, + + reactor_res = reactor.run() => { + match reactor_res { + Ok(()) => assert!(false, "Reactor finished before pong was received"), + + Err(e) => { + assert!(false, "Reactor errored: {:?}", e); + } + } + } + } + + assert!(pong_received, "No pong received"); + } +} |