mirror of
https://github.com/awfixers-stuff/src.git
synced 2026-03-27 21:06:00 +00:00
62 lines
2.1 KiB
Rust
62 lines
2.1 KiB
Rust
#[cfg(feature = "blocking-io")]
|
|
use std::io::Write;
|
|
|
|
use bstr::ByteSlice;
|
|
#[cfg(all(feature = "async-io", not(feature = "blocking-io")))]
|
|
use futures_lite::prelude::*;
|
|
#[cfg(all(feature = "async-io", not(feature = "blocking-io")))]
|
|
use gix_packetline::async_io::Writer;
|
|
#[cfg(all(feature = "blocking-io", not(feature = "async-io")))]
|
|
use gix_packetline::blocking_io::Writer;
|
|
|
|
const MAX_DATA_LEN: usize = 65516;
|
|
const MAX_LINE_LEN: usize = 4 + MAX_DATA_LEN;
|
|
|
|
#[allow(clippy::unused_io_amount)] // under test
|
|
#[maybe_async::test(feature = "blocking-io", async(feature = "async-io", async_std::test))]
|
|
async fn each_write_results_in_one_line() -> crate::Result {
|
|
let mut w = Writer::new(Vec::new());
|
|
w.write_all(b"hello").await?;
|
|
w.write(b"world!").await?;
|
|
let buf = w.into_inner();
|
|
assert_eq!(buf.as_bstr(), b"0009hello000aworld!".as_bstr());
|
|
Ok(())
|
|
}
|
|
|
|
#[allow(clippy::unused_io_amount)] // under test
|
|
#[maybe_async::test(feature = "blocking-io", async(feature = "async-io", async_std::test))]
|
|
async fn write_text_and_write_binary() -> crate::Result {
|
|
let buf = {
|
|
let mut w = Writer::new(Vec::new());
|
|
w.enable_text_mode();
|
|
w.write_all(b"hello").await?;
|
|
w.enable_binary_mode();
|
|
w.write(b"world").await?;
|
|
w.into_inner()
|
|
};
|
|
assert_eq!(buf.as_bstr(), b"000ahello\n0009world".as_bstr());
|
|
Ok(())
|
|
}
|
|
|
|
#[allow(clippy::unused_io_amount)] // under test
|
|
#[maybe_async::test(feature = "blocking-io", async(feature = "async-io", async_std::test))]
|
|
async fn huge_writes_are_split_into_lines() -> crate::Result {
|
|
let buf = {
|
|
let data = vec![0u8; MAX_DATA_LEN * 2];
|
|
let mut w = Writer::new(Vec::new());
|
|
w.write(&data).await?;
|
|
w.into_inner()
|
|
};
|
|
assert_eq!(buf.len(), MAX_LINE_LEN * 2);
|
|
Ok(())
|
|
}
|
|
|
|
#[maybe_async::test(feature = "blocking-io", async(feature = "async-io", async_std::test))]
|
|
async fn empty_writes_fail_with_error() {
|
|
let res = Writer::new(Vec::new()).write(&[]).await;
|
|
assert_eq!(
|
|
res.unwrap_err().to_string(),
|
|
"empty packet lines are not permitted as '0004' is invalid"
|
|
);
|
|
}
|