chiark / gitweb /
packetframe: tests: Test with BufReaders
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 18 Apr 2021 12:25:25 +0000 (13:25 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 23 Apr 2021 18:32:25 +0000 (19:32 +0100)
We are about to make this get quite involved with a BufReader's buffer
methods, so the BufReader will hide our LumpReader.  So test all
combinations of both.  This still only takes 2.5s in a debug build.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/packetframe.rs

index 0bbf4dad7c4e280e6fdbef1cc5b1cb61b0acaeeb..fe87ec58c944388d32c3725b8df65d789a7f4d6f 100644 (file)
@@ -164,10 +164,10 @@ fn badeof() -> ReadError { RE::IO(io::ErrorKind::UnexpectedEof.into()) }
 
 impl<R:Read> FrameReader<R> {
   pub fn new(r: R) -> FrameReader<R> where R:BufRead {
-    Self::new_unbuf(r)
+    Self::new_raw(Fuse::new(r))
   }
-  fn new_unbuf(r: R) -> FrameReader<R> {
-    FrameReader { inner: Fuse::new(r), state: Idle }
+  fn new_raw(r: Fuse<R>) -> FrameReader<R> {
+    FrameReader { inner: r, state: Idle }
   }
 
   #[throws(io::Error)]
@@ -509,13 +509,18 @@ fn write_test(){
       }
     }
 
-    dbgc!(lumpsize);
-    let lr = LumpReader::new(lumpsize, &*msg.buf);
-    let mut rd = FrameReader::new_unbuf(lr);
-    expect_good(&mut rd, b"hello");
-    expect_boom(&mut rd);
-    expect_good(&mut rd, b"longer!");
-    expect_good_eof(&mut rd);
+    for bufsize in 1..=msg.buf.len()+1 {
+      dbgc!(lumpsize, bufsize);
+      let rd = LumpReader::new(lumpsize, &*msg.buf);
+      let rd = BufReader::with_capacity(bufsize, rd);
+      let rd = Fuse::new(rd);
+      let mut rd = FrameReader::new_raw(rd);
+
+      expect_good(&mut rd, b"hello");
+      expect_boom(&mut rd);
+      expect_good(&mut rd, b"longer!");
+      expect_good_eof(&mut rd);
+    }
   }
 
   // Unexpected EOF mid-chunk-header