use std::net::Shutdown;
use completeio::net::{UnixListener, UnixStream};
#[test]
fn accept_read_write() -> std::io::Result<()> {
completeio::task::block_on(async {
let dir = tempfile::Builder::new()
.prefix("completeio-uds-tests")
.tempdir()
.unwrap();
let sock_path = dir.path().join("connect.sock");
let listener = UnixListener::bind(&sock_path)?;
let client = UnixStream::connect(&sock_path)?;
let (server, _) = listener.accept().await?;
let write_len = client.send_all("hello").await.0?;
assert_eq!(write_len, 5);
drop(client);
let buf = Vec::with_capacity(5);
let (res, buf) = server.recv_exact(buf).await;
assert_eq!(res.unwrap(), 5);
assert_eq!(&buf[..], b"hello");
let len = server.recv(buf).await.0?;
assert_eq!(len, 0);
Ok(())
})
}
#[test]
fn shutdown() -> std::io::Result<()> {
completeio::task::block_on(async {
let dir = tempfile::Builder::new()
.prefix("completeio-uds-tests")
.tempdir()
.unwrap();
let sock_path = dir.path().join("connect.sock");
let listener = UnixListener::bind(&sock_path)?;
let client = UnixStream::connect(&sock_path)?;
let (server, _) = listener.accept().await?;
client.shutdown(Shutdown::Both)?;
let n = server.recv(Vec::with_capacity(1)).await.0?;
assert_eq!(n, 0);
Ok(())
})
}