From 0899302910965b8e25e6aaa6977230ced044301d Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Wed, 7 Jun 2023 13:13:49 +0200
Subject: [PATCH] fix(!116): remove notify lib for end2end tests

---
 end2end-tests/Cargo.toml              |  1 -
 end2end-tests/tests/common/mod.rs     | 53 +++++++++++++--------------
 end2end-tests/tests/cucumber_tests.rs |  9 +++++
 3 files changed, 34 insertions(+), 29 deletions(-)

diff --git a/end2end-tests/Cargo.toml b/end2end-tests/Cargo.toml
index 07df18c1a..9a8647fe6 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 d6d7bf9a0..e62dd5ab0 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 b5042b864..8ac684502 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";
-- 
GitLab