mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-28 09:11:34 +00:00
core/src/transport: Poll Transport directly, remove Transport::Listener (#2652)
Remove the concept of individual `Transport::Listener` streams from `Transport`. Instead the `Transport` is polled directly via `Transport::poll`. The `Transport` is now responsible for driving its listeners.
This commit is contained in:
@ -115,9 +115,10 @@ where
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use futures::StreamExt;
|
||||
use libp2p_core::{
|
||||
multiaddr::multiaddr,
|
||||
transport::{memory::MemoryTransport, ListenerEvent, Transport},
|
||||
transport::{memory::MemoryTransport, Transport},
|
||||
};
|
||||
use rand::{thread_rng, Rng};
|
||||
use std::time::Duration;
|
||||
@ -125,24 +126,28 @@ mod tests {
|
||||
#[test]
|
||||
fn ping_pong() {
|
||||
let mem_addr = multiaddr![Memory(thread_rng().gen::<u64>())];
|
||||
let mut listener = MemoryTransport.listen_on(mem_addr).unwrap();
|
||||
let mut transport = MemoryTransport::new().boxed();
|
||||
transport.listen_on(mem_addr).unwrap();
|
||||
|
||||
let listener_addr =
|
||||
if let Some(Some(Ok(ListenerEvent::NewAddress(a)))) = listener.next().now_or_never() {
|
||||
a
|
||||
} else {
|
||||
panic!("MemoryTransport not listening on an address!");
|
||||
};
|
||||
let listener_addr = transport
|
||||
.select_next_some()
|
||||
.now_or_never()
|
||||
.and_then(|ev| ev.into_new_address())
|
||||
.expect("MemoryTransport not listening on an address!");
|
||||
|
||||
async_std::task::spawn(async move {
|
||||
let listener_event = listener.next().await.unwrap();
|
||||
let (listener_upgrade, _) = listener_event.unwrap().into_upgrade().unwrap();
|
||||
let transport_event = transport.next().await.unwrap();
|
||||
let (listener_upgrade, _) = transport_event.into_incoming().unwrap();
|
||||
let conn = listener_upgrade.await.unwrap();
|
||||
recv_ping(conn).await.unwrap();
|
||||
});
|
||||
|
||||
async_std::task::block_on(async move {
|
||||
let c = MemoryTransport.dial(listener_addr).unwrap().await.unwrap();
|
||||
let c = MemoryTransport::new()
|
||||
.dial(listener_addr)
|
||||
.unwrap()
|
||||
.await
|
||||
.unwrap();
|
||||
let (_, rtt) = send_ping(c).await.unwrap();
|
||||
assert!(rtt > Duration::from_secs(0));
|
||||
});
|
||||
|
Reference in New Issue
Block a user