test(core): add tests for VersionBytesBuf

This commit is contained in:
2021-04-24 00:38:10 +02:00
parent 14d6b1d051
commit 5ab559bd7e
2 changed files with 141 additions and 3 deletions

View File

@@ -285,8 +285,6 @@ impl<'a> Buf for VersionBytesBuf<'a> {
} }
fn chunks_vectored<'b>(&'b self, dst: &mut [IoSlice<'b>]) -> usize { fn chunks_vectored<'b>(&'b self, dst: &mut [IoSlice<'b>]) -> usize {
// TODO: TESTING!
if dst.len() == 0 { if dst.len() == 0 {
return 0; return 0;
} }
@@ -302,7 +300,7 @@ impl<'a> Buf for VersionBytesBuf<'a> {
} }
} else { } else {
let pos = self.pos - VERSION_LEN; let pos = self.pos - VERSION_LEN;
if self.content.len() <= pos { if self.content.len() == pos {
0 0
} else { } else {
dst[0] = IoSlice::new(&self.content[pos..]); dst[0] = IoSlice::new(&self.content[pos..]);

View File

@@ -0,0 +1,140 @@
use bytes::Buf;
use crdt_enc::utils::VersionBytesBuf;
use std::io::IoSlice;
use uuid::Uuid;
const UUID: Uuid = Uuid::from_u128(0xd8d2cf50_a5c6_433b_98e6_8c268fd84fa0);
#[test]
fn simple() {
let mut buf = VersionBytesBuf::new(UUID, &[1, 2, 3]);
assert_eq!(buf.remaining(), 16 + 3);
let chunk = buf.chunk();
assert_eq!(chunk.len(), 16);
assert_eq!(chunk, UUID.as_bytes());
buf.advance(16);
assert_eq!(buf.remaining(), 3);
let chunk = buf.chunk();
assert_eq!(chunk.len(), 3);
assert_eq!(chunk, [1, 2, 3]);
buf.advance(3);
assert_eq!(buf.remaining(), 0);
// advance by 0 should never panic
buf.advance(0);
assert_eq!(buf.remaining(), 0);
}
#[test]
fn unaligned_advance() {
let mut buf = VersionBytesBuf::new(UUID, &[1, 2, 3]);
buf.advance(4);
assert_eq!(buf.remaining(), 12 + 3);
let chunk = buf.chunk();
assert_eq!(chunk.len(), 12);
assert_eq!(chunk, &UUID.as_bytes()[4..]);
buf.advance(12 + 1);
assert_eq!(buf.remaining(), 2);
let chunk = buf.chunk();
assert_eq!(chunk.len(), 2);
assert_eq!(chunk, [2, 3]);
buf.advance(2);
assert_eq!(buf.remaining(), 0);
// advance by 0 should never panic
buf.advance(0);
assert_eq!(buf.remaining(), 0);
}
#[test]
#[should_panic]
fn out_of_bounds_advance() {
let mut buf = VersionBytesBuf::new(UUID, &[1, 2, 3]);
buf.advance(16 + 3 + 1);
}
#[test]
fn vectored() {
let mut buf = VersionBytesBuf::new(UUID, &[1, 2, 3]);
let mut io_slice = [];
assert_eq!(buf.chunks_vectored(&mut io_slice), 0);
let mut io_slice = [IoSlice::new(&[99, 98])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 1);
assert_eq!(io_slice[0].as_ref(), UUID.as_bytes());
let mut io_slice = [IoSlice::new(&[99, 98]), IoSlice::new(&[97, 96])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 2);
assert_eq!(io_slice[0].as_ref(), UUID.as_bytes());
assert_eq!(io_slice[1].as_ref(), [1, 2, 3]);
let mut io_slice = [
IoSlice::new(&[99, 98]),
IoSlice::new(&[97, 96]),
IoSlice::new(&[95, 94]),
];
assert_eq!(buf.chunks_vectored(&mut io_slice), 2);
assert_eq!(io_slice[0].as_ref(), UUID.as_bytes());
assert_eq!(io_slice[1].as_ref(), [1, 2, 3]);
assert_eq!(io_slice[2].as_ref(), [95, 94]);
buf.advance(5);
let mut io_slice = [IoSlice::new(&[99, 98])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 1);
assert_eq!(io_slice[0].as_ref(), &UUID.as_bytes()[5..]);
let mut io_slice = [IoSlice::new(&[99, 98]), IoSlice::new(&[97, 96])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 2);
assert_eq!(io_slice[0].as_ref(), &UUID.as_bytes()[5..]);
assert_eq!(io_slice[1].as_ref(), [1, 2, 3]);
let mut io_slice = [
IoSlice::new(&[99, 98]),
IoSlice::new(&[97, 96]),
IoSlice::new(&[95, 94]),
];
assert_eq!(buf.chunks_vectored(&mut io_slice), 2);
assert_eq!(io_slice[0].as_ref(), &UUID.as_bytes()[5..]);
assert_eq!(io_slice[1].as_ref(), [1, 2, 3]);
assert_eq!(io_slice[2].as_ref(), [95, 94]);
buf.advance(11 + 1);
let mut io_slice = [IoSlice::new(&[99, 98])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 1);
assert_eq!(io_slice[0].as_ref(), [2, 3]);
let mut io_slice = [IoSlice::new(&[99, 98]), IoSlice::new(&[97, 96])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 1);
assert_eq!(io_slice[0].as_ref(), [2, 3]);
assert_eq!(io_slice[1].as_ref(), [97, 96]);
buf.advance(2);
let mut io_slice = [IoSlice::new(&[99, 98])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 0);
assert_eq!(io_slice[0].as_ref(), [99, 98]);
let mut io_slice = [IoSlice::new(&[99, 98]), IoSlice::new(&[97, 96])];
assert_eq!(buf.chunks_vectored(&mut io_slice), 0);
assert_eq!(io_slice[0].as_ref(), [99, 98]);
assert_eq!(io_slice[1].as_ref(), [97, 96]);
}