mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-05-29 18:51:22 +00:00
core/src/transport/memory: Add basic dialer listener test (#1283)
* core/src/transport/memory: Add basic dialer listener test Adds a basic test using two memory transport instances, one dialing the other, sending a single message over the /wire/. * core/src/nodes/network: Fix typo * core/src/transport: Randomize listening port in unit test * core/src/transport/memory: Update test to stable future * core/src/transport/memory.rs: Use saturating_add for test port Co-Authored-By: Pierre Krieger <pierre.krieger1708@gmail.com> Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com> Co-authored-by: Roman Borschel <romanb@users.noreply.github.com>
This commit is contained in:
parent
7df3e74d79
commit
9d2df148cd
@ -70,7 +70,7 @@ where
|
|||||||
/// This needs to be a separate struct in order to handle multiple mutable borrows issues.
|
/// This needs to be a separate struct in order to handle multiple mutable borrows issues.
|
||||||
reach_attempts: ReachAttempts<TPeerId>,
|
reach_attempts: ReachAttempts<TPeerId>,
|
||||||
|
|
||||||
/// Max numer of incoming connections.
|
/// Max number of incoming connections.
|
||||||
incoming_limit: Option<u32>,
|
incoming_limit: Option<u32>,
|
||||||
|
|
||||||
/// Unfinished take over message to be delivered.
|
/// Unfinished take over message to be delivered.
|
||||||
|
@ -279,6 +279,8 @@ impl<T: AsRef<[u8]>> Into<RwStreamSink<Chan<T>>> for Chan<T> {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use rand::Rng;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_memory_addr_works() {
|
fn parse_memory_addr_works() {
|
||||||
@ -311,5 +313,43 @@ mod tests {
|
|||||||
assert!(transport.dial("/memory/810172461024613".parse().unwrap()).is_ok());
|
assert!(transport.dial("/memory/810172461024613".parse().unwrap()).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: test that is actually works
|
#[test]
|
||||||
|
fn communicating_between_dialer_and_listener() {
|
||||||
|
let msg = [1, 2, 3];
|
||||||
|
|
||||||
|
// Setup listener.
|
||||||
|
|
||||||
|
let rand_port = rand::random::<u64>().saturating_add(1);
|
||||||
|
let t1_addr: Multiaddr = format!("/memory/{}", rand_port).parse().unwrap();
|
||||||
|
let cloned_t1_addr = t1_addr.clone();
|
||||||
|
|
||||||
|
let t1 = MemoryTransport::default();
|
||||||
|
|
||||||
|
let listener = async move {
|
||||||
|
let listener = t1.listen_on(t1_addr.clone()).unwrap();
|
||||||
|
|
||||||
|
let upgrade = listener.filter_map(|ev| futures::future::ready(
|
||||||
|
ListenerEvent::into_upgrade(ev.unwrap())
|
||||||
|
)).next().await.unwrap();
|
||||||
|
|
||||||
|
let mut socket = upgrade.0.await.unwrap();
|
||||||
|
|
||||||
|
let mut buf = [0; 3];
|
||||||
|
socket.read_exact(&mut buf).await.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(buf, msg);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Setup dialer.
|
||||||
|
|
||||||
|
let t2 = MemoryTransport::default();
|
||||||
|
let dialer = async move {
|
||||||
|
let mut socket = t2.dial(cloned_t1_addr).unwrap().await.unwrap();
|
||||||
|
socket.write_all(&msg).await.unwrap();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Wait for both to finish.
|
||||||
|
|
||||||
|
futures::executor::block_on(futures::future::join(listener, dialer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user