Skip to content
Snippets Groups Projects
Commit 81f4a877 authored by Cédric Moreau's avatar Cédric Moreau Committed by Hugo Trentesaux
Browse files

fix(!116): rather use different impl for macOS

parent ff8ac728
No related branches found
No related tags found
1 merge request!174Resolve "Cucumber tests fail on Apple Silicon"
Pipeline #32884 waiting for manual action
...@@ -16,6 +16,7 @@ ctrlc = "3.2.2" ...@@ -16,6 +16,7 @@ ctrlc = "3.2.2"
cucumber = "0.11" cucumber = "0.11"
env_logger = "0.9.0" env_logger = "0.9.0"
hex = "0.4" hex = "0.4"
notify = "4.0"
parity-scale-codec = "3.1.5" parity-scale-codec = "3.1.5"
portpicker = "0.1.1" portpicker = "0.1.1"
serde_json = "1.0.64" serde_json = "1.0.64"
......
...@@ -220,6 +220,9 @@ fn spawn_full_node( ...@@ -220,6 +220,9 @@ fn spawn_full_node(
} }
fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: Duration) { fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: Duration) {
if cfg!(target_os = "macos") {
// MacOs seems to not be able to use inotify (buggy)
// So we use a specific implementation for `wait_until_log_line()` here
let start = Instant::now(); let start = Instant::now();
loop { loop {
let now = Instant::now(); let now = Instant::now();
...@@ -233,6 +236,37 @@ fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: Du ...@@ -233,6 +236,37 @@ fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: Du
} }
std::thread::sleep(Duration::from_millis(100)); std::thread::sleep(Duration::from_millis(100));
} }
} else {
let (tx, rx) = std::sync::mpsc::channel();
let mut watcher = notify::watcher(tx, std::time::Duration::from_millis(100)).unwrap();
use notify::Watcher as _;
watcher
.watch(log_file_path, notify::RecursiveMode::NonRecursive)
.unwrap();
let mut pos = 0;
loop {
match rx.recv_timeout(timeout) {
Ok(notify::DebouncedEvent::Write(_)) => {
let mut file = std::fs::File::open(log_file_path).unwrap();
file.seek(std::io::SeekFrom::Start(pos)).unwrap();
pos = file.metadata().unwrap().len();
let reader = std::io::BufReader::new(file);
for line in reader.lines() {
if line.expect("fail to read line").contains(expected_log_line) {
return;
}
}
}
Ok(_) => {}
Err(err) => {
eprintln!("Error: {:?}", err);
std::process::exit(1);
}
}
}
}
} }
fn has_log_line(log_file_path: &str, expected_log_line: &str) -> bool { fn has_log_line(log_file_path: &str, expected_log_line: &str) -> bool {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment