mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:00:09 +00:00
[infra] Improve port selection for safaridriver
Bug: b/208186791 Cq-Include-Trybots: luci.dart.try:dart2js-strong-mac-x64-safari-try Change-Id: I654ce8a60746c79d2922eebbda4cced822c821cf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242871 Auto-Submit: Alexander Thomas <athom@google.com> Reviewed-by: William Hesse <whesse@google.com> Commit-Queue: William Hesse <whesse@google.com>
This commit is contained in:
parent
38438fb165
commit
d45ae603f7
|
@ -261,8 +261,6 @@ abstract class Browser {
|
|||
}
|
||||
|
||||
abstract class WebDriverBrowser extends Browser {
|
||||
static int _nextPort = 4444;
|
||||
final int _port = _nextPort++;
|
||||
WebDriver _driver;
|
||||
|
||||
String get driverExecutable;
|
||||
|
@ -272,11 +270,12 @@ abstract class WebDriverBrowser extends Browser {
|
|||
@override
|
||||
Future<bool> start(String url) async {
|
||||
_logEvent('Starting $this browser on: $url');
|
||||
var port = await _findUnusedPort();
|
||||
if (!await startBrowserProcess(
|
||||
driverExecutable, ['--port', '$_port', ...driverArguments])) {
|
||||
driverExecutable, ['--port', '$port', ...driverArguments])) {
|
||||
return false;
|
||||
}
|
||||
await _createDriver();
|
||||
await _createDriver(port);
|
||||
await _driver.get(url);
|
||||
try {
|
||||
_logEvent('Got version: ${await version}');
|
||||
|
@ -287,13 +286,13 @@ abstract class WebDriverBrowser extends Browser {
|
|||
return true;
|
||||
}
|
||||
|
||||
Future<void> _createDriver() async {
|
||||
Future<void> _createDriver(int port) async {
|
||||
for (var i = 5; i >= 0; i--) {
|
||||
// Give the driver process some time to be ready to accept connections.
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
try {
|
||||
_driver = await createDriver(
|
||||
uri: Uri.parse('http://localhost:$_port/'),
|
||||
uri: Uri.parse('http://localhost:$port/'),
|
||||
desired: desiredCapabilities);
|
||||
} catch (error) {
|
||||
if (i > 0) {
|
||||
|
@ -309,6 +308,24 @@ abstract class WebDriverBrowser extends Browser {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns a port that is probably, but not definitely, not in use.
|
||||
///
|
||||
/// This has a built-in race condition: another process may bind this port at
|
||||
/// any time after this call has returned.
|
||||
static Future<int> _findUnusedPort() async {
|
||||
int port;
|
||||
ServerSocket socket;
|
||||
try {
|
||||
socket = await ServerSocket.bind(InternetAddress.loopbackIPv6, 0,
|
||||
v6Only: true);
|
||||
} on SocketException {
|
||||
socket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
|
||||
}
|
||||
port = socket.port;
|
||||
await socket.close();
|
||||
return port;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> close() async {
|
||||
try {
|
||||
|
|
Loading…
Reference in a new issue