@@ -3,7 +3,7 @@ use std::path::PathBuf;
3
3
4
4
use crate :: downloads:: read_redirect_from_link;
5
5
use crate :: files:: compose_driver_path_in_cache;
6
- use crate :: manager:: { BrowserManager , detect_browser_version} ;
6
+ use crate :: manager:: { BrowserManager , detect_browser_version, get_minor_version } ;
7
7
use crate :: manager:: ARCH :: { ARM64 , X32 } ;
8
8
use crate :: manager:: OS :: { MACOS , WINDOWS } ;
9
9
use crate :: metadata:: { create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata} ;
@@ -71,9 +71,14 @@ impl BrowserManager for FirefoxManager {
71
71
}
72
72
73
73
fn get_driver_url ( & self , driver_version : & str , os : & str , arch : & str ) -> String {
74
+ // As of 0.32.0, geckodriver ships aarch64 binaries for Linux and Windows
75
+ // https://github.com/mozilla/geckodriver/releases/tag/v0.32.0
76
+ let minor_driver_version = get_minor_version ( driver_version) . parse :: < i32 > ( ) . unwrap ( ) ;
74
77
let driver_label = if WINDOWS . is ( os) {
75
78
if X32 . is ( arch) {
76
79
"win32.zip"
80
+ } else if ARM64 . is ( arch) && minor_driver_version > 31 {
81
+ "win-aarch64.zip"
77
82
} else {
78
83
"win64.zip"
79
84
}
@@ -85,16 +90,21 @@ impl BrowserManager for FirefoxManager {
85
90
}
86
91
} else if X32 . is ( arch) {
87
92
"linux32.tar.gz"
93
+ } else if ARM64 . is ( arch) && minor_driver_version > 31 {
94
+ "linux-aarch64.tar.gz"
88
95
} else {
89
96
"linux64.tar.gz"
90
97
} ;
91
98
format ! ( "{}download/v{}/{}-v{}-{}" , DRIVER_URL , driver_version, self . driver_name, driver_version, driver_label)
92
99
}
93
100
94
101
fn get_driver_path_in_cache ( & self , driver_version : & str , os : & str , arch : & str ) -> PathBuf {
102
+ let minor_driver_version = get_minor_version ( driver_version) . parse :: < i32 > ( ) . unwrap ( ) ;
95
103
let arch_folder = if WINDOWS . is ( os) {
96
104
if X32 . is ( arch) {
97
105
"win32"
106
+ } else if ARM64 . is ( arch) && minor_driver_version > 31 {
107
+ "win-arm64"
98
108
} else {
99
109
"win64"
100
110
}
@@ -106,9 +116,47 @@ impl BrowserManager for FirefoxManager {
106
116
}
107
117
} else if X32 . is ( arch) {
108
118
"linux32"
119
+ } else if ARM64 . is ( arch) && minor_driver_version > 31 {
120
+ "linux-arm64"
109
121
} else {
110
122
"linux64"
111
123
} ;
112
124
compose_driver_path_in_cache ( self . driver_name , os, arch_folder, driver_version)
113
125
}
114
126
}
127
+
128
+ #[ cfg( test) ]
129
+ mod unit_tests {
130
+ use super :: * ;
131
+
132
+ #[ test]
133
+ fn test_driver_url ( ) {
134
+ let firefox_manager = FirefoxManager :: new ( ) ;
135
+
136
+ let data = vec ! (
137
+ vec!( "0.32.0" , "linux" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux32.tar.gz" ) ,
138
+ vec!( "0.32.0" , "linux" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux64.tar.gz" ) ,
139
+ vec!( "0.32.0" , "linux" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-linux-aarch64.tar.gz" ) ,
140
+ vec!( "0.32.0" , "windows" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win32.zip" ) ,
141
+ vec!( "0.32.0" , "windows" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win64.zip" ) ,
142
+ vec!( "0.32.0" , "windows" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-win-aarch64.zip" ) ,
143
+ vec!( "0.32.0" , "macos" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz" ) ,
144
+ vec!( "0.32.0" , "macos" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos.tar.gz" ) ,
145
+ vec!( "0.32.0" , "macos" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.32.0/geckodriver-v0.32.0-macos-aarch64.tar.gz" ) ,
146
+ vec!( "0.31.0" , "linux" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux32.tar.gz" ) ,
147
+ vec!( "0.31.0" , "linux" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz" ) ,
148
+ vec!( "0.31.0" , "linux" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz" ) ,
149
+ vec!( "0.31.0" , "windows" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win32.zip" ) ,
150
+ vec!( "0.31.0" , "windows" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip" ) ,
151
+ vec!( "0.31.0" , "windows" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-win64.zip" ) ,
152
+ vec!( "0.31.0" , "macos" , "x86" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz" ) ,
153
+ vec!( "0.31.0" , "macos" , "x86_64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos.tar.gz" ) ,
154
+ vec!( "0.31.0" , "macos" , "aarch64" , "https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-macos-aarch64.tar.gz" ) ,
155
+ ) ;
156
+
157
+ data. iter ( ) . for_each ( |d| {
158
+ let driver_url = firefox_manager. get_driver_url ( d. get ( 0 ) . unwrap ( ) , d. get ( 1 ) . unwrap ( ) , d. get ( 2 ) . unwrap ( ) ) ;
159
+ assert_eq ! ( d. get( 3 ) . unwrap( ) . to_string( ) , driver_url) ;
160
+ } ) ;
161
+ }
162
+ }
0 commit comments