use crate::{
stream::testing::{Client, Server},
testing::{ext::*, sim},
};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tracing::{info_span, Instrument};
#[test]
fn other_half_keep_alive() {
sim(|| {
async move {
let client = Client::builder().build();
let mut stream = client.connect_sim("server:443").await.unwrap();
for _ in 0..120 {
stream.write_all(b"ping").await.unwrap();
1.s().sleep().await;
}
stream.shutdown().await.unwrap();
let mut response = vec![];
stream.read_to_end(&mut response).await.unwrap();
assert_eq!(response, b"pong!"[..]);
}
.group("client")
.instrument(info_span!("client"))
.primary()
.spawn();
async move {
let server = Server::udp().port(443).build();
while let Ok((mut stream, peer_addr)) = server.accept().await {
async move {
let mut request = vec![];
stream.read_to_end(&mut request).await.unwrap();
stream.write_from_fin(&mut &b"pong!"[..]).await.unwrap();
}
.instrument(info_span!("stream", ?peer_addr))
.primary()
.spawn();
}
}
.group("server")
.instrument(info_span!("server"))
.spawn();
});
}
#[test]
fn server_no_response() {
sim(|| {
async move {
let client = Client::builder().build();
let mut stream = client.connect_sim("server:443").await.unwrap();
stream.write_all(b"ping").await.unwrap();
stream.shutdown().await.unwrap();
let mut response = vec![];
stream.read_to_end(&mut response).await.unwrap_err();
}
.group("client")
.instrument(info_span!("client"))
.primary()
.spawn();
async move {
let server = Server::udp().port(443).build();
while let Ok((mut stream, peer_addr)) = server.accept().await {
async move {
let mut request = vec![];
stream.read_to_end(&mut request).await.unwrap();
120.s().sleep().await;
}
.instrument(info_span!("stream", ?peer_addr))
.primary()
.spawn();
}
}
.group("server")
.instrument(info_span!("server"))
.spawn();
});
}