#![allow(unused_imports)]
use websocket_toolkit::messages::{MessageHandler, MessageFormat};
use arbitrary::{Arbitrary, Unstructured};
use log::{info, error};
#[derive(Debug)]
struct FuzzTestData {
content: Vec<u8>,
format: MessageFormat,
}
impl<'a> Arbitrary<'a> for FuzzTestData {
fn arbitrary(u: &mut Unstructured<'a>) -> arbitrary::Result<Self> {
let content = u.arbitrary::<Vec<u8>>()?; let format = if u.arbitrary::<bool>()? {
MessageFormat::Json
} else {
MessageFormat::Cbor
}; Ok(FuzzTestData { content, format })
}
}
fn fuzz_deserialization(data: &[u8], format: MessageFormat) {
match MessageHandler::deserialize::<String>(data, format) {
Ok(Some(result)) => info!("Valid deserialization for {:?}: {:?}", format, result),
Ok(None) => error!("Deserialization returned None for {:?}", format),
Err(e) => error!("Deserialization failed for {:?}: {:?}", format, e),
}
}
#[test]
fn fuzz_test_deserialization() {
let raw_data = b"random_test_data_for_fuzzing";
let mut u = Unstructured::new(raw_data);
if let Ok(fuzz_data) = FuzzTestData::arbitrary(&mut u) {
fuzz_deserialization(&fuzz_data.content, fuzz_data.format);
}
}