denyhosts/clamav/libclamav_rust/.cargo/vendor/weezl/tests/async.rs

49 lines
1.5 KiB
Rust

use std::{env, fs};
use tokio::io::BufReader;
use tokio::net::{TcpListener, TcpStream};
use tokio_util::compat::TokioAsyncReadCompatExt as _;
use weezl::{decode, encode, BitOrder};
async fn pair() -> (TcpStream, TcpStream) {
let listener = TcpListener::bind("localhost:0")
.await
.expect("No loop tcp for testing");
let addr = listener.local_addr().expect("No address for listener");
let connect = TcpStream::connect(addr);
let accept = listener.accept();
let (a, (b, _)) = tokio::try_join!(connect, accept).expect("Can connect");
(a, b)
}
async fn assert_send_through(data: &[u8], send: &mut TcpStream, recv: &mut TcpStream) {
let mut send = send.compat();
let mut recv = BufReader::new(recv).compat();
let mut encoder = encode::Encoder::new(BitOrder::Lsb, 8);
let encode = encoder.into_async(&mut send).encode_all(data);
let mut recv_buffer = vec![];
let mut decoder = decode::Decoder::new(BitOrder::Lsb, 8);
let decode = decoder.into_async(&mut recv_buffer).decode_all(&mut recv);
let (encode, decode) = tokio::join!(encode, decode);
encode.status.expect("Could send/encoded data");
decode.status.expect("Could recv/decode data");
assert_eq!(recv_buffer, data);
}
#[test]
fn with_streams() {
let file = env::args().next().unwrap();
let data = fs::read(file).unwrap();
let rt = tokio::runtime::Runtime::new().expect("runtime");
let _enter = rt.enter();
let (mut send, mut recv) = rt.block_on(pair());
rt.block_on(assert_send_through(&data, &mut send, &mut recv));
}