use bytes::Bytes;
use bytes::BytesMut;
use rand::Rng;
use rand::rng;
use crate::utils::sha256_digest;
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum WriteAction {
Write(usize),
}
pub struct WriteChecker {
chunks: Vec<Bytes>,
data: Bytes,
}
impl WriteChecker {
pub fn new(size: Vec<usize>) -> Self {
let mut rng = rng();
let mut chunks = Vec::with_capacity(size.len());
for i in size {
let mut bs = vec![0u8; i];
rng.fill_bytes(&mut bs);
chunks.push(Bytes::from(bs));
}
let data = chunks.iter().fold(BytesMut::new(), |mut acc, x| {
acc.extend_from_slice(x);
acc
});
WriteChecker {
chunks,
data: data.freeze(),
}
}
pub fn chunks(&self) -> &[Bytes] {
&self.chunks
}
pub fn check(&self, actual: &[u8]) {
assert_eq!(
sha256_digest(actual),
sha256_digest(&self.data),
"check failed: result is not expected"
)
}
}