Replace calls to verifyComplete() to avoid indefinite blocking
See gh-35915
This commit is contained in:
committed by
Andy Wilkinson
parent
cee73cebd4
commit
f9da30faf1
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.actuate.cassandra;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@@ -61,7 +62,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -71,7 +72,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -81,7 +82,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -91,7 +92,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -101,7 +102,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -111,7 +112,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -121,7 +122,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -139,7 +140,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(h.getDetails()).containsOnlyKeys("version");
|
||||
assertThat(h.getDetails().get("version")).isEqualTo(Version.V4_0_0);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -150,7 +151,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
StepVerifier.create(health).consumeNextWith((h) -> {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(h.getDetails().get("version")).isNull();
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -165,7 +166,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
assertThat(h.getDetails()).containsOnlyKeys("error");
|
||||
assertThat(h.getDetails().get("error"))
|
||||
.isEqualTo(DriverTimeoutException.class.getName() + ": Test Exception");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
private CqlSession mockCqlSessionWithNodeState(NodeState... nodeStates) {
|
||||
|
||||
@@ -37,7 +37,7 @@ class HealthIndicatorReactiveAdapterTests {
|
||||
HealthIndicatorReactiveAdapter adapter = new HealthIndicatorReactiveAdapter(delegate);
|
||||
Health status = Health.up().build();
|
||||
given(delegate.health()).willReturn(status);
|
||||
StepVerifier.create(adapter.health()).expectNext(status).verifyComplete();
|
||||
StepVerifier.create(adapter.health()).expectNext(status).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -55,7 +55,7 @@ class HealthIndicatorReactiveAdapterTests {
|
||||
.status(Thread.currentThread().getName().equals(currentThread) ? Status.DOWN : Status.UP)
|
||||
.build();
|
||||
HealthIndicatorReactiveAdapter adapter = new HealthIndicatorReactiveAdapter(delegate);
|
||||
StepVerifier.create(adapter.health()).expectNext(Health.status(Status.UP).build()).verifyComplete();
|
||||
StepVerifier.create(adapter.health()).expectNext(Health.status(Status.UP).build()).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ import org.springframework.boot.actuate.health.Health.Builder;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
import org.springframework.boot.test.system.OutputCaptureExtension;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
@@ -40,7 +42,7 @@ class ReactiveHealthIndicatorImplementationTests {
|
||||
void healthUp(CapturedOutput output) {
|
||||
StepVerifier.create(new SimpleReactiveHealthIndicator().health())
|
||||
.consumeNextWith((health) -> assertThat(health).isEqualTo(Health.up().build()))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
assertThat(output).doesNotContain("Health check failed for simple");
|
||||
}
|
||||
|
||||
@@ -49,7 +51,7 @@ class ReactiveHealthIndicatorImplementationTests {
|
||||
StepVerifier.create(new CustomErrorMessageReactiveHealthIndicator().health())
|
||||
.consumeNextWith(
|
||||
(health) -> assertThat(health).isEqualTo(Health.down(new UnsupportedOperationException()).build()))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
assertThat(output).contains("Health check failed for custom");
|
||||
}
|
||||
|
||||
@@ -57,7 +59,7 @@ class ReactiveHealthIndicatorImplementationTests {
|
||||
void healthDownWithCustomErrorMessageFunction(CapturedOutput output) {
|
||||
StepVerifier.create(new CustomErrorMessageFunctionReactiveHealthIndicator().health())
|
||||
.consumeNextWith((health) -> assertThat(health).isEqualTo(Health.down(new RuntimeException()).build()))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
assertThat(output).contains("Health check failed with RuntimeException");
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.actuate.metrics.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -59,7 +60,7 @@ class ConnectionPoolMetricsTests {
|
||||
@AfterEach
|
||||
void close() {
|
||||
if (this.connectionFactory != null) {
|
||||
StepVerifier.create(this.connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(this.connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,8 +73,8 @@ class ConnectionPoolMetricsTests {
|
||||
Tags.of(testTag, regionTag));
|
||||
metrics.bindTo(registry);
|
||||
// acquire two connections
|
||||
connectionPool.create().as(StepVerifier::create).expectNextCount(1).verifyComplete();
|
||||
connectionPool.create().as(StepVerifier::create).expectNextCount(1).verifyComplete();
|
||||
connectionPool.create().as(StepVerifier::create).expectNextCount(1).expectComplete().verify(Duration.ofSeconds(5));
|
||||
connectionPool.create().as(StepVerifier::create).expectNextCount(1).expectComplete().verify(Duration.ofSeconds(5));
|
||||
assertGauge(registry, "r2dbc.pool.acquired", 2);
|
||||
assertGauge(registry, "r2dbc.pool.allocated", 3);
|
||||
assertGauge(registry, "r2dbc.pool.idle", 1);
|
||||
|
||||
@@ -26,6 +26,8 @@ import org.springframework.boot.actuate.health.Health;
|
||||
import org.springframework.boot.actuate.health.Status;
|
||||
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -50,7 +52,7 @@ class MongoReactiveHealthIndicatorTests {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(h.getDetails()).containsOnlyKeys("version");
|
||||
assertThat(h.getDetails().get("version")).isEqualTo("2.6.4");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -65,7 +67,7 @@ class MongoReactiveHealthIndicatorTests {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.DOWN);
|
||||
assertThat(h.getDetails()).containsOnlyKeys("error");
|
||||
assertThat(h.getDetails().get("error")).isEqualTo(MongoException.class.getName() + ": Connection failed");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.actuate.neo4j;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -58,7 +59,7 @@ class Neo4jReactiveHealthIndicatorTests {
|
||||
assertThat(health.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(health.getDetails()).containsEntry("server", "4711@My Home");
|
||||
assertThat(health.getDetails()).containsEntry("edition", "ultimate collectors edition");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -80,7 +81,7 @@ class Neo4jReactiveHealthIndicatorTests {
|
||||
assertThat(health.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(health.getDetails()).containsEntry("server", "4711@My Home");
|
||||
assertThat(health.getDetails()).containsEntry("edition", "some edition");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
then(session).should(times(2)).close();
|
||||
}
|
||||
|
||||
@@ -92,7 +93,7 @@ class Neo4jReactiveHealthIndicatorTests {
|
||||
healthIndicator.health().as(StepVerifier::create).consumeNextWith((health) -> {
|
||||
assertThat(health.getStatus()).isEqualTo(Status.DOWN);
|
||||
assertThat(health.getDetails()).containsKeys("error");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
private RxResult mockStatementResult(ResultSummary resultSummary, String version, String edition) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.actuate.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -56,10 +57,10 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
assertThat(actual.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(actual.getDetails()).containsOnly(entry("database", "H2"),
|
||||
entry("validationQuery", "validate(REMOTE)"));
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +75,7 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
assertThat(actual.getStatus()).isEqualTo(Status.DOWN);
|
||||
assertThat(actual.getDetails()).containsOnly(entry("database", "mock"),
|
||||
entry("validationQuery", "validate(REMOTE)"), entry("error", "java.lang.RuntimeException: test"));
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -90,7 +91,7 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
assertThat(actual.getStatus()).isEqualTo(Status.DOWN);
|
||||
assertThat(actual.getDetails()).containsOnly(entry("database", "mock"),
|
||||
entry("validationQuery", "validate(REMOTE)"));
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -104,17 +105,17 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
.flatMap(Result::getRowsUpdated)
|
||||
.thenMany(it.close()))
|
||||
.as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
ReactiveHealthIndicator healthIndicator = new ConnectionFactoryHealthIndicator(connectionFactory,
|
||||
customValidationQuery);
|
||||
healthIndicator.health().as(StepVerifier::create).assertNext((actual) -> {
|
||||
assertThat(actual.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(actual.getDetails()).containsOnly(entry("database", "H2"), entry("result", 0L),
|
||||
entry("validationQuery", customValidationQuery));
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -131,10 +132,10 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
assertThat(actual.getDetails()).contains(entry("database", "H2"),
|
||||
entry("validationQuery", invalidValidationQuery));
|
||||
assertThat(actual.getDetails()).containsOnlyKeys("database", "error", "validationQuery");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.actuate.redis;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Properties;
|
||||
|
||||
import io.lettuce.core.RedisConnectionException;
|
||||
@@ -62,7 +63,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.UP);
|
||||
assertThat(h.getDetails()).containsOnlyKeys("version");
|
||||
assertThat(h.getDetails().get("version")).isEqualTo("2.8.9");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
then(redisConnection).should().closeLater();
|
||||
}
|
||||
|
||||
@@ -76,7 +77,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
assertThat(h.getDetails().get("cluster_size")).isEqualTo(4L);
|
||||
assertThat(h.getDetails().get("slots_up")).isEqualTo(4L);
|
||||
assertThat(h.getDetails().get("slots_fail")).isEqualTo(0L);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
then(redisConnectionFactory.getReactiveConnection()).should().closeLater();
|
||||
}
|
||||
|
||||
@@ -90,7 +91,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
assertThat(h.getDetails().get("cluster_size")).isEqualTo(4L);
|
||||
assertThat(h.getDetails().get("slots_up")).isEqualTo(4L);
|
||||
assertThat(h.getDetails().get("slots_fail")).isEqualTo(0L);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -102,7 +103,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
assertThat(h.getStatus()).isEqualTo(Status.DOWN);
|
||||
assertThat(h.getDetails().get("slots_up")).isEqualTo(3L);
|
||||
assertThat(h.getDetails().get("slots_fail")).isEqualTo(1L);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -115,7 +116,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
then(redisConnection).should().closeLater();
|
||||
}
|
||||
|
||||
@@ -128,7 +129,7 @@ class RedisReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
private RedisReactiveHealthIndicator createHealthIndicator(ReactiveRedisConnection redisConnection,
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.boot.actuate.trace.http.reactive;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.time.Duration;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -105,7 +106,7 @@ class HttpTraceWebFilterTests {
|
||||
private void executeFilter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||
StepVerifier
|
||||
.create(this.filter.filter(exchange, chain).then(Mono.defer(() -> exchange.getResponse().setComplete())))
|
||||
.verifyComplete();
|
||||
.expectComplete().verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user