From 0a2b04aceb31e3172b9f557590edb30dd2da49f4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 17 Apr 2021 13:45:54 +0100 Subject: [PATCH] packetframe: tests: LumpReader tests short reads Signed-off-by: Ian Jackson --- src/packetframe.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/packetframe.rs b/src/packetframe.rs index 3b0eb76d..9f61eba3 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -377,4 +377,32 @@ fn write_test(){ expect_good(&mut rd, b"longer!"); }; read_all(&mut &*msg.buf); + + #[derive(Debug)] + struct LumpReader { + inner: R, + inlump: usize, + lumpsize: usize, + } + impl LumpReader { + fn new(lumpsize: usize, inner: R) -> Self { + LumpReader { inner, lumpsize, inlump: 0 } + } + } + impl Read for LumpReader { + #[throws(io::Error)] + fn read(&mut self, buf: &mut [u8]) -> usize { + if self.inlump == 0 { self.inlump = self.lumpsize } + let want = min(self.inlump, buf.len()); + let r = self.inner.read(&mut buf[0..want])?; + self.inlump -= r; + r + } + } + + for lumpsize in 1..msg.buf.len() { + dbgc!(lumpsize); + let mut lr = LumpReader::new(lumpsize, &*msg.buf); + read_all(&mut lr); + } } -- 2.30.2