Skip to content

Commit

Permalink
feat: add concurrent and buffer parameters into FuzzInput (#3921)
Browse files Browse the repository at this point in the history
  • Loading branch information
WenyXu authored Jan 6, 2024
1 parent e3f554f commit 4c27e2c
Showing 1 changed file with 26 additions and 2 deletions.
28 changes: 26 additions & 2 deletions core/fuzz/fuzz_writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,23 @@ const MAX_DATA_SIZE: usize = 16 * 1024 * 1024;
#[derive(Debug, Clone)]
struct FuzzInput {
actions: Vec<WriteAction>,
buffer: Option<usize>,
concurrent: Option<usize>,
}

impl Arbitrary<'_> for FuzzInput {
fn arbitrary(u: &mut Unstructured<'_>) -> arbitrary::Result<Self> {
let mut actions = vec![];
let buffer = if u.int_in_range(0..=1)? == 1 {
Some(u.int_in_range(1..=8 * 1024 * 1024)?)
} else {
None
};
let concurrent = if u.int_in_range(0..=1)? == 1 {
Some(u.int_in_range(0..=16)?)
} else {
None
};

let count = u.int_in_range(128..=1024)?;

Expand All @@ -45,7 +57,11 @@ impl Arbitrary<'_> for FuzzInput {
actions.push(WriteAction::Write(size));
}

Ok(FuzzInput { actions })
Ok(FuzzInput {
actions,
buffer,
concurrent,
})
}
}

Expand All @@ -62,7 +78,15 @@ async fn fuzz_writer(op: Operator, input: FuzzInput) -> Result<()> {

let checker = WriteChecker::new(total_size);

let mut writer = op.writer_with(&path).buffer(8 * 1024 * 1024).await?;
let mut writer = op.writer_with(&path);
if let Some(buffer) = input.buffer {
writer = writer.buffer(buffer);
}
if let Some(concurrent) = input.concurrent {
writer = writer.concurrent(concurrent);
}

let mut writer = writer.await?;

for chunk in checker.chunks() {
writer.write(chunk.clone()).await?;
Expand Down

0 comments on commit 4c27e2c

Please sign in to comment.