diff --git a/end2end-tests/Cargo.toml b/end2end-tests/Cargo.toml index 07df18c1aa1878428fd2c5c9b1b655df405ea810..9a8647fe6bdebc46538ee2b5610f0309b7a87ccd 100644 --- a/end2end-tests/Cargo.toml +++ b/end2end-tests/Cargo.toml @@ -16,7 +16,6 @@ ctrlc = "3.2.2" cucumber = "0.11" env_logger = "0.9.0" hex = "0.4" -notify = "4.0" parity-scale-codec = "3.1.5" portpicker = "0.1.1" serde_json = "1.0.64" diff --git a/end2end-tests/tests/common/mod.rs b/end2end-tests/tests/common/mod.rs index d6d7bf9a0aa46e09a5e895817d94de39e9b1f280..e62dd5ab029a2444b707e95b6700faf4fad7a447 100644 --- a/end2end-tests/tests/common/mod.rs +++ b/end2end-tests/tests/common/mod.rs @@ -33,9 +33,10 @@ use parity_scale_codec::Encode; use serde_json::Value; use sp_keyring::AccountKeyring; use std::io::prelude::*; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::process::Command; use std::str::FromStr; +use std::time::{Duration, Instant}; use subxt::ext::{sp_core, sp_runtime}; use subxt::rpc::rpc_params; use subxt::tx::BaseExtrinsicParamsBuilder; @@ -224,36 +225,32 @@ fn spawn_full_node( } } -fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: std::time::Duration) { - 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; +fn wait_until_log_line(expected_log_line: &str, log_file_path: &str, timeout: Duration) { + let start = Instant::now(); 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); - } + 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)); + } +} + +fn has_log_line(log_file_path: &str, expected_log_line: &str) -> bool { + let mut file = std::fs::File::open(log_file_path).unwrap(); + file.seek(std::io::SeekFrom::Start(0)).unwrap(); + let reader = std::io::BufReader::new(file); + for line in reader.lines() { + if line.expect("fail to read line").contains(expected_log_line) { + return true; } } + false } pub fn spawn_distance_oracle(distance_oracle_binary_path: &str, duniter_rpc_port: u16) { diff --git a/end2end-tests/tests/cucumber_tests.rs b/end2end-tests/tests/cucumber_tests.rs index b5042b864b2205e70de02576d94faf61c2562be0..8ac684502e3ad1bd0114dc2f4cec4582d7a3b60d 100644 --- a/end2end-tests/tests/cucumber_tests.rs +++ b/end2end-tests/tests/cucumber_tests.rs @@ -559,6 +559,15 @@ struct CustomOpts { /// Keep running #[clap(short, long)] keep_running: bool, + + /// For compliance with Jetbrains IDE which pushes extra args. + /// https://youtrack.jetbrains.com/issue/CPP-33071/cargo-test-adds-extra-options-which-conflict-with-Cucumber + #[clap(short, long)] + format: Option<String>, + #[clap(short, long = "show-output")] + show_output: bool, + #[clap(short = 'Z', long)] + z: Option<String>, } const DOCKER_FEATURES_PATH: &str = "/var/lib/duniter/cucumber-features";