@@ -536,6 +536,43 @@ describe('common/util', function() {
536
536
} ) ;
537
537
} ) ;
538
538
539
+ it ( 'should retry rate limits on API errors' , function ( done ) {
540
+ var attemptedRetries = 0 ;
541
+ var codes = [ 429 , 503 , 500 , 'done' ] ;
542
+ var error = new Error ( 'Rate Limit Error.' ) ;
543
+ error . code = codes [ 0 ] ; // Rate limit error
544
+
545
+ var authorizedReqOpts = { a : 'b' , c : 'd' } ;
546
+
547
+ var old_setTimeout = setTimeout ;
548
+ setTimeout = function ( callback , time ) {
549
+ var MIN_TIME = ( Math . pow ( 2 , attemptedRetries ) * 1000 ) ;
550
+ var MAX_TIME = ( Math . pow ( 2 , attemptedRetries ) * 1000 ) + 1000 ;
551
+ assert ( time >= MIN_TIME && time <= MAX_TIME ) ;
552
+ attemptedRetries ++ ;
553
+ error . code = codes [ attemptedRetries ] ; // test a new code
554
+ callback ( ) ; // make the request again
555
+ } ;
556
+
557
+ gsa_Override = function ( ) {
558
+ return function authorize ( reqOpts , callback ) {
559
+ callback ( null , authorizedReqOpts ) ;
560
+ } ;
561
+ } ;
562
+
563
+ request_Override = function ( reqOpts , callback ) {
564
+ callback ( null , null , { error : error } ) ;
565
+ } ;
566
+
567
+ var makeRequest = util . makeAuthorizedRequest ( { } ) ;
568
+ makeRequest ( { } , function ( err ) {
569
+ setTimeout = old_setTimeout ;
570
+ assert . equal ( err . message , 'Rate Limit Error.' ) ;
571
+ assert . equal ( err . code , 'done' ) ;
572
+ done ( ) ;
573
+ } ) ;
574
+ } ) ;
575
+
539
576
it ( 'should retry rate limits 3x by default' , function ( done ) {
540
577
var attemptedRetries = 0 ;
541
578
var error = new Error ( 'Rate Limit Error.' ) ;
0 commit comments