This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch issue/awaitility in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-auth-oauth-client.git
commit ea674ebad73850948cc0780d42b61ec55c88d9fd Author: Robert Munteanu <[email protected]> AuthorDate: Wed Jan 7 11:24:18 2026 +0100 chore(testing): replace Thread.sleep with Awaitility in AuthorizationCodeFlowIT --- .../auth/oauth_client/AuthorizationCodeFlowIT.java | 57 +++++++++++----------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/src/test/java/org/apache/sling/auth/oauth_client/AuthorizationCodeFlowIT.java b/src/test/java/org/apache/sling/auth/oauth_client/AuthorizationCodeFlowIT.java index 2028002..aafab2e 100644 --- a/src/test/java/org/apache/sling/auth/oauth_client/AuthorizationCodeFlowIT.java +++ b/src/test/java/org/apache/sling/auth/oauth_client/AuthorizationCodeFlowIT.java @@ -29,6 +29,7 @@ import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; import java.nio.charset.StandardCharsets; import java.nio.file.Path; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -75,17 +76,20 @@ import org.junit.jupiter.api.io.TempDir; import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.assertTrue; class AuthorizationCodeFlowIT { + private static final Duration DEFAULT_AWAIT_DURATION = Duration.ofSeconds(10); + private static final Duration DEFAULT_AWAIT_INTERVAL = Duration.ofMillis(100); + private static final String IV_GENERATOR_REGISTRAR_PID = JasyptRandomIvGeneratorRegistrar.class.getName(); private static final String PASSWORD_PROVIDER_PID = EnvironmentVariablePasswordProvider.class.getName(); private static final String CRYPTO_SERVICE_PID = JasyptStandardPbeStringCryptoService.class.getName(); private static final String OIDC_CONFIG_PID = OidcConnectionImpl.class.getName(); private static final String OAUTH_CONFIG_PID = OAuthConnectionImpl.class.getName(); - private static final int MAX_RETRY = 10; private static SupportBundle supportBundle; private static final String OIDC_AUTHENTICATION_HANDLER_PID = @@ -220,20 +224,20 @@ class AuthorizationCodeFlowIT { // kick off oidc auth // Retry the request a few times to ensure that the osgi configuration have been applied - SlingHttpResponse entryPointResponse = null; - Header locationHeader = null; - for (int count = 0; count < MAX_RETRY; count++) { - - entryPointResponse = sling.doGet( - "/system/sling/oauth/entry-point", List.of(new BasicNameValuePair("c", oidcConnectionName)), 302); - locationHeader = entryPointResponse.getFirstHeader("location"); - if (locationHeader.getValue().startsWith("http://localhost:" + keycloakPort)) { - // If the location header starts with the keycloak port, we can break out of the loop - break; - } - // Otherwise, we wait for a while and retry - Thread.sleep(100); - } + SlingHttpResponse entryPointResponse = await("OIDC entry-point redirect") + .atMost(DEFAULT_AWAIT_DURATION) + .pollInterval(DEFAULT_AWAIT_INTERVAL) + .until( + () -> sling.doGet( + "/system/sling/oauth/entry-point", + List.of(new BasicNameValuePair("c", oidcConnectionName)), + 302), + response -> { + Header latestLocation = response.getFirstHeader("location"); + return latestLocation != null + && latestLocation.getValue().startsWith("http://localhost:" + keycloakPort); + }); + Header locationHeader = entryPointResponse.getFirstHeader("location"); assertThat(locationHeader.getElements()) .as("Location header value from entry-point request") @@ -483,20 +487,17 @@ class AuthorizationCodeFlowIT { // request Header userAgentHeader = new BasicHeader("User-Agent", "Mozilla/5.0"); - SlingHttpResponse entryPointResponse = null; - Header locationHeader = null; // Retry the request a few times to ensure that the osgi configuration have been applied - for (int count = 0; count < MAX_RETRY; count++) { - - entryPointResponse = slingUser.doGet(TEST_PATH + ".json", null, List.of(userAgentHeader), 302); - locationHeader = entryPointResponse.getFirstHeader("location"); - if (locationHeader.getValue().startsWith("http://localhost:" + keycloakPort)) { - // If the location header starts with the keycloak port, we can break out of the loop - break; - } - // Otherwise, we wait for a while and retry - Thread.sleep(100); - } + SlingHttpResponse entryPointResponse = await("OIDC handler redirect") + .atMost(DEFAULT_AWAIT_DURATION) + .pollInterval(DEFAULT_AWAIT_INTERVAL) + .until(() -> slingUser.doGet(TEST_PATH + ".json", null, List.of(userAgentHeader), 302), response -> { + Header latestLocation = response.getFirstHeader("location"); + return latestLocation != null + && latestLocation.getValue().startsWith("http://localhost:" + keycloakPort); + }); + + Header locationHeader = entryPointResponse.getFirstHeader("location"); assertThat(locationHeader.getElements()) .as("Location header value from entry-point request") .singleElement()
