From 9b6cb38f8118865867481b8faede7fcaa7f36561 Mon Sep 17 00:00:00 2001 From: Min Kim <291271447@qq.com> Date: Fri, 15 Jan 2021 02:02:06 +0800 Subject: [PATCH] shorten IT: wait conditions parallelly (#695) --- .../watcher/ActuatorRefreshIT.java | 8 ++++---- .../watcher/ActuatorRefreshKafkaIT.java | 17 ++++++++-------- .../watcher/ActuatorRefreshRabbitMQIT.java | 12 +++++------ .../integration/tests/commons/K8SUtils.java | 20 ++++++++++++++----- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java index 2db973b6..e451b5cc 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java @@ -103,15 +103,12 @@ public class ActuatorRefreshIT { this.k8SUtils = new K8SUtils(api, appsApi); deployWiremock(); + deployConfigWatcher(); // Check to make sure the wiremock deployment is ready k8SUtils.waitForDeployment(CONFIG_WATCHER_WIREMOCK_DEPLOYMENT_NAME, NAMESPACE); - // Check to see if endpoint is ready k8SUtils.waitForEndpointReady(CONFIG_WATCHER_WIREMOCK_APP_NAME, NAMESPACE); - - deployConfigWatcher(); - // Check to make sure the controller deployment is ready k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); } @@ -152,6 +149,9 @@ public class ActuatorRefreshIT { api.deleteNamespacedConfigMap(SPRING_CLOUD_K8S_CONFIG_WATCHER_APP_NAME, NAMESPACE, null, null, null, null, null, null); api.deleteNamespacedConfigMap(CONFIG_WATCHER_WIREMOCK_APP_NAME, NAMESPACE, null, null, null, null, null, null); + // Check to make sure the controller deployment is deleted + k8SUtils.waitForDeploymentToBeDeleted(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); + k8SUtils.waitForDeploymentToBeDeleted(CONFIG_WATCHER_WIREMOCK_DEPLOYMENT_NAME, NAMESPACE); } private void deployConfigWatcher() throws Exception { diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshKafkaIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshKafkaIT.java index 27fe572d..375aaaca 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshKafkaIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshKafkaIT.java @@ -111,20 +111,14 @@ public class ActuatorRefreshKafkaIT { this.k8SUtils = new K8SUtils(api, appsApi); deployZookeeper(); - - k8SUtils.waitForDeployment(ZOOKEEPER_DEPLOYMENT, NAMESPACE); - deployKafka(); - - k8SUtils.waitForDeployment(KAFKA_BROKER, NAMESPACE); - deployTestApp(); - - k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); - deployConfigWatcher(); // Check to make sure the controller deployment is ready + k8SUtils.waitForDeployment(ZOOKEEPER_DEPLOYMENT, NAMESPACE); + k8SUtils.waitForDeployment(KAFKA_BROKER, NAMESPACE); + k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); } @@ -168,6 +162,11 @@ public class ActuatorRefreshKafkaIT { null); api.deleteNamespacedConfigMap(CONFIG_WATCHER_IT_IMAGE, NAMESPACE, null, null, null, null, null, null); + // Check to make sure the controller deployment is deleted + k8SUtils.waitForDeploymentToBeDeleted(KAFKA_BROKER, NAMESPACE); + k8SUtils.waitForDeploymentToBeDeleted(ZOOKEEPER_DEPLOYMENT, NAMESPACE); + k8SUtils.waitForDeploymentToBeDeleted(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); + k8SUtils.waitForDeploymentToBeDeleted(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); } private void deployTestApp() throws Exception { diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshRabbitMQIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshRabbitMQIT.java index 57829ad7..442d0704 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshRabbitMQIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-configuration-watcher-it/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshRabbitMQIT.java @@ -83,16 +83,12 @@ public class ActuatorRefreshRabbitMQIT { this.k8SUtils = new K8SUtils(api, appsApi); deployRabbitMQ(); - - k8SUtils.waitForReplicationController(RABBIT_MQ_CONTROLLER_NAME, NAMESPACE); - deployTestApp(); - - k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); - deployConfigWatcher(); // Check to make sure the controller deployment is ready + k8SUtils.waitForReplicationController(RABBIT_MQ_CONTROLLER_NAME, NAMESPACE); + k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); k8SUtils.waitForDeployment(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); } @@ -144,6 +140,10 @@ public class ActuatorRefreshRabbitMQIT { null); api.deleteNamespacedConfigMap(CONFIG_WATCHER_IT_IMAGE, NAMESPACE, null, null, null, null, null, null); + // Check to make sure the controller deployment is deleted + k8SUtils.waitForDeploymentToBeDeleted(SPRING_CLOUD_K8S_CONFIG_WATCHER_DEPLOYMENT_NAME, NAMESPACE); + k8SUtils.waitForDeploymentToBeDeleted(SPRING_CLOUD_K8S_CONFIG_WATCHER_IT_DEPLOYMENT_NAME, NAMESPACE); + } private void deployTestApp() throws Exception { diff --git a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/K8SUtils.java b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/K8SUtils.java index 675b1da9..3530d681 100644 --- a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/K8SUtils.java +++ b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/K8SUtils.java @@ -20,6 +20,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; +import java.net.HttpURLConnection; import java.net.URL; import java.time.Duration; import java.util.Collection; @@ -172,11 +173,20 @@ public class K8SUtils { public void waitForDeploymentToBeDeleted(String deploymentName, String namespace) { await().timeout( - Duration.ofSeconds(90)).until( - () -> appsApi - .listNamespacedDeployment(namespace, null, null, null, - "metadata.name=" + deploymentName, null, null, null, null, null) - .getItems().isEmpty()); + Duration.ofSeconds(90)).until( + () -> { + try { + appsApi + .readNamespacedDeployment(deploymentName, namespace, null, null, null); + return false; + } + catch (ApiException e) { + if (e.getCode() == HttpURLConnection.HTTP_NOT_FOUND) { + return true; + } + throw new RuntimeException(e); + } + }); } public boolean isDeployentReady(String deploymentName, String namespace) throws ApiException {