xmlstream: add tests to capture thingy
This would've caught the embarrassing error made in the previous commit.
This commit is contained in:
parent
c795921631
commit
263839a5f8
1 changed files with 72 additions and 0 deletions
|
|
@ -202,3 +202,75 @@ pub(super) fn log_recv(err: Option<&xmpp_parsers::Error>, capture: Option<Vec<u8
|
||||||
pub(super) fn log_send(data: &[u8]) {
|
pub(super) fn log_send(data: &[u8]) {
|
||||||
log::trace!("SEND {}", LogXsoBuf(data));
|
log::trace!("SEND {}", LogXsoBuf(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
use tokio::io::{AsyncBufReadExt, AsyncReadExt};
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn captures_data_read_via_async_read() {
|
||||||
|
let mut src = &b"Hello World!"[..];
|
||||||
|
let src = tokio::io::BufReader::new(&mut src);
|
||||||
|
let mut src = CaptureBufRead::wrap(src);
|
||||||
|
src.enable_capture();
|
||||||
|
|
||||||
|
let mut dst = [0u8; 8];
|
||||||
|
assert_eq!(src.read(&mut dst[..]).await.unwrap(), 8);
|
||||||
|
assert_eq!(&dst, b"Hello Wo");
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b"Hello Wo");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn captures_data_read_via_async_buf_read() {
|
||||||
|
let mut src = &b"Hello World!"[..];
|
||||||
|
let src = tokio::io::BufReader::new(&mut src);
|
||||||
|
let mut src = CaptureBufRead::wrap(src);
|
||||||
|
src.enable_capture();
|
||||||
|
|
||||||
|
assert_eq!(src.fill_buf().await.unwrap().len(), 12);
|
||||||
|
// We haven't consumed any bytes yet -> must return zero.
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0);
|
||||||
|
|
||||||
|
src.consume(5);
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b"Hello");
|
||||||
|
|
||||||
|
src.consume(6);
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b" World");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn discard_capture_drops_consumed_data() {
|
||||||
|
let mut src = &b"Hello World!"[..];
|
||||||
|
let src = tokio::io::BufReader::new(&mut src);
|
||||||
|
let mut src = CaptureBufRead::wrap(src);
|
||||||
|
src.enable_capture();
|
||||||
|
|
||||||
|
assert_eq!(src.fill_buf().await.unwrap().len(), 12);
|
||||||
|
// We haven't consumed any bytes yet -> must return zero.
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0);
|
||||||
|
|
||||||
|
src.consume(5);
|
||||||
|
Pin::new(&mut src).discard_capture();
|
||||||
|
|
||||||
|
src.consume(6);
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b" World");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn captured_data_accumulates() {
|
||||||
|
let mut src = &b"Hello World!"[..];
|
||||||
|
let src = tokio::io::BufReader::new(&mut src);
|
||||||
|
let mut src = CaptureBufRead::wrap(src);
|
||||||
|
src.enable_capture();
|
||||||
|
|
||||||
|
assert_eq!(src.fill_buf().await.unwrap().len(), 12);
|
||||||
|
// We haven't consumed any bytes yet -> must return zero.
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap().len(), 0);
|
||||||
|
|
||||||
|
src.consume(5);
|
||||||
|
src.consume(6);
|
||||||
|
assert_eq!(Pin::new(&mut src).take_capture().unwrap(), b"Hello World");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue