From 126189a2cfc836ef47c63e01ca24fa468b5cf513 Mon Sep 17 00:00:00 2001 From: Michael Giambalvo Date: Thu, 19 Jan 2017 13:34:05 -0800 Subject: [PATCH 1/2] fix(driverProviders): Handle promise rejection when starting selenium. --- lib/driverProviders/local.ts | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/driverProviders/local.ts b/lib/driverProviders/local.ts index f91d88f15..a932252f7 100644 --- a/lib/driverProviders/local.ts +++ b/lib/driverProviders/local.ts @@ -95,8 +95,6 @@ export class Local extends DriverProvider { * ready to test. */ setupDriverEnv(): q.Promise { - let deferred = q.defer(); - this.addDefaultBinaryLocs_(); logger.info('Starting selenium standalone server...'); @@ -113,6 +111,10 @@ export class Local extends DriverProvider { if (serverConf.port === undefined) { serverConf.port = this.config_.seleniumPort; } + if (!Array.isArray(serverConf.jvmArgs)) { + logger.warn('jvmArgs should be an array!'); + serverConf.jvmArgs = [serverConf.jvmArgs]; + } // configure server if (this.config_.chromeDriver) { @@ -121,14 +123,20 @@ export class Local extends DriverProvider { this.server_ = new remote.SeleniumServer(this.config_.seleniumServerJar, serverConf); + let deferred = q.defer(); // start local server, grab hosted address, and resolve promise - this.server_.start(this.config_.seleniumServerStartTimeout).then((url: string) => { - logger.info('Selenium standalone server started at ' + url); - this.server_.address().then((address: string) => { - this.config_.seleniumAddress = address; - deferred.resolve(); - }); - }); + this.server_.start(this.config_.seleniumServerStartTimeout) + .then((url: string) => { + logger.info('Selenium standalone server started at ' + url); + return this.server_.address(); + }) + .then((address: string) => { + this.config_.seleniumAddress = address; + deferred.resolve(); + }) + .catch((err: string) => { + deferred.reject(err); + }); return deferred.promise; } @@ -143,13 +151,9 @@ export class Local extends DriverProvider { * is down. */ teardownEnv(): q.Promise { - let deferred = q.defer(); - super.teardownEnv().then(() => { + return super.teardownEnv().then(() => { logger.info('Shutting down selenium standalone server.'); - this.server_.stop().then(() => { - deferred.resolve(); - }); + return this.server_.stop(); }); - return deferred.promise; } } From a03a3eaa07575c738e168802cd2f431b1d115f57 Mon Sep 17 00:00:00 2001 From: Michael Giambalvo Date: Thu, 19 Jan 2017 15:56:52 -0800 Subject: [PATCH 2/2] Throw an error if jvmargs is invalid. --- lib/driverProviders/local.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/driverProviders/local.ts b/lib/driverProviders/local.ts index a932252f7..d60a2613a 100644 --- a/lib/driverProviders/local.ts +++ b/lib/driverProviders/local.ts @@ -11,7 +11,7 @@ import * as path from 'path'; import * as q from 'q'; import {Config} from '../config'; -import {BrowserError} from '../exitCodes'; +import {BrowserError, ConfigError} from '../exitCodes'; import {Logger} from '../logger'; import {DriverProvider} from './driverProvider'; @@ -100,6 +100,10 @@ export class Local extends DriverProvider { let serverConf = this.config_.localSeleniumStandaloneOpts || {}; + if (!Array.isArray(serverConf.jvmArgs)) { + throw new ConfigError(logger, 'jvmArgs should be an array.'); + } + // If args or port is not set use seleniumArgs and seleniumPort // for backward compatibility if (serverConf.args === undefined) { @@ -111,10 +115,6 @@ export class Local extends DriverProvider { if (serverConf.port === undefined) { serverConf.port = this.config_.seleniumPort; } - if (!Array.isArray(serverConf.jvmArgs)) { - logger.warn('jvmArgs should be an array!'); - serverConf.jvmArgs = [serverConf.jvmArgs]; - } // configure server if (this.config_.chromeDriver) {