From 0b7c1fb08e3c56f833c4b4fab03e458f1bc937f6 Mon Sep 17 00:00:00 2001 From: Vasant Karasulli Date: Fri, 5 Jan 2024 20:42:57 +0100 Subject: [PATCH] log_buffer: add unit tests to test the functionality Signed-off-by: Vasant Karasulli --- src/log_buffer/mod.rs | 93 +++++++++++++++++++++++++++++++++++++++++++ src/types.rs | 5 +++ 2 files changed, 98 insertions(+) diff --git a/src/log_buffer/mod.rs b/src/log_buffer/mod.rs index ee257cfae7..4bfdf91973 100644 --- a/src/log_buffer/mod.rs +++ b/src/log_buffer/mod.rs @@ -9,13 +9,17 @@ use core::fmt::Debug; use crate::locking::{LockGuard, SpinLock}; use crate::string::FixedString; + +#[cfg(not(test))] use crate::types::{LINE_BUFFER_SIZE, PAGE_SIZE}; + use crate::utils::StringRingBuffer; use alloc::string::ToString; use alloc::vec; use alloc::vec::Vec; +#[cfg(not(test))] const BUF_SIZE: usize = PAGE_SIZE; #[derive(Copy, Clone, Debug)] @@ -61,3 +65,92 @@ pub fn log_buffer() -> LockGuard<'static, LogBuffer> { // this function does not need to be marked unsafe. unsafe { LB.lock() } } + +#[cfg(test)] +const BUF_SIZE: usize = 64; + +#[cfg(test)] +use crate::types::LINE_BUFFER_SIZE; + +#[test] +fn test_read_write_normal() { + let mut fs = FixedString::::new(); + for i in 1..=LINE_BUFFER_SIZE { + fs.push(char::from_u32(i as u32).unwrap()); + } + + log_buffer().write_log(&fs); + + let v = log_buffer().read_log(); + assert_eq!(v.len(), LINE_BUFFER_SIZE); + for i in 1..=v.len() { + assert_eq!(i as u8, v[i - 1]); + } +} + +#[test] +fn test_read_write_interleaved() { + let mut fs = FixedString::::new(); + for i in 1..=LINE_BUFFER_SIZE / 2 { + fs.push(char::from_u32(i as u32).unwrap()); + } + + log_buffer().write_log(&fs); + + let v = log_buffer().read_log(); + assert_eq!(v.len(), LINE_BUFFER_SIZE / 2); + for i in 1..=v.len() { + assert_eq!(i as u8, v[i - 1]); + } + + fs.clear(); + for i in LINE_BUFFER_SIZE / 2..LINE_BUFFER_SIZE { + fs.push(char::from_u32((i + 1) as u32).unwrap()); + } + + log_buffer().write_log(&fs); + + let v = log_buffer().read_log(); + assert_eq!(v.len(), LINE_BUFFER_SIZE / 2); + for i in 1..v.len() { + let val = (i + LINE_BUFFER_SIZE / 2) as u8; + assert_eq!(val, v[i - 1]); + } +} + +#[test] +fn test_write_wrap_around() { + let mut fs = FixedString::::new(); + for i in 1..=LINE_BUFFER_SIZE / 2 { + fs.push(char::from_u32(i as u32).unwrap()); + } + + log_buffer().write_log(&fs); + + let v = log_buffer().read_log(); + assert_eq!(v.len(), LINE_BUFFER_SIZE / 2); + for i in 1..=v.len() { + assert_eq!(i as u8, v[i - 1]); + } + + fs.clear(); + for i in 1..=LINE_BUFFER_SIZE { + let val = (i + LINE_BUFFER_SIZE / 2) as u32; + fs.push(char::from_u32(val).unwrap()); + } + + log_buffer().write_log(&fs); + + let v = log_buffer().read_log(); + assert_eq!(v.len(), LINE_BUFFER_SIZE); + for i in 1..v.len() { + let val = (i + LINE_BUFFER_SIZE / 2) as u8; + assert_eq!(val, v[i - 1]); + } +} + +#[test] +fn test_read_empty_buffer() { + let v = log_buffer().read_log(); + assert_eq!(v.len(), 0); +} diff --git a/src/types.rs b/src/types.rs index ba38bfbef7..34581f6f24 100644 --- a/src/types.rs +++ b/src/types.rs @@ -46,4 +46,9 @@ pub const GUEST_VMPL: usize = 2; const _: () = assert!(GUEST_VMPL > 0 && GUEST_VMPL < VMPL_MAX); pub const MAX_CPUS: usize = 512; + +#[cfg(not(test))] pub const LINE_BUFFER_SIZE: usize = 256; + +#[cfg(test)] +pub const LINE_BUFFER_SIZE: usize = 64;