Skip to content

Commit 5f33ad9

Browse files
committed
Added Test case for Async , handled review ocmments
1 parent 9431959 commit 5f33ad9

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

test/http-client-tests/src/main/java/software/amazon/awssdk/http/SdkAsyncHttpClientH1TestSuite.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,26 @@ public void connectionsArePooledByHostAndPort() throws InterruptedException {
172172

173173
}
174174

175+
@Test
176+
public void doesNotRetryOn429StatusCode() throws InterruptedException {
177+
server.return429OnFirstRequest = true;
178+
server.closeConnection = false;
179+
180+
HttpTestUtils.sendGetRequest(server.port(), client).join();
181+
// Wait to ensure no retries happen
182+
Thread.sleep(100);
183+
184+
// Verify only one request was made (no retries)
185+
assertThat(server.requestCount).isEqualTo(1);
186+
187+
// Send second request to verify connection reuse works after 429
188+
HttpTestUtils.sendGetRequest(server.port(), client).join();
189+
190+
// Verify connection was reused and total of 2 requests
191+
assertThat(server.channels.size()).isEqualTo(1);
192+
assertThat(server.requestCount).isEqualTo(2);
193+
}
194+
175195
private static class Server extends ChannelInitializer<Channel> {
176196
private static final byte[] CONTENT = "helloworld".getBytes(StandardCharsets.UTF_8);
177197
private ServerBootstrap bootstrap;
@@ -181,6 +201,9 @@ private static class Server extends ChannelInitializer<Channel> {
181201
private SslContext sslCtx;
182202
private boolean return500OnFirstRequest;
183203
private boolean closeConnection;
204+
private boolean return429OnFirstRequest;
205+
private volatile int requestCount = 0;
206+
184207

185208
public void init() throws Exception {
186209
SelfSignedCertificate ssc = new SelfSignedCertificate();
@@ -218,10 +241,14 @@ private class BehaviorTestChannelHandler extends ChannelDuplexHandler {
218241
@Override
219242
public void channelRead(ChannelHandlerContext ctx, Object msg) {
220243
if (msg instanceof HttpRequest) {
244+
requestCount++;
221245

222246
HttpResponseStatus status;
223247
if (ctx.channel().equals(channels.get(0)) && return500OnFirstRequest) {
224248
status = INTERNAL_SERVER_ERROR;
249+
} else if (ctx.channel().equals(channels.get(0)) && return429OnFirstRequest) {
250+
status = HttpResponseStatus.TOO_MANY_REQUESTS;
251+
return429OnFirstRequest = false; // Reset after first use
225252
} else {
226253
status = OK;
227254
}

0 commit comments

Comments
 (0)