fixed testcases:

This commit is contained in:
Dominik Maier 2020-12-13 19:07:49 +01:00
parent f966e2e807
commit 7a7167dcac
2 changed files with 42 additions and 16 deletions

View File

@ -4,6 +4,7 @@ pub mod llmp;
pub mod shmem_translated; pub mod shmem_translated;
use alloc::string::String; use alloc::string::String;
use tuple_list::tuple_list_type;
use core::{marker::PhantomData, time}; use core::{marker::PhantomData, time};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -316,7 +317,7 @@ where
// we need to pass engine to process() too, TODO // we need to pass engine to process() too, TODO
#[cfg(feature = "std")] #[cfg(feature = "std")]
println!("Received new Testcase"); println!("Received new Testcase");
let observers: OT = postcard::from_bytes(&observers_buf)?; let observers: OT = self.deserialize_observers(&observers_buf)?;
let interestingness = state.is_interesting(&input, &observers)?; let interestingness = state.is_interesting(&input, &observers)?;
state.add_if_interesting(corpus, input, interestingness)?; state.add_if_interesting(corpus, input, interestingness)?;
Ok(()) Ok(())
@ -326,6 +327,14 @@ where
)), )),
} }
} }
fn serialize_observers(&mut self, observers: &OT) -> Result<Vec<u8>, AflError> {
Ok(postcard::to_allocvec(observers)?)
}
fn deserialize_observers(&mut self, observers_buf: &[u8]) -> Result<OT, AflError> {
Ok(postcard::from_bytes(observers_buf)?)
}
} }
#[cfg(feature = "std")] #[cfg(feature = "std")]
@ -405,6 +414,8 @@ where
fn start_time(&mut self) -> time::Duration { fn start_time(&mut self) -> time::Duration {
self.start_time self.start_time
} }
} }
#[cfg(feature = "std")] #[cfg(feature = "std")]
@ -513,49 +524,51 @@ where
} }
} }
#[cfg(feature = "std")] #[cfg(feature = "std")]
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::events::Event; use std::io::stderr;
use crate::{events::Event, observers::ObserversTuple};
use crate::inputs::bytes::BytesInput; use crate::inputs::bytes::BytesInput;
use crate::observers::StdMapObserver; use crate::observers::StdMapObserver;
use crate::serde_anymap::{Ptr, PtrMut}; use crate::serde_anymap::{Ptr, PtrMut};
use crate::tuples::{tuple_list, tuple_list_type, MatchNameAndType, Named}; use crate::tuples::{tuple_list, tuple_list_type, MatchNameAndType, Named};
use crate::events::EventManager;
use super::LoggerEventManager;
static mut MAP: [u32; 4] = [0; 4]; static mut MAP: [u32; 4] = [0; 4];
#[test] #[test]
fn test_event_serde() { fn test_event_serde() {
let obv = StdMapObserver::new("test", unsafe { &mut MAP }); let obv = StdMapObserver::new("test", unsafe { &mut MAP });
let mut map = tuple_list!(obv); let mut map = tuple_list!(obv);
let observers_buf = postcard::to_allocvec(&map).unwrap(); let observers_buf = map.serialize().unwrap();
// test_event_mgr.serialize_observers(&map).unwrap();
let i = BytesInput::new(vec![0]); let i = BytesInput::new(vec![0]);
let e = Event::NewTestcase { let e = Event::NewTestcase {
sender_id: 0, sender_id: 0,
input: &i, input: i,
observers_buf: observers_buf, observers_buf,
client_config: "conf".into(), client_config: "conf".into(),
}; };
let j = serde_json::to_string(&e).unwrap(); let serialized = postcard::to_allocvec(&e).unwrap();
let d: Event<BytesInput, tuple_list_type!(StdMapObserver<u32>)> = match postcard::from_bytes::<Event<BytesInput>>(&serialized).unwrap() {
serde_json::from_str(&j).unwrap();
match d {
Event::NewTestcase { Event::NewTestcase {
sender_id: _, sender_id: _,
input: _, input: _,
observers_buf, observers_buf,
client_config: String, client_config: _,
} => { } => {
let o = postcard::from_bytes(&observers_buf) let o = map.deserialize(&observers_buf).unwrap();
.unwrap() let test_observer = o.match_name_type::<StdMapObserver<u32>>("test")
.as_ref()
.match_name_type::<StdMapObserver<u32>>("test")
.unwrap(); .unwrap();
assert_eq!("test", o.name()); assert_eq!("test", test_observer.name());
} }
_ => panic!("mistmatch".to_string()), _ => panic!("mistmatch".to_string()),
}; };

View File

@ -26,10 +26,21 @@ pub trait Observer: Named + serde::Serialize + serde::de::DeserializeOwned + 'st
pub trait ObserversTuple: pub trait ObserversTuple:
MatchNameAndType + MatchType + serde::Serialize + serde::de::DeserializeOwned MatchNameAndType + MatchType + serde::Serialize + serde::de::DeserializeOwned
{ {
/// Reset all executors in the tuple
fn reset_all(&mut self) -> Result<(), AflError>; fn reset_all(&mut self) -> Result<(), AflError>;
fn post_exec_all(&mut self) -> Result<(), AflError>; fn post_exec_all(&mut self) -> Result<(), AflError>;
//fn for_each(&self, f: fn(&dyn Observer)); //fn for_each(&self, f: fn(&dyn Observer));
//fn for_each_mut(&mut self, f: fn(&mut dyn Observer)); //fn for_each_mut(&mut self, f: fn(&mut dyn Observer));
/// Serialize this tuple to a buf
fn serialize(&self) -> Result<Vec<u8>, AflError> {
Ok(postcard::to_allocvec(&self)?)
}
/// Deserilaize
fn deserialize(&self, serialized: &[u8]) -> Result<Self, AflError> {
Ok(postcard::from_bytes(serialized)?)
}
} }
impl ObserversTuple for () { impl ObserversTuple for () {
@ -39,6 +50,8 @@ impl ObserversTuple for () {
fn post_exec_all(&mut self) -> Result<(), AflError> { fn post_exec_all(&mut self) -> Result<(), AflError> {
Ok(()) Ok(())
} }
//fn for_each(&self, f: fn(&dyn Observer)) { } //fn for_each(&self, f: fn(&dyn Observer)) { }
//fn for_each_mut(&mut self, f: fn(&mut dyn Observer)) { } //fn for_each_mut(&mut self, f: fn(&mut dyn Observer)) { }
} }