@@ -8,6 +8,8 @@ import com.lithic.api.client.okhttp.OkHttpClient
88import org.assertj.core.api.Assertions.assertThat
99import org.junit.jupiter.api.BeforeEach
1010import org.junit.jupiter.api.Test
11+ import org.junit.jupiter.params.ParameterizedTest
12+ import org.junit.jupiter.params.provider.ValueSource
1113
1214@WireMockTest
1315internal class RetryingHttpClientTest {
@@ -50,8 +52,9 @@ internal class RetryingHttpClientTest {
5052 verify(1 , postRequestedFor(urlPathEqualTo(" /something" )))
5153 }
5254
53- @Test
54- fun retryAfterHeader () {
55+ @ParameterizedTest
56+ @ValueSource(booleans = [false , true ])
57+ fun retryAfterHeader (async : Boolean ) {
5558 val request =
5659 HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build()
5760 stubFor(
@@ -79,9 +82,67 @@ internal class RetryingHttpClientTest {
7982 )
8083 val retryingClient =
8184 RetryingHttpClient .builder().httpClient(httpClient).maxRetries(2 ).build()
82- val response = retryingClient.execute(request)
85+
86+ val response =
87+ if (async) retryingClient.executeAsync(request).get()
88+ else retryingClient.execute(request)
89+
8390 assertThat(response.statusCode()).isEqualTo(200 )
84- verify(3 , postRequestedFor(urlPathEqualTo(" /something" )))
91+ verify(
92+ 1 ,
93+ postRequestedFor(urlPathEqualTo(" /something" ))
94+ .withHeader(" x-stainless-retry-count" , equalTo(" 0" ))
95+ )
96+ verify(
97+ 1 ,
98+ postRequestedFor(urlPathEqualTo(" /something" ))
99+ .withHeader(" x-stainless-retry-count" , equalTo(" 1" ))
100+ )
101+ verify(
102+ 1 ,
103+ postRequestedFor(urlPathEqualTo(" /something" ))
104+ .withHeader(" x-stainless-retry-count" , equalTo(" 2" ))
105+ )
106+ }
107+
108+ @ParameterizedTest
109+ @ValueSource(booleans = [false , true ])
110+ fun overwriteRetryCountHeader (async : Boolean ) {
111+ val request =
112+ HttpRequest .builder()
113+ .method(HttpMethod .POST )
114+ .addPathSegment(" something" )
115+ .putHeader(" x-stainless-retry-count" , " 42" )
116+ .build()
117+ stubFor(
118+ post(urlPathEqualTo(" /something" ))
119+ .inScenario(" foo" ) // first we fail with a retry after header given as a date
120+ .whenScenarioStateIs(Scenario .STARTED )
121+ .willReturn(
122+ serviceUnavailable().withHeader(" Retry-After" , " Wed, 21 Oct 2015 07:28:00 GMT" )
123+ )
124+ .willSetStateTo(" RETRY_AFTER_DATE" )
125+ )
126+ stubFor(
127+ post(urlPathEqualTo(" /something" ))
128+ .inScenario(" foo" ) // then we return a success
129+ .whenScenarioStateIs(" RETRY_AFTER_DATE" )
130+ .willReturn(ok())
131+ .willSetStateTo(" COMPLETED" )
132+ )
133+ val retryingClient =
134+ RetryingHttpClient .builder().httpClient(httpClient).maxRetries(2 ).build()
135+
136+ val response =
137+ if (async) retryingClient.executeAsync(request).get()
138+ else retryingClient.execute(request)
139+
140+ assertThat(response.statusCode()).isEqualTo(200 )
141+ verify(
142+ 2 ,
143+ postRequestedFor(urlPathEqualTo(" /something" ))
144+ .withHeader(" x-stainless-retry-count" , equalTo(" 42" ))
145+ )
85146 }
86147
87148 @Test
0 commit comments