1+ var q = require ( 'q' ) ;
12var 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
348var 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
79130module . exports = {
131+ 'browserStackTunnel' : [ 'factory' , createBrowserStackTunnel ] ,
80132 'browserStackClient' : [ 'factory' , createBrowserStackClient ] ,
81133 'launcher:BrowserStack' : [ 'type' , BrowserStackBrowser ]
82134} ;
0 commit comments