-
Notifications
You must be signed in to change notification settings - Fork 63
Open
Description
There are certain error conditions we want to test out that only happen when the TCP connection stalls and doesn't write right away (returns Poll::Pending
on write). Would be great if Turmoil allowed for that - so in the simple code below, the host b
just waited forever instead of the simulation panicking with socket buffer full
.
use std::{
net::{IpAddr, Ipv4Addr},
time::Duration,
};
use tokio::{io::AsyncWriteExt, time::sleep};
use turmoil::{
net::{TcpListener, TcpStream},
Result,
};
#[test]
fn want_backpressure() -> Result {
let mut sim = turmoil::Builder::new().build();
sim.host("b", || async {
let listener = TcpListener::bind((IpAddr::from(Ipv4Addr::UNSPECIFIED), 9876))
.await
.expect("Bind to local host");
let (mut conn, _addr) = listener.accept().await.expect("Accept conn");
for _ in 0..10000 {
conn.write_all(b"message").await.expect("Write");
conn.flush().await.expect("flush");
}
Ok(())
});
sim.client("a", async move {
let _conn = TcpStream::connect("b:9876").await.expect("Open to b");
sleep(Duration::from_millis(100)).await;
Ok(())
});
sim.run()
}
link2xt
Metadata
Metadata
Assignees
Labels
No labels