use alloc::vec::Vec;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Operation {
Mmap,
Read,
Write,
Alloc,
Send,
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum Fault {
Mmap {
fail_after: u64,
},
Read {
fail_after: u64,
},
Write {
fail_after: u64,
},
Alloc {
fail_after: u64,
},
Send {
fail_after: u64,
},
Probabilistic {
op: Operation,
probability: f64,
},
Persistent {
op: Operation,
fail_after: u64,
},
Multiple {
op: Operation,
fail_points: Vec<u64>,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InjectionError {
DuplicateFailPoint,
}
impl core::fmt::Display for InjectionError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::DuplicateFailPoint => write!(
f,
"Duplicate fail point provided. Fix: Use unique fail points or clear existing faults."
),
}
}
}
impl core::error::Error for InjectionError {}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct ClearedFaults {
pub mmap: usize,
pub read: usize,
pub write: usize,
pub alloc: usize,
pub send: usize,
}