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

Commit 75cf642

Browse files
committed
feat: establish the ssh tunnel automatically
1 parent 20f10ec commit 75cf642

3 files changed

Lines changed: 65 additions & 10 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ module.exports = function(config) {
5656
### Global options
5757
- `username` your BS username (email), you can also use `BROWSER_STACK_USERNAME` env variable.
5858
- `accessKey` your BS access key (password), you can also use `BROWSER_STACK_ACCESS_KEY` env variable.
59+
- `startTunnel` do you wanna establish the BrowserStack tunnel ? (defaults to `true`)
5960

6061

6162
### Per browser options

index.js

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,49 @@
1+
var q = require('q');
12
var api = require('browserstack');
3+
var BrowserStackTunnel = require('browserstacktunnel-wrapper');
4+
5+
6+
var createBrowserStackTunnel = function(logger, config, emitter) {
7+
var log = logger.create('launcher.browserstack');
8+
var bsConfig = config.browserStack;
9+
10+
if (bsConfig.startTunnel === false) {
11+
return q();
12+
}
13+
14+
log.debug('Establishing the tunnel on %s:%s', config.hostname, config.port);
15+
16+
var deferred = q.defer();
17+
var tunnel = new BrowserStackTunnel({
18+
key: process.env.BROWSER_STACK_ACCESS_KEY || bsConfig.accessKey,
19+
hosts: [{
20+
name: config.hostname,
21+
port: config.port,
22+
sslFlag: 0
23+
}]
24+
});
25+
26+
tunnel.start(function(error) {
27+
if (error) {
28+
log.error('Can not establish the tunnel.');
29+
deferred.reject(error);
30+
} else {
31+
log.debug('Tunnel established.')
32+
deferred.resolve();
33+
}
34+
});
35+
36+
emitter.on('exit', function(done) {
37+
log.debug('Shutting down the tunnel.');
38+
tunnel.stop(function(error) {
39+
done();
40+
});
41+
});
42+
43+
return deferred.promise;
44+
};
45+
46+
247

348
var createBrowserStackClient = function(/* config.browserStack */ config) {
449
var env = process.env;
@@ -20,7 +65,9 @@ var formatError = function(error) {
2065
};
2166

2267

23-
var BrowserStackBrowser = function(id, emitter, /* browserStackClient */ client, args, logger) {
68+
var BrowserStackBrowser = function(id, emitter, args, logger,
69+
/* browserStackTunnel */ tunnel, /* browserStackClient */ client) {
70+
2471
var self = this;
2572
var workerId = null;
2673
var captured = false;
@@ -40,14 +87,18 @@ var BrowserStackBrowser = function(id, emitter, /* browserStackClient */ client,
4087
url: url + '?id=' + id
4188
};
4289

43-
client.createWorker(settings, function(error, worker) {
44-
if (error) {
45-
log.error('Can not start %s\n %s', browserName, formatError(error));
46-
return emitter.emit('browser_process_failure', self);
47-
}
48-
49-
log.debug('Browser %s started with id %s', browserName, worker.id);
50-
workerId = worker.id;
90+
tunnel.then(function() {
91+
client.createWorker(settings, function(error, worker) {
92+
if (error) {
93+
log.error('Can not start %s\n %s', browserName, formatError(error));
94+
return emitter.emit('browser_process_failure', self);
95+
}
96+
97+
log.debug('Browser %s started with id %s', browserName, worker.id);
98+
workerId = worker.id;
99+
});
100+
}, function() {
101+
emitter.emit('browser_process_failure', self);
51102
});
52103
};
53104

@@ -77,6 +128,7 @@ var BrowserStackBrowser = function(id, emitter, /* browserStackClient */ client,
77128

78129
// PUBLISH DI MODULE
79130
module.exports = {
131+
'browserStackTunnel': ['factory', createBrowserStackTunnel],
80132
'browserStackClient': ['factory', createBrowserStackClient],
81133
'launcher:BrowserStack': ['type', BrowserStackBrowser]
82134
};

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
],
1919
"author": "Vojta Jina <vojta.jina@gmail.com>",
2020
"dependencies": {
21-
"browserstack": "~0.2.0"
21+
"browserstack": "~0.2.0",
22+
"browserstacktunnel-wrapper": "~1.0.1",
23+
"q": "~0.9.6"
2224
},
2325
"peerDependencies": {
2426
"karma": ">=0.9"

0 commit comments

Comments
 (0)