@@ -283,49 +283,73 @@ describe('Concurrency queue test', () => {
283283
284284 it ( 'Concurrency with 10 timeout requests' , done => {
285285 const client = Axios . create ( {
286- baseURL : `${ host } :${ port } `
287- } )
288- const concurrency = new ConcurrencyQueue ( { axios : client , config : { retryOnError : true , timeout : 250 } } )
289- client . get ( 'http://localhost:4444/timeout' , {
286+ baseURL : `${ host } :${ port } ` ,
290287 timeout : 250
291- } ) . then ( function ( res ) {
292- expect ( res ) . to . be . equal ( null )
288+ } )
289+ const concurrency = new ConcurrencyQueue ( {
290+ axios : client ,
291+ config : {
292+ retryOnError : false ,
293+ timeout : 250 ,
294+ retryOnNetworkFailure : false ,
295+ maxNetworkRetries : 0
296+ }
297+ } )
298+ client . get ( '/timeout' ) . then ( function ( res ) {
299+ concurrency . detach ( )
300+ expect . fail ( 'Should not succeed' )
293301 done ( )
294302 } ) . catch ( function ( err ) {
295303 concurrency . detach ( )
296- expect ( err . response . status ) . to . be . equal ( 408 )
297- expect ( err . response . statusText ) . to . be . equal ( 'timeout of 250ms exceeded' )
304+ // Handle both response and non-response timeout errors
305+ if ( err . response ) {
306+ expect ( err . response . status ) . to . be . equal ( 408 )
307+ expect ( err . response . statusText ) . to . be . equal ( 'timeout of 250ms exceeded' )
308+ } else if ( err . code === 'ECONNABORTED' ) {
309+ // Direct timeout without response object
310+ expect ( err . code ) . to . be . equal ( 'ECONNABORTED' )
311+ expect ( err . message ) . to . include ( 'timeout' )
312+ } else {
313+ expect . fail ( `Unexpected error: ${ err . message } ` )
314+ }
298315 done ( )
299316 } ) . catch ( done )
300317 } )
301318 it ( 'Concurrency with 10 timeout requests retry' , done => {
302- retryDelayOptionsStub . returns ( 5000 )
319+ retryDelayOptionsStub . returns ( 100 )
303320 const client = Axios . create ( {
304- baseURL : `${ host } :${ port } `
305- } )
306- const concurrency = new ConcurrencyQueue ( { axios : client ,
307- config : { retryCondition : ( error ) => {
308- if ( error . response . status === 408 ) {
309- return true
310- }
311- return false
312- } ,
313- logHandler : logHandlerStub ,
314- retryDelayOptions : {
315- base : retryDelayOptionsStub ( )
316- } ,
317- retryLimit : 2 ,
318- retryOnError : true ,
319- timeout : 250 } } )
320- client . get ( 'http://localhost:4444/timeout' , {
321+ baseURL : `${ host } :${ port } ` ,
321322 timeout : 250
322- } ) . then ( function ( res ) {
323- expect ( res ) . to . be . equal ( null )
323+ } )
324+ const concurrency = new ConcurrencyQueue ( {
325+ axios : client ,
326+ config : {
327+ retryCondition : ( error ) => {
328+ if ( error . response && error . response . status === 408 ) {
329+ return true
330+ }
331+ return false
332+ } ,
333+ logHandler : logHandlerStub ,
334+ retryDelayOptions : {
335+ base : retryDelayOptionsStub ( )
336+ } ,
337+ retryLimit : 2 ,
338+ retryOnError : true ,
339+ timeout : 250 ,
340+ retryOnNetworkFailure : false ,
341+ maxNetworkRetries : 0
342+ }
343+ } )
344+ client . get ( '/timeout' ) . then ( function ( res ) {
345+ concurrency . detach ( )
346+ expect . fail ( 'Should not succeed' )
324347 done ( )
325348 } ) . catch ( function ( err ) {
326349 concurrency . detach ( )
327350 expect ( err . response . status ) . to . be . equal ( 408 )
328351 expect ( err . response . statusText ) . to . be . equal ( 'timeout of 250ms exceeded' )
352+ expect ( logHandlerStub . callCount ) . to . be . at . least ( 2 ) // Should have retry attempts
329353 done ( )
330354 } ) . catch ( done )
331355 } )
0 commit comments