3
3
var todo = process . argv [ 2 ] ;
4
4
5
5
if ( todo === '--verbose' ) {
6
- global . logLevel = 'debug' ;
6
+ global . logLevel = process . env . LOG_LEVEL || 'debug' ;
7
7
} else {
8
8
global . logLevel = 'info' ;
9
9
}
@@ -40,7 +40,11 @@ var Log = require('../lib/logger'),
40
40
tunnel ;
41
41
42
42
function terminateAllWorkers ( callback ) {
43
+ logger . trace ( 'terminateAllWorkers' ) ;
44
+
43
45
var cleanWorker = function ( id , key ) {
46
+ logger . trace ( 'cleanWorker(%s, %s)' , id , key ) ;
47
+
44
48
client . terminateWorker ( id , function ( ) {
45
49
var worker = workers [ key ] ;
46
50
if ( worker ) {
@@ -52,12 +56,14 @@ function terminateAllWorkers(callback) {
52
56
delete workerKeys [ worker . id ] ;
53
57
}
54
58
if ( utils . objectSize ( workers ) === 0 ) {
59
+ logger . trace ( 'terminateAllWorkers: done' ) ;
55
60
callback ( ) ;
56
61
}
57
62
} ) ;
58
63
} ;
59
64
60
65
if ( utils . objectSize ( workers ) === 0 ) {
66
+ logger . trace ( 'terminateAllWorkers: done' ) ;
61
67
callback ( ) ;
62
68
} else {
63
69
for ( var key in workers ) {
@@ -67,6 +73,7 @@ function terminateAllWorkers(callback) {
67
73
} else {
68
74
delete workers [ key ] ;
69
75
if ( utils . objectSize ( workers ) === 0 ) {
76
+ logger . trace ( 'terminateAllWorkers: done' ) ;
70
77
callback ( ) ;
71
78
}
72
79
}
@@ -75,6 +82,8 @@ function terminateAllWorkers(callback) {
75
82
}
76
83
77
84
function cleanUpAndExit ( signal , status ) {
85
+ logger . trace ( 'cleanUpAndExit: signal: %s' , signal ) ;
86
+
78
87
try {
79
88
server . close ( ) ;
80
89
} catch ( e ) {
@@ -113,6 +122,7 @@ function getTestBrowserInfo(browserString, path) {
113
122
info += ', ' + path ;
114
123
}
115
124
125
+ logger . trace ( 'getTestBrowserInfo(%s, %s): %s' , browserString , path , info ) ;
116
126
return info ;
117
127
}
118
128
@@ -126,11 +136,13 @@ function buildTestUrl(test_path, worker_key, browser_string) {
126
136
} ) ;
127
137
128
138
url += ( ( url . indexOf ( '?' ) > 0 ) ? '&' : '?' ) + querystring ;
139
+ logger . trace ( 'buildTestUrl:' , url ) ;
129
140
return url ;
130
141
}
131
142
132
143
133
144
function launchServer ( ) {
145
+ logger . trace ( 'launchServer:' , serverPort ) ;
134
146
logger . debug ( 'Launching server on port:' , serverPort ) ;
135
147
136
148
server = new Server ( client , workers ) ;
@@ -165,7 +177,11 @@ function launchBrowser(browser, path) {
165
177
activityTimeout = timeout - 10 ;
166
178
ackTimeout = parseInt ( config . ackTimeout ) || 60 ;
167
179
180
+ logger . trace ( '[%s] client.createWorker' , browserInfo , browser ) ;
181
+
168
182
client . createWorker ( browser , function ( err , worker ) {
183
+ logger . trace ( '[%s] client.createWorker | response:' , browserInfo , worker , err ) ;
184
+
169
185
if ( err || typeof worker !== 'object' ) {
170
186
logger . info ( 'Error from BrowserStack: ' , err ) ;
171
187
utils . alertBrowserStack ( 'Failed to launch worker' ,
@@ -191,6 +207,8 @@ function launchBrowser(browser, path) {
191
207
192
208
function launchBrowsers ( config , browser ) {
193
209
setTimeout ( function ( ) {
210
+ logger . trace ( 'launchBrowsers' , browser ) ;
211
+
194
212
if ( Array . isArray ( config . test_path ) ) {
195
213
config . multipleTest = config . test_path . length > 1 ? true : false ;
196
214
launchBrowser ( browser , config . test_path [ 0 ] ) ;
@@ -207,7 +225,9 @@ function attachWorkerHelpers(worker) {
207
225
208
226
worker . buildUrl = function buildUrl ( test_path ) {
209
227
var workerKey = workerKeys [ this . id ] ? workerKeys [ this . id ] . key : null ;
210
- return buildTestUrl ( test_path || this . test_path , workerKey , this . getTestBrowserInfo ( ) ) ;
228
+ var url = buildTestUrl ( test_path || this . test_path , workerKey , this . getTestBrowserInfo ( ) ) ;
229
+ logger . trace ( '[%s] worker.buildUrl: %s' , this . id , url ) ;
230
+ return url ;
211
231
} ;
212
232
213
233
worker . getTestBrowserInfo = function getTestBrowserInfo ( test_path ) {
@@ -222,18 +242,23 @@ function attachWorkerHelpers(worker) {
222
242
var self = this ;
223
243
224
244
if ( this . ackTimeout ) {
225
- // Already awaiting ack, or awaited ack once and failed
245
+ logger . trace ( '[%s] worker.awaitAck: already awaiting ack, or awaited ack once and failed' , self . id ) ;
226
246
return ;
227
247
}
228
248
249
+ logger . trace ( '[%s] worker.awaitAck: timeout in %d secs' , self . id , ackTimeout ) ;
250
+
229
251
this . ackTimeout = setTimeout ( function ( ) {
230
252
if ( self . isAckd ) {
231
- // Already ack'd
253
+ logger . trace ( '[%s] worker.awaitAck: already ackd' , self . id ) ;
232
254
return ;
233
255
}
234
256
235
- // worker has not acknowledged itself in 60 sec, reopen url
236
- client . changeUrl ( self . id , { url : self . buildUrl ( ) } , function ( ) {
257
+ var url = self . buildUrl ( ) ;
258
+ logger . trace ( '[%s] worker.awaitAck: client.changeUrl: %s' , self . id , url ) ;
259
+
260
+ client . changeUrl ( self . id , { url : url } , function ( err , data ) {
261
+ logger . trace ( '[%s] worker.awaitAck: client.changeUrl: %s | response:' , self . id , url , data , err ) ;
237
262
logger . debug ( '[%s] Sent Request to reload url' , self . getTestBrowserInfo ( ) ) ;
238
263
} ) ;
239
264
@@ -246,10 +271,13 @@ function attachWorkerHelpers(worker) {
246
271
this . resetAck ( ) ;
247
272
this . isAckd = true ;
248
273
274
+ logger . trace ( '[%s] worker.markAckd' , this . id ) ;
249
275
logger . debug ( '[%s] Received ack' , this . getTestBrowserInfo ( ) ) ;
250
276
} ;
251
277
252
278
worker . resetAck = function resetAck ( ) {
279
+ logger . trace ( '[%s] worker.resetAck' , this . id ) ;
280
+
253
281
clearTimeout ( this . ackTimeout ) ;
254
282
this . ackTimeout = null ;
255
283
this . isAckd = false ;
@@ -263,8 +291,12 @@ var statusPoller = {
263
291
poller : null ,
264
292
265
293
start : function ( ) {
294
+ logger . trace ( 'statusPoller.start' ) ;
295
+
266
296
statusPoller . poller = setInterval ( function ( ) {
267
297
client . getWorkers ( function ( err , _workers ) {
298
+ logger . trace ( 'client.getWorkers | response: worker count: %d' , ( _workers || [ ] ) . length , err ) ;
299
+
268
300
if ( ! _workers ) {
269
301
logger . info ( chalk . red ( 'Error found: ' + err ) ) ;
270
302
return ;
@@ -286,9 +318,12 @@ var statusPoller = {
286
318
287
319
// Await ack from browser-worker
288
320
worker . awaitAck ( ) ;
321
+ logger . trace ( '[%s] worker.activityTimeout: timeout in %d secs' , worker . id , activityTimeout ) ;
289
322
290
323
worker . activityTimeout = setTimeout ( function ( ) {
291
324
if ( ! worker . isAckd ) {
325
+ logger . trace ( '[%s] worker.activityTimeout' , worker . id ) ;
326
+
292
327
var subject = 'Worker inactive for too long: ' + worker . string ;
293
328
var content = 'Worker details:\n' + JSON . stringify ( worker . config , null , 4 ) ;
294
329
utils . alertBrowserStack ( subject , content , null , function ( ) { } ) ;
@@ -303,13 +338,21 @@ var statusPoller = {
303
338
config . status = 1 ;
304
339
}
305
340
341
+ logger . trace ( '[%s] worker.activityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
306
342
process . exit ( 'SIGTERM' ) ;
307
343
}
344
+ } else {
345
+ logger . trace ( '[%s] worker.activityTimeout: already ackd' , worker . id ) ;
308
346
}
309
347
} , activityTimeout * 1000 ) ;
310
348
349
+
350
+ logger . trace ( '[%s] worker.testActivityTimeout: timeout in %d secs' , worker . id , activityTimeout ) ;
351
+
311
352
worker . testActivityTimeout = setTimeout ( function ( ) {
312
353
if ( worker . isAckd ) {
354
+ logger . trace ( '[%s] worker.testActivityTimeout' , worker . id ) ;
355
+
313
356
var subject = 'Tests timed out on: ' + worker . string ;
314
357
var content = 'Worker details:\n' + JSON . stringify ( worker . config , null , 4 ) ;
315
358
utils . alertBrowserStack ( subject , content , null , function ( ) { } ) ;
@@ -324,8 +367,11 @@ var statusPoller = {
324
367
config . status = 1 ;
325
368
}
326
369
370
+ logger . trace ( '[%s] worker.testActivityTimeout: all tests done' , worker . id , config . status && 'with failures' ) ;
327
371
process . exit ( 'SIGTERM' ) ;
328
372
}
373
+ } else {
374
+ logger . trace ( '[%s] worker.testActivityTimeout: not ackd' , worker . id ) ;
329
375
}
330
376
} , ( activityTimeout * 1000 ) ) ;
331
377
}
@@ -335,12 +381,15 @@ var statusPoller = {
335
381
} ,
336
382
337
383
stop : function ( ) {
384
+ logger . trace ( 'statusPoller.poller' ) ;
338
385
clearInterval ( statusPoller . poller ) ;
339
386
}
340
387
} ;
341
388
342
389
function runTests ( ) {
343
390
if ( config . proxy ) {
391
+ logger . trace ( 'runTests: with proxy' , config . proxy ) ;
392
+
344
393
tunnelingAgent = tunnel . httpOverHttp ( {
345
394
proxy : config . proxy
346
395
} ) ;
@@ -353,15 +402,21 @@ function runTests() {
353
402
if ( config . browsers && config . browsers . length > 0 ) {
354
403
ConfigParser . parse ( client , config . browsers , function ( browsers ) {
355
404
launchServer ( ) ;
405
+
406
+ logger . trace ( 'runTests: creating tunnel' ) ;
356
407
tunnel = new Tunnel ( config . key , serverPort , config . tunnelIdentifier , function ( ) {
408
+ logger . trace ( 'runTests: created tunnel' ) ;
409
+
357
410
statusPoller . start ( ) ;
358
411
var total_runs = config . browsers . length * ( Array . isArray ( config . test_path ) ? config . test_path . length : 1 ) ;
359
412
logger . info ( 'Launching ' + config . browsers . length + ' worker(s) for ' + total_runs + ' run(s).' ) ;
360
413
browsers . forEach ( function ( browser ) {
361
414
if ( browser . browser_version === 'latest' ) {
362
415
logger . debug ( '[%s] Finding version.' , utils . browserString ( browser ) ) ;
416
+ logger . trace ( 'runTests: client.getLatest' ) ;
363
417
364
418
client . getLatest ( browser , function ( err , version ) {
419
+ logger . trace ( 'runTests: client.getLatest | response:' , version , err ) ;
365
420
logger . debug ( '[%s] Version is %s.' ,
366
421
utils . browserString ( browser ) , version ) ;
367
422
browser . browser_version = version ;
0 commit comments