mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
fuzzing: print the diff in case of issue (#5866)
* fuzzing: print the diff in case of issue * Simplify the code * fuzz: remove unused import similar::ChangeTag --------- Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
This commit is contained in:
parent
5f28b5005e
commit
8493800d4f
2 changed files with 14 additions and 0 deletions
|
@ -12,6 +12,7 @@ libfuzzer-sys = "0.4"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
tempfile = "3"
|
tempfile = "3"
|
||||||
rand = { version = "0.8", features = ["small_rng"] }
|
rand = { version = "0.8", features = ["small_rng"] }
|
||||||
|
similar = "2"
|
||||||
|
|
||||||
uucore = { path = "../src/uucore/" }
|
uucore = { path = "../src/uucore/" }
|
||||||
uu_date = { path = "../src/uu/date/" }
|
uu_date = { path = "../src/uu/date/" }
|
||||||
|
|
|
@ -7,6 +7,7 @@ use libc::STDIN_FILENO;
|
||||||
use libc::{close, dup, dup2, pipe, STDERR_FILENO, STDOUT_FILENO};
|
use libc::{close, dup, dup2, pipe, STDERR_FILENO, STDOUT_FILENO};
|
||||||
use rand::prelude::SliceRandom;
|
use rand::prelude::SliceRandom;
|
||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
use similar::TextDiff;
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
use std::io::{Seek, SeekFrom, Write};
|
use std::io::{Seek, SeekFrom, Write};
|
||||||
use std::os::fd::{AsRawFd, RawFd};
|
use std::os::fd::{AsRawFd, RawFd};
|
||||||
|
@ -321,12 +322,14 @@ pub fn compare_result(
|
||||||
discrepancies.push("stdout differs");
|
discrepancies.push("stdout differs");
|
||||||
println!("Rust stdout: {}", rust_result.stdout);
|
println!("Rust stdout: {}", rust_result.stdout);
|
||||||
println!("GNU stdout: {}", gnu_result.stdout);
|
println!("GNU stdout: {}", gnu_result.stdout);
|
||||||
|
print_diff(&rust_result.stdout, &gnu_result.stdout);
|
||||||
should_panic = true;
|
should_panic = true;
|
||||||
}
|
}
|
||||||
if rust_result.stderr.trim() != gnu_result.stderr.trim() {
|
if rust_result.stderr.trim() != gnu_result.stderr.trim() {
|
||||||
discrepancies.push("stderr differs");
|
discrepancies.push("stderr differs");
|
||||||
println!("Rust stderr: {}", rust_result.stderr);
|
println!("Rust stderr: {}", rust_result.stderr);
|
||||||
println!("GNU stderr: {}", gnu_result.stderr);
|
println!("GNU stderr: {}", gnu_result.stderr);
|
||||||
|
print_diff(&rust_result.stderr, &gnu_result.stderr);
|
||||||
if fail_on_stderr_diff {
|
if fail_on_stderr_diff {
|
||||||
should_panic = true;
|
should_panic = true;
|
||||||
}
|
}
|
||||||
|
@ -353,6 +356,16 @@ pub fn compare_result(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// When we have different outputs, print the diff
|
||||||
|
fn print_diff(rust_output: &str, gnu_output: &str) {
|
||||||
|
println!("Diff=");
|
||||||
|
let diff = TextDiff::from_lines(rust_output, gnu_output);
|
||||||
|
for change in diff.iter_all_changes() {
|
||||||
|
print!("{}{}", change.tag(), change);
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn generate_random_string(max_length: usize) -> String {
|
pub fn generate_random_string(max_length: usize) -> String {
|
||||||
let mut rng = rand::thread_rng();
|
let mut rng = rand::thread_rng();
|
||||||
let valid_utf8: Vec<char> = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
let valid_utf8: Vec<char> = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue