@@ -6,7 +6,7 @@ import { RetryHttpHandler } from '../RetryHttpHandler';
66import { FetchHttpHandler } from '@aws-sdk/fetch-http-handler' ;
77
88const fetchHandler = jest . fn < Promise < Record < string , unknown > > , [ ] > ( ( ) =>
9- Promise . resolve ( { } )
9+ Promise . resolve ( { response : { statusCode : 500 } } )
1010) ;
1111jest . mock ( '@aws-sdk/fetch-http-handler' , ( ) => ( {
1212 FetchHttpHandler : jest
@@ -93,9 +93,9 @@ describe('RetryHttpHandler tests', () => {
9393 expect ( response ) . resolves . toBe ( success ) ;
9494 } ) ;
9595
96- test ( 'when status code is not 2xx then request fails' , async ( ) => {
96+ test ( 'when status code is 4xx then request fails without retrying ' , async ( ) => {
9797 // Init
98- const success = { response : { statusCode : 500 } } ;
98+ const success = { response : { statusCode : 400 } } ;
9999 fetchHandler . mockReturnValue ( Promise . resolve ( success ) ) ;
100100
101101 const retries = 0 ;
@@ -118,14 +118,15 @@ describe('RetryHttpHandler tests', () => {
118118 await client . sendFetch ( Utils . PUT_RUM_EVENTS_REQUEST ) ;
119119 } catch ( e ) {
120120 // Assert
121- expect ( e . message ) . toEqual ( '500 ' ) ;
121+ expect ( e . message ) . toEqual ( '400 ' ) ;
122122 return ;
123123 }
124+ expect ( fetchHandler ) . toHaveBeenCalledTimes ( 1 ) ;
124125
125126 fail ( 'Request should fail' ) ;
126127 } ) ;
127128
128- test ( 'when status code is not 2xx then request retries' , async ( ) => {
129+ test ( 'when status code is 5xx then request retries' , async ( ) => {
129130 // Init
130131 const badStatus = { response : { statusCode : 500 } } ;
131132 const okStatus = { response : { statusCode : 200 } } ;
@@ -157,6 +158,38 @@ describe('RetryHttpHandler tests', () => {
157158 expect ( response ) . resolves . toBe ( okStatus ) ;
158159 } ) ;
159160
161+ test ( 'when status code is 429 then request retries' , async ( ) => {
162+ // Init
163+ const badStatus = { response : { statusCode : 429 } } ;
164+ const okStatus = { response : { statusCode : 200 } } ;
165+ fetchHandler
166+ . mockReturnValueOnce ( Promise . resolve ( badStatus ) )
167+ . mockReturnValue ( Promise . resolve ( okStatus ) ) ;
168+
169+ const retries = 1 ;
170+ const retryHandler = new RetryHttpHandler (
171+ new FetchHttpHandler ( ) ,
172+ retries ,
173+ mockBackoff
174+ ) ;
175+
176+ const client : DataPlaneClient = new DataPlaneClient ( {
177+ fetchRequestHandler : retryHandler ,
178+ beaconRequestHandler : undefined ,
179+ endpoint : Utils . AWS_RUM_ENDPOINT ,
180+ region : Utils . AWS_RUM_REGION ,
181+ credentials : Utils . createAwsCredentials ( )
182+ } ) ;
183+
184+ // Run
185+ const response : Promise < { response : HttpResponse } > = client . sendFetch (
186+ Utils . PUT_RUM_EVENTS_REQUEST
187+ ) ;
188+
189+ // Assert
190+ expect ( response ) . resolves . toBe ( okStatus ) ;
191+ } ) ;
192+
160193 test ( 'when request fails then retry succeeds after exponential backoff' , async ( ) => {
161194 // Init
162195 jest . useFakeTimers ( { legacyFakeTimers : true } ) ;
0 commit comments