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,18 +220,52 @@ fn spawn_full_node( ...@@ -220,18 +220,52 @@ 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) {
let start = Instant::now(); if cfg!(target_os = "macos") {
loop { // MacOs seems to not be able to use inotify (buggy)
let now = Instant::now(); // So we use a specific implementation for `wait_until_log_line()` here
if now.duration_since(start) > timeout { let start = Instant::now();
eprintln!("Timeout starting node"); loop {
std::process::exit(1); let now = Instant::now();
if now.duration_since(start) > timeout {
eprintln!("Timeout starting node");
std::process::exit(1);
}
if has_log_line(log_file_path, expected_log_line) {
// Ready
return;
}
std::thread::sleep(Duration::from_millis(100));
} }
if has_log_line(log_file_path, expected_log_line) { } else {
// Ready let (tx, rx) = std::sync::mpsc::channel();
return; 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);
}
}
} }
std::thread::sleep(Duration::from_millis(100));
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment