@@ -157,6 +157,29 @@ exports.Server = function Server(bsClient, workers) {
157
157
return details ;
158
158
}
159
159
160
+ function checkAndTerminateWorker ( worker , callback ) {
161
+ if ( config . reuseWorker && config . multipleTest ) {
162
+ var next_path = getNextTestPath ( worker . test_path ) ;
163
+ var new_url = 'http://localhost:' + 8888 + '/' + next_path
164
+ + "_worker_key=" + worker . _worker_key + "&_browser_string=" + getTestBrowserInfo ( worker ) ;
165
+ bsClient . postNewUrl ( worker . id , { url : new_url } , function ( ) {
166
+ callback ( true ) ;
167
+ } ) ;
168
+ } else {
169
+ bsClient . terminateWorker ( worker . id , callback ) ;
170
+ }
171
+ } ;
172
+
173
+ function getNextTestPath ( test_path ) {
174
+ // Someday I'll die for codes like these
175
+ for ( var i = 0 ; i < config . test_path . length ; i ++ ) {
176
+ if ( config . test_path [ i ] == test_path ) {
177
+ return config . test_path [ i + 1 ] ;
178
+ }
179
+ }
180
+
181
+ }
182
+
160
183
handlers = {
161
184
"_progress" : function progressHandler ( uri , body , request , response ) {
162
185
var uuid = request . headers [ 'x-worker-uuid' ] ;
@@ -184,6 +207,7 @@ exports.Server = function Server(bsClient, workers) {
184
207
} catch ( e ) { }
185
208
var uuid = request . headers [ 'x-worker-uuid' ] ;
186
209
var worker = workers [ uuid ] || { } ;
210
+ worker . _worker_key = uuid ;
187
211
188
212
if ( query === null ) {
189
213
logger . info ( "[%s] Null response from remote Browser" , request . headers [ 'x-browser-string' ] ) ;
@@ -205,11 +229,16 @@ exports.Server = function Server(bsClient, workers) {
205
229
logger . info ( '[%s] ' + chalk [ 'yellow' ] ( 'Screenshot' ) + ': %s' , getTestBrowserInfo ( worker ) , screenshot . url ) ;
206
230
}
207
231
208
- bsClient . terminateWorker ( worker . id , function ( ) {
232
+ checkAndTerminateWorker ( worker , function ( reusedWorker ) {
209
233
if ( ! workers [ uuid ] ) {
210
234
return ;
211
235
}
212
236
237
+ if ( reusedWorker ) {
238
+ logger . debug ( '[%s] Reused' , getTestBrowserInfo ( worker ) ) ;
239
+ return ;
240
+ }
241
+
213
242
logger . debug ( '[%s] Terminated' , getTestBrowserInfo ( worker ) ) ;
214
243
215
244
clearTimeout ( workers [ uuid ] . activityTimeout ) ;
0 commit comments