Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit db1b638

Browse files
wswebcreationcnishina
authored andcommitted
feat(saucelabs): add sauceRegion support for eu datacenters (#5083)
This change allows user to define the backend region from sauce via the `sauceRegion` property, e.g. ```js sauceUser: process.env.SAUCE_USERNAME, sauceKey: process.env.SAUCE_ACCESS_KEY, sauceRegion: 'eu', ``` Will run the test against `https://ondemand.eu-central-1.saucelabs.com:443/wd/hub/.` ```js sauceUser: process.env.SAUCE_USERNAME, sauceKey: process.env.SAUCE_ACCESS_KEY, sauceRegion: 'us', // the default sauceUser: process.env.SAUCE_USERNAME, sauceKey: process.env.SAUCE_ACCESS_KEY, ``` Will run the test against https://ondemand.saucelabs.com:443/wd/hub/
1 parent 3a5e413 commit db1b638

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

lib/config.ts

+7
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,13 @@ export interface Config {
136136
* ignored. The tests will be run remotely using Sauce Labs.
137137
*/
138138
sauceKey?: string;
139+
/**
140+
* If you run your tests on SauceLabs you can specify the region you want to run your tests
141+
* in via the `sauceRegion` property. Available short handles for regions are:
142+
* us: us-west-1 (default)
143+
* eu: eu-central-1
144+
*/
145+
sauceRegion?: string;
139146
/**
140147
* Use sauceAgent if you need custom HTTP agent to connect to saucelabs.com APIs.
141148
* This is needed if your computer is behind a corporate proxy.

lib/driverProviders/sauce.ts

+21-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import {Logger} from '../logger';
1414
import {DriverProvider} from './driverProvider';
1515

1616
const SauceLabs = require('saucelabs');
17+
const SAUCE_REGIONS: {[key: string]: string} = {
18+
'us': '', // default endpoint
19+
'eu': 'eu-central-1.'
20+
};
1721

1822
let logger = new Logger('sauce');
1923
export class Sauce extends DriverProvider {
@@ -55,6 +59,7 @@ export class Sauce extends DriverProvider {
5559
protected setupDriverEnv(): q.Promise<any> {
5660
let deferred = q.defer();
5761
this.sauceServer_ = new SauceLabs({
62+
hostname: this.getSauceEndpoint(this.config_.sauceRegion),
5863
username: this.config_.sauceUser,
5964
password: this.config_.sauceKey,
6065
agent: this.config_.sauceAgent,
@@ -66,8 +71,9 @@ export class Sauce extends DriverProvider {
6671
let protocol = this.config_.sauceSeleniumUseHttp ? 'http://' : 'https://';
6772
let auth = protocol + this.config_.sauceUser + ':' + this.config_.sauceKey + '@';
6873
this.config_.seleniumAddress = auth +
69-
(this.config_.sauceSeleniumAddress ? this.config_.sauceSeleniumAddress :
70-
'ondemand.saucelabs.com:443/wd/hub');
74+
(this.config_.sauceSeleniumAddress ?
75+
this.config_.sauceSeleniumAddress :
76+
`ondemand.${this.getSauceEndpoint(this.config_.sauceRegion)}:443/wd/hub`);
7177

7278
// Append filename to capabilities.name so that it's easier to identify
7379
// tests.
@@ -82,4 +88,17 @@ export class Sauce extends DriverProvider {
8288
deferred.resolve();
8389
return deferred.promise;
8490
}
91+
92+
/**
93+
* Get the Sauce Labs endpoint
94+
* @private
95+
* @param {string} region
96+
* @return {string} The endpoint that needs to be used
97+
*/
98+
private getSauceEndpoint(region: string): string {
99+
const dc = region ?
100+
typeof SAUCE_REGIONS[region] !== 'undefined' ? SAUCE_REGIONS[region] : (region + '.') :
101+
'';
102+
return `${dc}saucelabs.com`;
103+
}
85104
}

0 commit comments

Comments
 (0)