Skip to content

Commit

Permalink
improve the test fuzzer
Browse files Browse the repository at this point in the history
  • Loading branch information
sylvestre committed Jun 2, 2023
1 parent b8658ef commit af6c3e7
Showing 1 changed file with 90 additions and 15 deletions.
105 changes: 90 additions & 15 deletions fuzz/fuzz_targets/fuzz_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,50 +58,124 @@ fn generate_test_arg() -> String {
arg: "-z".to_string(),
arg_type: "STRING".to_string(),
},
TestArg {
arg: "-n".to_string(),
arg_type: "STRING".to_string(),
},
TestArg {
arg: "=".to_string(),
arg_type: "STRING1,STRING2".to_string(),
arg_type: "STRING,STRING".to_string(),
},
TestArg {
arg: "!=".to_string(),
arg_type: "STRING,STRING".to_string(),
},
TestArg {
arg: "-eq".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-ne".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-gt".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-ge".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-lt".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-le".to_string(),
arg_type: "INTEGER,INTEGER".to_string(),
},
TestArg {
arg: "-f".to_string(),
arg_type: "FILE".to_string(),
},
TestArg {
arg: "-d".to_string(),
arg_type: "FILE".to_string(),
},
TestArg {
arg: "-e".to_string(),
arg_type: "FILE".to_string(),
},
TestArg {
arg: "-ef".to_string(),
arg_type: "FILE,FILE".to_string(),
},
TestArg {
arg: "-nt".to_string(),
arg_type: "FILE,FILE".to_string(),
},
// Add more TestArg structs for all possible arguments
];

let mut arg = String::new();

let choice = rng.gen_range(0..=3);
let choice = rng.gen_range(0..=5);

match choice {
0 => {
arg.push_str(&rng.gen_range(-100..=100).to_string());
}
1 => {
1 | 2 | 3 => {
let test_arg = test_args
.choose(&mut rng)
.expect("Failed to choose a random test argument");
arg.push_str(&test_arg.arg);
if test_arg.arg_type.contains("INTEGER") {
arg.push_str(&rng.gen_range(-100..=100).to_string());
arg.push_str(&test_arg.arg);
arg.push_str(&rng.gen_range(-100..=100).to_string());
arg.push_str(&format!(
"{} {} {}",
&rng.gen_range(-100..=100).to_string(),
test_arg.arg,
&rng.gen_range(-100..=100).to_string()
));
} else if test_arg.arg_type.contains("STRING,STRING") {
let random_str = generate_random_string(rng.gen_range(1..=10));
let random_str2 = generate_random_string(rng.gen_range(1..=10));

arg.push_str(&format!(
"{} {} {}",
&random_str, test_arg.arg, &random_str2
));
} else if test_arg.arg_type.contains("STRING") {
let random_str = generate_random_string(rng.gen_range(1..=10));
arg.push_str(&random_str);
arg.push_str(&format!("{} {}", test_arg.arg, &random_str));
} else if test_arg.arg_type.contains("FILE,FILE") {
let path = match rng.gen_range(0..=3) {
0 => "/dev/null",
1 => "/dev/random",
2 => "/tmp",
_ => "/dev/urandom",
};
let path2 = match rng.gen_range(0..=3) {
0 => "/dev/null",
1 => "/dev/random",
2 => "/tmp",
_ => "/dev/urandom",
};
arg.push_str(&format!("{} {} {}", path, test_arg.arg, path2));
} else if test_arg.arg_type.contains("FILE") {
let choice = rng.gen_range(0..=2);
let path = match choice {
let path = match rng.gen_range(0..=3) {
0 => "/dev/null",
1 => "/dev/random",
2 => "/tmp",
_ => "/dev/urandom",
};
arg.push_str(&format!("{}{}", test_arg.arg, path));
arg.push_str(&format!("{} {}", test_arg.arg, path));
}
}
2 => {
4 => {
let random_str = generate_random_string(rng.gen_range(1..=10));
arg.push_str(&random_str);
}
_ => {
let choice = rng.gen_range(0..=2);
let path = match choice {
let path = match rng.gen_range(0..=2) {
0 => "/dev/null",
1 => "/dev/random",
_ => "/dev/urandom",
Expand Down Expand Up @@ -192,6 +266,7 @@ fuzz_target!(|_data: &[u8]| {
println!("GNU output: {}", gnu_output);
println!("My exit status: {}", uumain_exit_status);
println!("GNU exit status: {}", gnu_exit_status);
panic!();
} else {
println!(
"Outputs and exit statuses matched for expression {:?}",
Expand Down

0 comments on commit af6c3e7

Please sign in to comment.