move some stuffs into events
This commit is contained in:
parent
24e01d89b5
commit
745caf5b88
@ -297,12 +297,7 @@ where
|
|||||||
let cur = current_milliseconds();
|
let cur = current_milliseconds();
|
||||||
if cur - last > 60 * 100 {
|
if cur - last > 60 * 100 {
|
||||||
last = cur;
|
last = cur;
|
||||||
manager.fire(
|
manager.fire(Event::update_stats(state.executions(), state.executions_over_seconds()),
|
||||||
Event::UpdateStats {
|
|
||||||
sender_id: 0,
|
|
||||||
new_execs: 1,
|
|
||||||
phantom: PhantomData,
|
|
||||||
},
|
|
||||||
state,
|
state,
|
||||||
corpus,
|
corpus,
|
||||||
)?; // TODO self.new_execs});
|
)?; // TODO self.new_execs});
|
||||||
|
@ -24,14 +24,19 @@ use crate::inputs::Input;
|
|||||||
use crate::serde_anymap::{Ptr, PtrMut};
|
use crate::serde_anymap::{Ptr, PtrMut};
|
||||||
use crate::utils::Rand;
|
use crate::utils::Rand;
|
||||||
use crate::AflError;
|
use crate::AflError;
|
||||||
|
|
||||||
/// Indicate if an event worked or not
|
/// Indicate if an event worked or not
|
||||||
enum BrokerEventResult {
|
pub enum BrokerEventResult {
|
||||||
/// The broker haneled this. No need to pass it on.
|
/// The broker haneled this. No need to pass it on.
|
||||||
Handled,
|
Handled,
|
||||||
/// Pass this message along to the clients.
|
/// Pass this message along to the clients.
|
||||||
Forward,
|
Forward,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait ShowStats {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
/// A custom event, in case a user wants to extend the features (at compile time)
|
/// A custom event, in case a user wants to extend the features (at compile time)
|
||||||
@ -87,7 +92,8 @@ where
|
|||||||
},
|
},
|
||||||
UpdateStats {
|
UpdateStats {
|
||||||
sender_id: u64,
|
sender_id: u64,
|
||||||
new_execs: usize,
|
executions: usize,
|
||||||
|
execs_over_sec: u64,
|
||||||
phantom: PhantomData<(C, E, I, R)>,
|
phantom: PhantomData<(C, E, I, R)>,
|
||||||
},
|
},
|
||||||
Crash {
|
Crash {
|
||||||
@ -133,7 +139,8 @@ where
|
|||||||
} => "New Testcase",
|
} => "New Testcase",
|
||||||
Event::UpdateStats {
|
Event::UpdateStats {
|
||||||
sender_id: _,
|
sender_id: _,
|
||||||
new_execs: _,
|
executions: _,
|
||||||
|
execs_over_sec: _,
|
||||||
phantom: _,
|
phantom: _,
|
||||||
} => "Stats",
|
} => "Stats",
|
||||||
Event::Crash {
|
Event::Crash {
|
||||||
@ -157,13 +164,64 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn log(severity_level: u8, message: String) -> Self {
|
||||||
|
Event::Log {
|
||||||
|
sender_id: 0,
|
||||||
|
severity_level: severity_level,
|
||||||
|
message: message,
|
||||||
|
phantom: PhantomData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn update_stats(executions: usize, execs_over_sec: u64) -> Self {
|
||||||
|
Event::UpdateStats {
|
||||||
|
sender_id: 0,
|
||||||
|
executions: executions,
|
||||||
|
execs_over_sec: execs_over_sec,
|
||||||
|
phantom: PhantomData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO serialize and deserialize, defaults to serde
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait EventManager<C, E, I, R>
|
||||||
|
where
|
||||||
|
C: Corpus<I, R>,
|
||||||
|
E: Executor<I>,
|
||||||
|
I: Input,
|
||||||
|
R: Rand,
|
||||||
|
{
|
||||||
|
/// Check if this EventaManager support a given Event type
|
||||||
|
/// To compare events, use Event::name().as_ptr()
|
||||||
|
fn enabled(&self) -> bool;
|
||||||
|
|
||||||
|
/// Fire an Event
|
||||||
|
fn fire<'a>(
|
||||||
|
&mut self,
|
||||||
|
event: Event<'a, C, E, I, R>,
|
||||||
|
state: &mut State<I, R>,
|
||||||
|
corpus: &mut C,
|
||||||
|
) -> Result<(), AflError>;
|
||||||
|
|
||||||
|
/// Lookup for incoming events and process them.
|
||||||
|
/// Return the number of processes events or an error
|
||||||
|
fn process(&mut self, state: &mut State<I, R>, corpus: &mut C) -> Result<usize, AflError>;
|
||||||
|
|
||||||
|
fn on_recv(&self, _state: &mut State<I, R>, _corpus: &mut C) -> Result<(), AflError> {
|
||||||
|
// TODO: Better way to move out of testcase, or get ref
|
||||||
|
//Ok(corpus.add(self.testcase.take().unwrap()))
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
// TODO the broker has a state? do we need to pass state and corpus?
|
// TODO the broker has a state? do we need to pass state and corpus?
|
||||||
fn handle_in_broker(
|
fn handle_in_broker(
|
||||||
&self,
|
&self,
|
||||||
|
event: &Event<C, E, I, R>,
|
||||||
/*broker: &dyn EventManager<C, E, I, R>,*/ _state: &mut State<I, R>,
|
/*broker: &dyn EventManager<C, E, I, R>,*/ _state: &mut State<I, R>,
|
||||||
_corpus: &mut C,
|
_corpus: &mut C,
|
||||||
) -> Result<BrokerEventResult, AflError> {
|
) -> Result<BrokerEventResult, AflError> {
|
||||||
match self {
|
match event {
|
||||||
Event::LoadInitial {
|
Event::LoadInitial {
|
||||||
sender_id: _,
|
sender_id: _,
|
||||||
phantom: _,
|
phantom: _,
|
||||||
@ -175,7 +233,8 @@ where
|
|||||||
} => Ok(BrokerEventResult::Forward),
|
} => Ok(BrokerEventResult::Forward),
|
||||||
Event::UpdateStats {
|
Event::UpdateStats {
|
||||||
sender_id: _,
|
sender_id: _,
|
||||||
new_execs: _,
|
executions: _,
|
||||||
|
execs_over_sec: _,
|
||||||
phantom: _,
|
phantom: _,
|
||||||
} => {
|
} => {
|
||||||
// TODO
|
// TODO
|
||||||
@ -214,11 +273,12 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn handle_in_client(
|
fn handle_in_client(
|
||||||
self,
|
&self,
|
||||||
|
event: Event<C, E, I, R>,
|
||||||
/*client: &dyn EventManager<C, E, I, R>,*/ _state: &mut State<I, R>,
|
/*client: &dyn EventManager<C, E, I, R>,*/ _state: &mut State<I, R>,
|
||||||
corpus: &mut C,
|
corpus: &mut C,
|
||||||
) -> Result<(), AflError> {
|
) -> Result<(), AflError> {
|
||||||
match self {
|
match event {
|
||||||
Event::NewTestcase {
|
Event::NewTestcase {
|
||||||
sender_id: _,
|
sender_id: _,
|
||||||
input: _,
|
input: _,
|
||||||
@ -234,38 +294,6 @@ where
|
|||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO serialize and deserialize, defaults to serde
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait EventManager<C, E, I, R>
|
|
||||||
where
|
|
||||||
C: Corpus<I, R>,
|
|
||||||
E: Executor<I>,
|
|
||||||
I: Input,
|
|
||||||
R: Rand,
|
|
||||||
{
|
|
||||||
/// Check if this EventaManager support a given Event type
|
|
||||||
/// To compare events, use Event::name().as_ptr()
|
|
||||||
fn enabled(&self) -> bool;
|
|
||||||
|
|
||||||
/// Fire an Event
|
|
||||||
fn fire<'a>(
|
|
||||||
&mut self,
|
|
||||||
event: Event<'a, C, E, I, R>,
|
|
||||||
state: &mut State<I, R>,
|
|
||||||
corpus: &mut C,
|
|
||||||
) -> Result<(), AflError>;
|
|
||||||
|
|
||||||
/// Lookup for incoming events and process them.
|
|
||||||
/// Return the number of processes events or an error
|
|
||||||
fn process(&mut self, state: &mut State<I, R>, corpus: &mut C) -> Result<usize, AflError>;
|
|
||||||
|
|
||||||
fn on_recv(&self, _state: &mut State<I, R>, _corpus: &mut C) -> Result<(), AflError> {
|
|
||||||
// TODO: Better way to move out of testcase, or get ref
|
|
||||||
//Ok(corpus.add(self.testcase.take().unwrap()))
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*TODO
|
/*TODO
|
||||||
@ -311,8 +339,8 @@ where
|
|||||||
state: &mut State<I, R>,
|
state: &mut State<I, R>,
|
||||||
corpus: &mut C,
|
corpus: &mut C,
|
||||||
) -> Result<(), AflError> {
|
) -> Result<(), AflError> {
|
||||||
match event.handle_in_broker(state, corpus)? {
|
match self.handle_in_broker(&event, state, corpus)? {
|
||||||
BrokerEventResult::Forward => (), //event.handle_in_client(state, corpus)?,
|
BrokerEventResult::Forward => (), //self.handle_in_client(event, state, corpus)?,
|
||||||
// Ignore broker-only events
|
// Ignore broker-only events
|
||||||
BrokerEventResult::Handled => (),
|
BrokerEventResult::Handled => (),
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ where
|
|||||||
|
|
||||||
let fitness = state.evaluate_input(&input_mut, engine.executor_mut())?;
|
let fitness = state.evaluate_input(&input_mut, engine.executor_mut())?;
|
||||||
|
|
||||||
|
// TODO post exec on the testcase, like post_exec(testcase_maybe, i as i32)
|
||||||
self.mutator_mut()
|
self.mutator_mut()
|
||||||
.post_exec(fitness, &input_mut, i as i32)?;
|
.post_exec(fitness, &input_mut, i as i32)?;
|
||||||
|
|
||||||
@ -63,7 +64,6 @@ where
|
|||||||
// if needed by particular cases
|
// if needed by particular cases
|
||||||
let testcase_maybe = state.testcase_if_interesting(input_mut, fitness)?;
|
let testcase_maybe = state.testcase_if_interesting(input_mut, fitness)?;
|
||||||
if let Some(mut testcase) = testcase_maybe {
|
if let Some(mut testcase) = testcase_maybe {
|
||||||
// TODO decouple events manager and engine
|
|
||||||
manager.fire(
|
manager.fire(
|
||||||
Event::NewTestcase {
|
Event::NewTestcase {
|
||||||
sender_id: 0,
|
sender_id: 0,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user