From f0e7894acbce1c6ca0d5f0592d7643b243c668b1 Mon Sep 17 00:00:00 2001 From: Alex Popov Date: Wed, 1 Oct 2025 20:34:48 +0700 Subject: [PATCH 1/2] Add offline mode handling and JSON output test for browser path --- rust/src/main.rs | 15 +++++++++++++-- rust/tests/offline_tests.rs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/rust/src/main.rs b/rust/src/main.rs index 1fc469302bb03..daadae5c714c6 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -249,6 +249,7 @@ fn main() { &driver_path, &selenium_manager.get_browser_path_or_latest_from_cache(), selenium_manager.get_receiver(), + selenium_manager.is_offline(), ); flush_and_exit(OK, log, None); }) @@ -271,12 +272,20 @@ fn main() { &best_driver_from_cache, &selenium_manager.get_browser_path_or_latest_from_cache(), selenium_manager.get_receiver(), + selenium_manager.is_offline(), ); flush_and_exit(OK, log, Some(err)); } } if selenium_manager.is_offline() { log.warn(&err); + log_driver_and_browser_path( + log, + &Path::new(""), + &selenium_manager.get_browser_path_or_latest_from_cache(), + selenium_manager.get_receiver(), + selenium_manager.is_offline(), + ); flush_and_exit(OK, log, Some(err)); } else { let error_msg = log @@ -294,13 +303,15 @@ fn log_driver_and_browser_path( driver_path: &Path, browser_path: &str, receiver: &Receiver, + is_offline: bool, ) { if let Ok(err) = receiver.try_recv() { log.warn(err); } - if driver_path.exists() { + + if !driver_path.as_os_str().is_empty() && driver_path.exists() { log.info(format!("{}{}", DRIVER_PATH, driver_path.display())); - } else { + } else if !is_offline { log.error(format!("Driver unavailable: {}", driver_path.display())); flush_and_exit(UNAVAILABLE, log, None); } diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index 2d1020a4532f3..f92c0c0988454 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -31,3 +31,36 @@ fn offline_test() { assert!(stdout.contains("offline mode")); } + +#[test] +fn offline_json_output_includes_browser_path_test() { + use serde_json::Value; + + let mut cmd = get_selenium_manager(); + cmd.args([ + "--debug", + "--browser", + "chrome", + "--offline", + "--output", + "json" + ]) + .assert() + .success() + .code(0); + + let stdout = get_stdout(&mut cmd); + + let json: Value = serde_json::from_str(&stdout) + .expect("Should be valid JSON"); + + assert!(json["result"].is_object(), "Result should be an object"); + assert!(json["result"]["code"].is_number(), "Code should be a number"); + assert_eq!(json["result"]["code"], 0, "Code should be 0 for success"); + + assert!(json["result"]["browser_path"].is_string(), "browser_path should be a string"); + + assert!(json["logs"].is_array(), "Logs should be an array"); + let logs_str = json["logs"].to_string(); + assert!(logs_str.contains("offline mode"), "Should mention offline mode in logs"); +} From d58a54545b70d83597d029aeede010f666b2a2a0 Mon Sep 17 00:00:00 2001 From: Alex Popov Date: Wed, 1 Oct 2025 20:39:17 +0700 Subject: [PATCH 2/2] applied formatting : Refactor JSON output test for offline mode to improve readability --- rust/tests/offline_tests.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index f92c0c0988454..466b832937d61 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -43,7 +43,7 @@ fn offline_json_output_includes_browser_path_test() { "chrome", "--offline", "--output", - "json" + "json", ]) .assert() .success() @@ -51,16 +51,24 @@ fn offline_json_output_includes_browser_path_test() { let stdout = get_stdout(&mut cmd); - let json: Value = serde_json::from_str(&stdout) - .expect("Should be valid JSON"); + let json: Value = serde_json::from_str(&stdout).expect("Should be valid JSON"); assert!(json["result"].is_object(), "Result should be an object"); - assert!(json["result"]["code"].is_number(), "Code should be a number"); + assert!( + json["result"]["code"].is_number(), + "Code should be a number" + ); assert_eq!(json["result"]["code"], 0, "Code should be 0 for success"); - assert!(json["result"]["browser_path"].is_string(), "browser_path should be a string"); + assert!( + json["result"]["browser_path"].is_string(), + "browser_path should be a string" + ); assert!(json["logs"].is_array(), "Logs should be an array"); let logs_str = json["logs"].to_string(); - assert!(logs_str.contains("offline mode"), "Should mention offline mode in logs"); + assert!( + logs_str.contains("offline mode"), + "Should mention offline mode in logs" + ); }