From da58b0904ec69267ecfae6ac933ffbff29efb514 Mon Sep 17 00:00:00 2001 From: onobc Date: Tue, 15 Mar 2022 10:11:01 -0500 Subject: [PATCH] Use Awaitility when waiting on local port --- .../spring-cloud-function-grpc/pom.xml | 5 +++++ .../function/grpc/GrpcInteractionTests.java | 18 ++++++++++-------- spring-cloud-function-web/pom.xml | 11 ++++++++--- .../FunctionEndpointInitializerTests.java | 19 +++++++++++-------- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml index bec41efae..760e8ee29 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml @@ -55,6 +55,11 @@ spring-boot-starter-test test + + org.awaitility + awaitility + test + diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/test/java/org/springframework/cloud/function/grpc/GrpcInteractionTests.java b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/test/java/org/springframework/cloud/function/grpc/GrpcInteractionTests.java index b97a5e529..ef0d66c7b 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/test/java/org/springframework/cloud/function/grpc/GrpcInteractionTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/test/java/org/springframework/cloud/function/grpc/GrpcInteractionTests.java @@ -41,6 +41,7 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeTypeUtils; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.fail; /** @@ -306,14 +307,15 @@ public class GrpcInteractionTests { } private int patientlyGetPort(ConfigurableApplicationContext context) throws InterruptedException { - Thread.sleep(500); - String port = context.getEnvironment().getProperty("local.grpc.server.port"); - if (port == null) { - Thread.sleep(500); - port = context.getEnvironment().getProperty("local.grpc.server.port"); - assertThat(port).as("Unable to get 'local.grpc.server.port' - server may not have started up").isNotNull(); - } - return Integer.valueOf(port); + await() + .pollDelay(Duration.ofMillis(500)) + .pollInterval(Duration.ofMillis(500)) + .atMost(Duration.ofSeconds(3)) + .untilAsserted(() -> { + String port = context.getEnvironment().getProperty("local.grpc.server.port"); + assertThat(port).as("Unable to get 'local.grpc.server.port' - server may not have started up").isNotEmpty(); + }); + return Integer.valueOf(context.getEnvironment().getProperty("local.grpc.server.port")); } @EnableAutoConfiguration diff --git a/spring-cloud-function-web/pom.xml b/spring-cloud-function-web/pom.xml index d22873fde..8d2866128 100644 --- a/spring-cloud-function-web/pom.xml +++ b/spring-cloud-function-web/pom.xml @@ -40,6 +40,11 @@ org.springframework.cloud spring-cloud-function-context + + org.springframework.boot + spring-boot-configuration-processor + true + commons-logging commons-logging @@ -57,9 +62,9 @@ test - org.springframework.boot - spring-boot-configuration-processor - true + org.awaitility + awaitility + test diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializerTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializerTests.java index c140de244..ea24746e1 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializerTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializerTests.java @@ -17,6 +17,7 @@ package org.springframework.cloud.function.web.function; import java.net.URI; +import java.time.Duration; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -37,6 +38,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; /** * @@ -106,14 +108,15 @@ public class FunctionEndpointInitializerTests { private int startServerAndWaitForPort(Class primaryAppConfig) throws InterruptedException { ConfigurableApplicationContext context = FunctionalSpringApplication.run(primaryAppConfig, "--server.port=0"); - Thread.sleep(500); - String port = context.getEnvironment().getProperty("local.server.port"); - if (port == null) { - Thread.sleep(500); - port = context.getEnvironment().getProperty("local.server.port"); - assertThat(port).as("Unable to get 'local.server.port' - server may not have started up").isNotNull(); - } - return Integer.valueOf(port); + await() + .pollDelay(Duration.ofMillis(500)) + .pollInterval(Duration.ofMillis(500)) + .atMost(Duration.ofSeconds(3)) + .untilAsserted(() -> { + String port = context.getEnvironment().getProperty("local.server.port"); + assertThat(port).as("Unable to get 'local.server.port' - server may not have started up").isNotEmpty(); + }); + return Integer.valueOf(context.getEnvironment().getProperty("local.server.port")); } @SpringBootConfiguration