11var Log = require ( '../lib/logger' ) ,
22 logger = new Log ( global . logLevel ) ,
33 BrowserStack = require ( 'browserstack' ) ,
4- fs = require ( 'fs' ) ,
54 qs = require ( 'querystring' ) ,
65 chalk = require ( 'chalk' ) ,
76 utils = require ( '../lib/utils' ) ,
@@ -17,11 +16,9 @@ var Log = require('../lib/logger'),
1716 activityTimeout ,
1817 ackTimeout ,
1918 client ,
20- pid_file = process . cwd ( ) + '/browserstack-run.pid' ,
2119 workers = { } ,
2220 workerKeys = { } ,
23- tunnelingAgent ,
24- tunnel ;
21+ tunnelingAgent ;
2522
2623function terminateAllWorkers ( callback ) {
2724 logger . trace ( 'terminateAllWorkers' ) ;
@@ -65,7 +62,8 @@ function terminateAllWorkers(callback) {
6562 }
6663}
6764
68- function cleanUpAndExit ( signal ) {
65+ function cleanUpAndExit ( signal , callback ) {
66+ callback = callback || function ( ) { } ;
6967 logger . trace ( 'cleanUpAndExit: signal: %s' , signal ) ;
7068
7169 try {
@@ -79,23 +77,18 @@ function cleanUpAndExit(signal) {
7977 }
8078
8179 try {
82- process . kill ( tunnel . process . pid , 'SIGKILL ' ) ;
80+ process . kill ( tunnel . process . pid , 'SIGTERM ' ) ;
8381 } catch ( e ) {
8482 logger . debug ( 'Non existent tunnel' ) ;
8583 }
86- try {
87- fs . unlinkSync ( pid_file ) ;
88- } catch ( e ) {
89- logger . debug ( 'Non existent pid file.' ) ;
90- }
9184
9285 if ( signal === 'SIGTERM' ) {
9386 logger . debug ( 'Exiting' ) ;
94- process . exit ( config . status ) ;
87+ callback ( null , config . status ) ;
9588 } else {
9689 terminateAllWorkers ( function ( ) {
9790 logger . debug ( 'Exiting' ) ;
98- process . exit ( 1 ) ;
91+ callback ( null , 1 ) ;
9992 } ) ;
10093 }
10194}
@@ -123,11 +116,11 @@ function buildTestUrl(test_path, worker_key, browser_string) {
123116 return url ;
124117}
125118
126- function launchServer ( config ) {
119+ function launchServer ( config , callback ) {
127120 logger . trace ( 'launchServer:' , serverPort ) ;
128121 logger . debug ( 'Launching server on port:' , serverPort ) ;
129122
130- server = new Server ( client , workers , config ) ;
123+ server = new Server ( client , workers , config , callback ) ;
131124 server . listen ( parseInt ( serverPort , 10 ) ) ;
132125}
133126
@@ -265,7 +258,7 @@ function attachWorkerHelpers(worker) {
265258var statusPoller = {
266259 poller : null ,
267260
268- start : function ( ) {
261+ start : function ( callback ) {
269262 logger . trace ( 'statusPoller.start' ) ;
270263
271264 statusPoller . poller = setInterval ( function ( ) {
@@ -311,7 +304,7 @@ var statusPoller = {
311304 }
312305
313306 logger . trace ( '[%s] worker.activityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
314- process . exit ( 'SIGTERM ') ;
307+ callback ( null , 'All Tests Done ') ;
315308 }
316309 } else {
317310 logger . trace ( '[%s] worker.activityTimeout: already ackd' , worker . id ) ;
@@ -337,7 +330,7 @@ var statusPoller = {
337330 }
338331
339332 logger . trace ( '[%s] worker.testActivityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
340- process . exit ( 'SIGTERM ') ;
333+ callback ( null , 'All Tests Done ') ;
341334 }
342335 } else {
343336 logger . trace ( '[%s] worker.testActivityTimeout: not ackd' , worker . id ) ;
@@ -355,28 +348,28 @@ var statusPoller = {
355348 }
356349} ;
357350
358- function runTests ( config ) {
351+ function runTests ( config , callback ) {
359352 if ( config . proxy ) {
360353 logger . trace ( 'runTests: with proxy' , config . proxy ) ;
361354
362355 tunnelingAgent = tunnel . httpOverHttp ( {
363356 proxy : config . proxy
364357 } ) ;
365358 var oldhttpreq = http . request ;
366- http . request = function ( options , callback ) {
359+ http . request = function ( options , reqCallback ) {
367360 options . agent = tunnelingAgent ;
368- return oldhttpreq . call ( null , options , callback ) ;
361+ return oldhttpreq . call ( null , options , reqCallback ) ;
369362 } ;
370363 }
371364 if ( config . browsers && config . browsers . length > 0 ) {
372365 ConfigParser . parse ( client , config . browsers , function ( browsers ) {
373- launchServer ( config ) ;
366+ launchServer ( config , callback ) ;
374367
375368 logger . trace ( 'runTests: creating tunnel' ) ;
376369 tunnel = new Tunnel ( config . key , serverPort , config . tunnelIdentifier , config , function ( ) {
377370 logger . trace ( 'runTests: created tunnel' ) ;
378371
379- statusPoller . start ( ) ;
372+ statusPoller . start ( callback ) ;
380373 var total_runs = config . browsers . length * ( Array . isArray ( config . test_path ) ? config . test_path . length : 1 ) ;
381374 logger . info ( 'Launching ' + config . browsers . length + ' worker(s) for ' + total_runs + ' run(s).' ) ;
382375 browsers . forEach ( function ( browser ) {
@@ -399,7 +392,7 @@ function runTests(config) {
399392 } ) ;
400393 } ) ;
401394 } else {
402- launchServer ( config ) ;
395+ launchServer ( config , callback ) ;
403396 }
404397}
405398
@@ -413,10 +406,14 @@ exports.test = function(config_file, callback) {
413406 username : config . username ,
414407 password : config . key
415408 } ) ;
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+ } ) ;
418416 } catch ( e ) {
419417 callback ( e ) ;
420418 }
421419} ;
422- exports . cleanUpAndExit = cleanUpAndExit ;
0 commit comments