Skip to content

Commit 1284872

Browse files
shawkinsmanusa
authored andcommitted
tests for retry-after
1 parent 125e838 commit 1284872

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/http/StandardHttpClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ private <V> CompletableFuture<V> retryWithExponentialBackoff(
191191
});
192192
}
193193

194-
private long retryAfterMillis(HttpResponse<?> httpResponse) {
195-
String retryAfter = httpResponse.header("Retry-After");
194+
static long retryAfterMillis(HttpResponse<?> httpResponse) {
195+
String retryAfter = httpResponse.header(StandardHttpHeaders.RETRY_AFTER);
196196
if (retryAfter != null) {
197197
try {
198198
return Integer.parseInt(retryAfter) * 1000L;

kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/http/StandardHttpHeaders.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class StandardHttpHeaders implements HttpHeaders {
2626
public static final String CONTENT_LENGTH = "Content-Length";
2727
public static final String EXPECT = "Expect";
2828
public static final String EXPECT_CONTINUE = "100-continue";
29+
public static final String RETRY_AFTER = "Retry-After";
2930

3031
private final Map<String, List<String>> headers;
3132

@@ -46,4 +47,8 @@ public List<String> headers(String key) {
4647
public Map<String, List<String>> headers() {
4748
return Collections.unmodifiableMap(headers);
4849
}
50+
51+
public Map<String, List<String>> getHeaders() {
52+
return headers;
53+
}
4954
}

kubernetes-client-api/src/test/java/io/fabric8/kubernetes/client/http/StandardHttpClientTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
import java.io.IOException;
2626
import java.io.InputStream;
2727
import java.net.URI;
28+
import java.time.ZonedDateTime;
29+
import java.time.format.DateTimeFormatter;
30+
import java.util.Arrays;
2831
import java.util.concurrent.CompletableFuture;
2932
import java.util.concurrent.ExecutionException;
3033
import java.util.concurrent.TimeUnit;
@@ -226,4 +229,31 @@ void testRequestTimeout() {
226229
.isInstanceOf(ExecutionException.class).hasCauseInstanceOf(TimeoutException.class);
227230
}
228231

232+
@Test
233+
void testMultiValueHeader() {
234+
TestHttpResponse<Void> response = new TestHttpResponse<Void>();
235+
response.getHeaders().put("header", Arrays.asList("a", "b"));
236+
237+
assertEquals("a,b", response.header("header"));
238+
}
239+
240+
@Test
241+
void testRetryAfterParsing() {
242+
TestHttpResponse<Void> response = new TestHttpResponse<Void>();
243+
244+
//default to 0
245+
assertEquals(0, StandardHttpClient.retryAfterMillis(response));
246+
247+
response.getHeaders().put(StandardHttpHeaders.RETRY_AFTER, Arrays.asList("2"));
248+
assertEquals(2000, StandardHttpClient.retryAfterMillis(response));
249+
250+
response.getHeaders().put(StandardHttpHeaders.RETRY_AFTER, Arrays.asList("invalid"));
251+
assertEquals(0, StandardHttpClient.retryAfterMillis(response));
252+
253+
response.getHeaders().put(StandardHttpHeaders.RETRY_AFTER,
254+
Arrays.asList(ZonedDateTime.now().plusSeconds(10).format(DateTimeFormatter.RFC_1123_DATE_TIME)));
255+
long after = StandardHttpClient.retryAfterMillis(response);
256+
assertTrue(after > 1000 && after <= 10000);
257+
}
258+
229259
}

0 commit comments

Comments
 (0)