From 54c43f4ccdb22805a972adabb220d15cc4bf0c2e Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Fri, 14 Oct 2022 10:35:13 +0200 Subject: [PATCH] [rust] Update Selenium Manager to fully support geckodriver 0.32.0 --- rust/src/firefox.rs | 50 ++++++++++++++++++++++++++++++++++++++++- rust/src/manager.rs | 7 +++++- rust/tests/cli_tests.rs | 2 +- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/rust/src/firefox.rs b/rust/src/firefox.rs index de8d14036e608..d155c825562f6 100644 --- a/rust/src/firefox.rs +++ b/rust/src/firefox.rs @@ -3,7 +3,7 @@ use std::path::PathBuf; use crate::downloads::read_redirect_from_link; use crate::files::compose_driver_path_in_cache; -use crate::manager::{BrowserManager, detect_browser_version}; +use crate::manager::{BrowserManager, detect_browser_version, get_minor_version}; use crate::manager::ARCH::{ARM64, X32}; use crate::manager::OS::{MACOS, WINDOWS}; use crate::metadata::{create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata}; @@ -71,9 +71,14 @@ impl BrowserManager for FirefoxManager { } fn get_driver_url(&self, driver_version: &str, os: &str, arch: &str) -> String { + // As of 0.32.0, geckodriver ships aarch64 binaries for Linux and Windows + // https://github.com/mozilla/geckodriver/releases/tag/v0.32.0 + let minor_driver_version = get_minor_version(driver_version).parse::().unwrap(); let driver_label = if WINDOWS.is(os) { if X32.is(arch) { "win32.zip" + } else if ARM64.is(arch) && minor_driver_version > 31 { + "win-aarch64.zip" } else { "win64.zip" } @@ -85,6 +90,8 @@ impl BrowserManager for FirefoxManager { } } else if X32.is(arch) { "linux32.tar.gz" + } else if ARM64.is(arch) && minor_driver_version > 31 { + "linux-aarch64.tar.gz" } else { "linux64.tar.gz" }; @@ -92,9 +99,12 @@ impl BrowserManager for FirefoxManager { } fn get_driver_path_in_cache(&self, driver_version: &str, os: &str, arch: &str) -> PathBuf { + let minor_driver_version = get_minor_version(driver_version).parse::().unwrap(); let arch_folder = if WINDOWS.is(os) { if X32.is(arch) { "win32" + } else if ARM64.is(arch) && minor_driver_version > 31 { + "win-arm64" } else { "win64" } @@ -106,9 +116,47 @@ impl BrowserManager for FirefoxManager { } } else if X32.is(arch) { "linux32" + } else if ARM64.is(arch) && minor_driver_version > 31 { + "linux-arm64" } else { "linux64" }; compose_driver_path_in_cache(self.driver_name, os, arch_folder, driver_version) } } + +#[cfg(test)] +mod unit_tests { + use super::*; + + #[test] + fn test_driver_url() { + let firefox_manager = FirefoxManager::new(); + + let data = vec!( + vec!("0.32.0", "linux", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux32.tar.gz"), + vec!("0.32.0", "linux", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz"), + vec!("0.32.0", "linux", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux-aarch64.tar.gz"), + vec!("0.32.0", "windows", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win32.zip"), + vec!("0.32.0", "windows", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win64.zip"), + vec!("0.32.0", "windows", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win-aarch64.zip"), + vec!("0.32.0", "macos", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz"), + vec!("0.32.0", "macos", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz"), + vec!("0.32.0", "macos", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos-aarch64.tar.gz"), + vec!("0.31.0", "linux", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux32.tar.gz"), + vec!("0.31.0", "linux", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz"), + vec!("0.31.0", "linux", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz"), + vec!("0.31.0", "windows", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win32.zip"), + vec!("0.31.0", "windows", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip"), + vec!("0.31.0", "windows", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip"), + vec!("0.31.0", "macos", "x86", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz"), + vec!("0.31.0", "macos", "x86_64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz"), + vec!("0.31.0", "macos", "aarch64", "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos-aarch64.tar.gz"), + ); + + data.iter().for_each(|d| { + let driver_url = firefox_manager.get_driver_url(d.get(0).unwrap(), d.get(1).unwrap(), d.get(2).unwrap()); + assert_eq!(d.get(3).unwrap().to_string(), driver_url); + }); + } +} diff --git a/rust/src/manager.rs b/rust/src/manager.rs index 9d39e9c0093a8..afabcc11a1523 100644 --- a/rust/src/manager.rs +++ b/rust/src/manager.rs @@ -113,4 +113,9 @@ pub fn detect_browser_version(browser_name: &str, shell: &str, flag: &str, args: pub fn get_major_version(full_version: &str) -> String { let version_vec: Vec<&str> = full_version.split('.').collect(); version_vec.first().unwrap().to_string() -} \ No newline at end of file +} + +pub fn get_minor_version(full_version: &str) -> String { + let version_vec: Vec<&str> = full_version.split('.').collect(); + version_vec.get(1).unwrap().to_string() +} diff --git a/rust/tests/cli_tests.rs b/rust/tests/cli_tests.rs index e93764725fd3c..bca457dd45e62 100644 --- a/rust/tests/cli_tests.rs +++ b/rust/tests/cli_tests.rs @@ -10,7 +10,7 @@ use rstest::rstest; #[case("edge", "105", "105.0")] #[case("edge", "106", "106.0")] #[case("firefox", "", "")] -#[case("firefox", "105", "0.31.0")] +#[case("firefox", "105", "0.32.0")] fn ok_test(#[case] browser: String, #[case] browser_version: String, #[case] driver_version: String) { println!("CLI test browser={} -- browser_version={} -- driver_version={}", browser, browser_version, driver_version);