From c0bb6ff66764800e3d53fa1459eafa8ff3bbfa98 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 26 Oct 2020 14:41:58 +0000 Subject: [PATCH] Await registration of http.server.requests meter Previously, the test would make an HTTP request and, as soon as the response was received, it would check the presence and value of the http.server.requests meter. This create a race condition between the meter being registered once the response had been flushed and the meter's presence being checked. If the check won the race, the test would fail. This commit updates the test to wait for up to 5 seconds for the meter to be present and have a count of 1, matching the single request that has been made. Fixes gh-23863 --- .../spring-boot-actuator-autoconfigure/build.gradle | 1 + .../metrics/test/MetricsIntegrationTests.java | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle index 00d81404a1..62f2b090a6 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle @@ -121,6 +121,7 @@ dependencies { testImplementation("org.apache.logging.log4j:log4j-to-slf4j") testImplementation("org.aspectj:aspectjrt") testImplementation("org.assertj:assertj-core") + testImplementation("org.awaitility:awaitility") testImplementation("org.eclipse.jetty:jetty-webapp") testImplementation("org.glassfish.jersey.ext:jersey-spring5") testImplementation("org.glassfish.jersey.media:jersey-media-json-jackson") diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java index 921ee3215c..842c7a0f99 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.test; +import java.time.Duration; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -71,6 +72,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.waitAtMost; import static org.springframework.test.web.client.ExpectedCount.once; import static org.springframework.test.web.client.match.MockRestRequestMatchers.method; import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; @@ -110,7 +112,9 @@ class MetricsIntegrationTests { @Test void requestMappingIsInstrumented() { this.loopback.getForObject("/api/people", Set.class); - assertThat(this.registry.get("http.server.requests").timer().count()).isEqualTo(1); + waitAtMost(Duration.ofSeconds(5)).untilAsserted( + () -> assertThat(this.registry.get("http.server.requests").timer().count()).isEqualTo(1)); + } @Test