1
1
var Log = require ( '../lib/logger' ) ,
2
2
logger = new Log ( global . logLevel ) ,
3
3
BrowserStack = require ( 'browserstack' ) ,
4
- fs = require ( 'fs' ) ,
5
4
qs = require ( 'querystring' ) ,
6
5
chalk = require ( 'chalk' ) ,
7
6
utils = require ( '../lib/utils' ) ,
@@ -17,11 +16,9 @@ var Log = require('../lib/logger'),
17
16
activityTimeout ,
18
17
ackTimeout ,
19
18
client ,
20
- pid_file = process . cwd ( ) + '/browserstack-run.pid' ,
21
19
workers = { } ,
22
20
workerKeys = { } ,
23
- tunnelingAgent ,
24
- tunnel ;
21
+ tunnelingAgent ;
25
22
26
23
function terminateAllWorkers ( callback ) {
27
24
logger . trace ( 'terminateAllWorkers' ) ;
@@ -65,7 +62,8 @@ function terminateAllWorkers(callback) {
65
62
}
66
63
}
67
64
68
- function cleanUpAndExit ( signal ) {
65
+ function cleanUpAndExit ( signal , callback ) {
66
+ callback = callback || function ( ) { } ;
69
67
logger . trace ( 'cleanUpAndExit: signal: %s' , signal ) ;
70
68
71
69
try {
@@ -79,23 +77,18 @@ function cleanUpAndExit(signal) {
79
77
}
80
78
81
79
try {
82
- process . kill ( tunnel . process . pid , 'SIGKILL ' ) ;
80
+ process . kill ( tunnel . process . pid , 'SIGTERM ' ) ;
83
81
} catch ( e ) {
84
82
logger . debug ( 'Non existent tunnel' ) ;
85
83
}
86
- try {
87
- fs . unlinkSync ( pid_file ) ;
88
- } catch ( e ) {
89
- logger . debug ( 'Non existent pid file.' ) ;
90
- }
91
84
92
85
if ( signal === 'SIGTERM' ) {
93
86
logger . debug ( 'Exiting' ) ;
94
- process . exit ( config . status ) ;
87
+ callback ( null , config . status ) ;
95
88
} else {
96
89
terminateAllWorkers ( function ( ) {
97
90
logger . debug ( 'Exiting' ) ;
98
- process . exit ( 1 ) ;
91
+ callback ( null , 1 ) ;
99
92
} ) ;
100
93
}
101
94
}
@@ -123,11 +116,11 @@ function buildTestUrl(test_path, worker_key, browser_string) {
123
116
return url ;
124
117
}
125
118
126
- function launchServer ( config ) {
119
+ function launchServer ( config , callback ) {
127
120
logger . trace ( 'launchServer:' , serverPort ) ;
128
121
logger . debug ( 'Launching server on port:' , serverPort ) ;
129
122
130
- server = new Server ( client , workers , config ) ;
123
+ server = new Server ( client , workers , config , callback ) ;
131
124
server . listen ( parseInt ( serverPort , 10 ) ) ;
132
125
}
133
126
@@ -265,7 +258,7 @@ function attachWorkerHelpers(worker) {
265
258
var statusPoller = {
266
259
poller : null ,
267
260
268
- start : function ( ) {
261
+ start : function ( callback ) {
269
262
logger . trace ( 'statusPoller.start' ) ;
270
263
271
264
statusPoller . poller = setInterval ( function ( ) {
@@ -311,7 +304,7 @@ var statusPoller = {
311
304
}
312
305
313
306
logger . trace ( '[%s] worker.activityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
314
- process . exit ( 'SIGTERM ') ;
307
+ callback ( null , 'All Tests Done ') ;
315
308
}
316
309
} else {
317
310
logger . trace ( '[%s] worker.activityTimeout: already ackd' , worker . id ) ;
@@ -337,7 +330,7 @@ var statusPoller = {
337
330
}
338
331
339
332
logger . trace ( '[%s] worker.testActivityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
340
- process . exit ( 'SIGTERM ') ;
333
+ callback ( null , 'All Tests Done ') ;
341
334
}
342
335
} else {
343
336
logger . trace ( '[%s] worker.testActivityTimeout: not ackd' , worker . id ) ;
@@ -355,28 +348,28 @@ var statusPoller = {
355
348
}
356
349
} ;
357
350
358
- function runTests ( config ) {
351
+ function runTests ( config , callback ) {
359
352
if ( config . proxy ) {
360
353
logger . trace ( 'runTests: with proxy' , config . proxy ) ;
361
354
362
355
tunnelingAgent = tunnel . httpOverHttp ( {
363
356
proxy : config . proxy
364
357
} ) ;
365
358
var oldhttpreq = http . request ;
366
- http . request = function ( options , callback ) {
359
+ http . request = function ( options , reqCallback ) {
367
360
options . agent = tunnelingAgent ;
368
- return oldhttpreq . call ( null , options , callback ) ;
361
+ return oldhttpreq . call ( null , options , reqCallback ) ;
369
362
} ;
370
363
}
371
364
if ( config . browsers && config . browsers . length > 0 ) {
372
365
ConfigParser . parse ( client , config . browsers , function ( browsers ) {
373
- launchServer ( config ) ;
366
+ launchServer ( config , callback ) ;
374
367
375
368
logger . trace ( 'runTests: creating tunnel' ) ;
376
369
tunnel = new Tunnel ( config . key , serverPort , config . tunnelIdentifier , config , function ( ) {
377
370
logger . trace ( 'runTests: created tunnel' ) ;
378
371
379
- statusPoller . start ( ) ;
372
+ statusPoller . start ( callback ) ;
380
373
var total_runs = config . browsers . length * ( Array . isArray ( config . test_path ) ? config . test_path . length : 1 ) ;
381
374
logger . info ( 'Launching ' + config . browsers . length + ' worker(s) for ' + total_runs + ' run(s).' ) ;
382
375
browsers . forEach ( function ( browser ) {
@@ -399,7 +392,7 @@ function runTests(config) {
399
392
} ) ;
400
393
} ) ;
401
394
} else {
402
- launchServer ( config ) ;
395
+ launchServer ( config , callback ) ;
403
396
}
404
397
}
405
398
@@ -413,10 +406,14 @@ exports.test = function(config_file, callback) {
413
406
username : config . username ,
414
407
password : config . key
415
408
} ) ;
416
- runTests ( config ) ;
417
- fs . writeFileSync ( pid_file , process . pid , 'utf-8' ) ;
409
+ runTests ( config , function ( error ) {
410
+ if ( error ) {
411
+ callback ( error ) ;
412
+ } else {
413
+ cleanUpAndExit ( 'SIGTERM' , callback ) ;
414
+ }
415
+ } ) ;
418
416
} catch ( e ) {
419
417
callback ( e ) ;
420
418
}
421
419
} ;
422
- exports . cleanUpAndExit = cleanUpAndExit ;
0 commit comments