Skip to content

Commit c17ce91

Browse files
cahakgeorgeChukwuemeka Ewurum
and
Chukwuemeka Ewurum
authored
Update fuzzing test to store output in a temporary directory (#84)
* Update fuzzing test to store output in temp directory Co-authored-by: Chukwuemeka Ewurum <cewurum@amazon.com> * Bump-up flowgger version to v0.3.3 Co-authored-by: Chukwuemeka Ewurum <cewurum@amazon.com> --------- Co-authored-by: Chukwuemeka Ewurum <cewurum@amazon.com>
1 parent 9a10212 commit c17ce91

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
edition = "2018"
33
name = "flowgger"
4-
version = "0.3.2"
4+
version = "0.3.3"
55
authors = ["Frank Denis <github@pureftpd.org>", "Matteo Bigoi <bigo@crisidev.org>", "Vivien Chene <viv.chene@gmail.com>", "Francesco Berni <kurojishi@kurojishi.me>"]
66
build = "build.rs"
77
repository = "https://github.com/awslabs/flowgger"

src/flowgger/test_fuzzer.rs

+37-12
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
#[cfg(test)]
1818
mod tests {
1919
extern crate quickcheck;
20+
extern crate tempdir;
2021

2122
use crate::flowgger;
2223

2324
use quickcheck::QuickCheck;
25+
use tempdir::TempDir;
2426

2527
use std::fs;
2628
use std::io::{BufRead, BufReader};
@@ -42,7 +44,7 @@ mod tests {
4244
use toml::Value;
4345

4446
const DEFAULT_CONFIG_FILE: &str = "flowgger.toml";
45-
const DEFAULT_OUTPUT_FILEPATH: &str = "output.log";
47+
const DEFAULT_OUTPUT_FILENAME: &str = "output.log";
4648
const DEFAULT_QUEUE_SIZE: usize = 10_000_000;
4749

4850
const DEFAULT_OUTPUT_FORMAT: &str = "gelf";
@@ -62,15 +64,17 @@ mod tests {
6264

6365
#[test]
6466
fn test_fuzzer() {
65-
let config = get_config();
66-
let file_output_path = config
67+
let mut config = get_config();
68+
let file_output_name = config
6769
.lookup("output.file_path")
68-
.map_or(DEFAULT_OUTPUT_FILEPATH, |x| {
70+
.map_or(DEFAULT_OUTPUT_FILENAME, |x| {
6971
x.as_str().expect("File output path missing in config")
7072
});
71-
remove_output_file(&file_output_path);
72-
73+
let output_dir = get_output_dir();
74+
let file_output_path = get_output_file_path(&output_dir, &file_output_name);
7375
let (tx, rx): (SyncSender<Vec<u8>>, Receiver<Vec<u8>>) = sync_channel(DEFAULT_QUEUE_SIZE);
76+
77+
set_output_file_path_in_config(&mut config, &file_output_path);
7478
start_file_output(&config, rx);
7579
set_global_context(&config, tx);
7680

@@ -80,6 +84,21 @@ mod tests {
8084
let _ = check_result(&file_output_path);
8185
}
8286

87+
fn get_output_dir() -> TempDir {
88+
let temp_dir = TempDir::new("test_file_output").expect("Couldn't create output directory");
89+
return temp_dir;
90+
}
91+
92+
fn get_output_file_path(output_dir: &TempDir, file_output_name: &str) -> String {
93+
let file_base = output_dir
94+
.path()
95+
.join(file_output_name)
96+
.to_string_lossy()
97+
.to_string();
98+
99+
return file_base;
100+
}
101+
83102
fn get_global_context() -> *mut Mutex<Option<Context>> {
84103
unsafe { addr_of_mut!(GLOBAL_CONTEXT) }
85104
}
@@ -124,7 +143,7 @@ mod tests {
124143

125144
/// Update the default file rotation size and time in the config file
126145
/// This ensures output is sent to a single non-rotated file
127-
pub fn update_file_rotation_defaults_in_config(config: &mut Config) {
146+
fn update_file_rotation_defaults_in_config(config: &mut Config) {
128147
if let Some(entry) = config
129148
.config
130149
.get_mut("output")
@@ -144,12 +163,19 @@ mod tests {
144163
}
145164
}
146165

147-
pub fn remove_output_file(file_output_path: &str) {
148-
let _ = fs::remove_file(file_output_path);
166+
fn set_output_file_path_in_config(config: &mut Config, file_output_path: &str) {
167+
if let Some(entry) = config
168+
.config
169+
.get_mut("output")
170+
.unwrap()
171+
.get_mut("file_path")
172+
{
173+
*entry = Value::String(file_output_path.to_string());
174+
}
149175
}
150176

151177
/// Start an input listener which writes data to the output file once received.
152-
pub fn start_file_output(config: &Config, rx: Receiver<Vec<u8>>) {
178+
fn start_file_output(config: &Config, rx: Receiver<Vec<u8>>) {
153179
let output_format = config
154180
.lookup("output.format")
155181
.map_or(DEFAULT_OUTPUT_FORMAT, |x| {
@@ -179,7 +205,7 @@ mod tests {
179205
output.start(arx, merger);
180206
}
181207

182-
pub fn fuzz_target_rfc3164(data: String) {
208+
fn fuzz_target_rfc3164(data: String) {
183209
unsafe {
184210
let global_context = get_global_context().as_ref().unwrap();
185211

@@ -222,7 +248,6 @@ mod tests {
222248

223249
let file = fs::File::open(file_output_path).expect("Unable to open output file");
224250
let reader = BufReader::new(file);
225-
226251
for line in reader.lines() {
227252
let line_item: String = line?;
228253
if !line_item.trim().is_empty() {

0 commit comments

Comments
 (0)