From f474451b370e1f528a38629e03973c5e3cf641e6 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Thu, 1 Jun 2023 19:52:16 +0200 Subject: [PATCH] feat: runner can save log --- src/runner.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/src/runner.rs b/src/runner.rs index 2e74ac4..57be6da 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -1,6 +1,8 @@ use std::{ collections::HashMap, - io::{BufRead, BufReader}, + fs::{create_dir_all, OpenOptions}, + io::{BufRead, BufReader, BufWriter, Write}, + path::Path, process::{Child, Command, Stdio}, }; @@ -101,6 +103,34 @@ impl Runner { } } } + + fn save_log(path_s: String, log: &Vec) -> Result<(), std::io::Error> { + let path = Path::new(&path_s); + match path.parent() { + Some(parent) => { + if !parent.is_dir() { + create_dir_all(parent).expect("Could not create dir") + } + } + None => {} + }; + let file = OpenOptions::new() + .write(true) + .create(true) + .open(path) + .expect("Could not open file"); + let mut writer = BufWriter::new(file); + let log_s = log.concat(); + writer.write_all(log_s.as_ref()) + } + + pub fn save_stdout(&mut self, base_path: String) -> Result<(), std::io::Error> { + Runner::save_log(base_path + ".stdout", &self.stdout) + } + + pub fn save_stderr(&mut self, base_path: String) -> Result<(), std::io::Error> { + Runner::save_log(base_path + ".stderr", &self.stderr) + } } #[cfg(test)] @@ -130,4 +160,21 @@ mod tests { "REX2TEST: Lorem ipsum dolor\n" ); } + + #[test] + fn can_save_log() { + let mut runner = Runner::new( + HashMap::new(), + "bash".into(), + vec!["-c".into(), "echo \"Lorem ipsum dolor sit amet\"".into()], + ); + runner.start(); + while runner.status() == RunnerStatus::Running { + sleep(time::Duration::from_millis(10)); + } + runner.flush_out(); + + runner.save_stdout("./target/testout/testlog".into()); + runner.save_stderr("./target/testout/testlog".into()); + } }