mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-08-29 03:06:45 +08:00
Merge pull request #35915 from ThomazPassarelli
* gh-35915: Polish "Replace calls to verifyComplete() to avoid indefinite blocking" Replace calls to verifyComplete() to avoid indefinite blocking Closes gh-35915
This commit is contained in:
commit
7b0aa7dcbb
@ -74,7 +74,9 @@ public abstract class ArchitectureCheck extends DefaultTask {
|
||||
.importPaths(this.classes.getFiles().stream().map(File::toPath).collect(Collectors.toList()));
|
||||
List<EvaluationResult> violations = Stream.of(allPackagesShouldBeFreeOfTangles(),
|
||||
allBeanPostProcessorBeanMethodsShouldBeStaticAndHaveParametersThatWillNotCausePrematureInitialization(),
|
||||
allBeanFactoryPostProcessorBeanMethodsShouldBeStaticAndHaveNoParameters())
|
||||
allBeanFactoryPostProcessorBeanMethodsShouldBeStaticAndHaveNoParameters(),
|
||||
noClassesShouldCallStepVerifierStepVerifyComplete(),
|
||||
noClassesShouldConfigureDefaultStepVerifierTimeout())
|
||||
.map((rule) -> rule.evaluate(javaClasses))
|
||||
.filter(EvaluationResult::hasViolation)
|
||||
.collect(Collectors.toList());
|
||||
@ -163,6 +165,20 @@ public abstract class ArchitectureCheck extends DefaultTask {
|
||||
};
|
||||
}
|
||||
|
||||
private ArchRule noClassesShouldCallStepVerifierStepVerifyComplete() {
|
||||
return ArchRuleDefinition.noClasses()
|
||||
.should()
|
||||
.callMethod("reactor.test.StepVerifier$Step", "verifyComplete")
|
||||
.because("it can block indefinitely and expectComplete().verify(Duration) should be used instead");
|
||||
}
|
||||
|
||||
private ArchRule noClassesShouldConfigureDefaultStepVerifierTimeout() {
|
||||
return ArchRuleDefinition.noClasses()
|
||||
.should()
|
||||
.callMethod("reactor.test.StepVerifier", "setDefaultTimeout", "java.time.Duration")
|
||||
.because("expectComplete().verify(Duration) should be used instead");
|
||||
}
|
||||
|
||||
public void setClasses(FileCollection classes) {
|
||||
this.classes = classes;
|
||||
}
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@ -66,7 +68,8 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
.build());
|
||||
StepVerifier.create(this.interceptor.preHandle(request, "/a"))
|
||||
.consumeNextWith((response) -> assertThat(response.getStatus()).isEqualTo(HttpStatus.OK))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -75,7 +78,8 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
StepVerifier.create(this.interceptor.preHandle(request, "/a"))
|
||||
.consumeNextWith(
|
||||
(response) -> assertThat(response.getStatus()).isEqualTo(Reason.MISSING_AUTHORIZATION.getStatus()))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -85,7 +89,8 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
StepVerifier.create(this.interceptor.preHandle(request, "/a"))
|
||||
.consumeNextWith(
|
||||
(response) -> assertThat(response.getStatus()).isEqualTo(Reason.MISSING_AUTHORIZATION.getStatus()))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -121,7 +126,8 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
.build());
|
||||
StepVerifier.create(this.interceptor.preHandle(request, "/a"))
|
||||
.consumeNextWith((response) -> assertThat(response.getStatus()).isEqualTo(Reason.ACCESS_DENIED.getStatus()))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -135,7 +141,7 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
StepVerifier.create(this.interceptor.preHandle(exchange, "/a")).consumeNextWith((response) -> {
|
||||
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK);
|
||||
assertThat((AccessLevel) exchange.getAttribute("cloudFoundryAccessLevel")).isEqualTo(AccessLevel.FULL);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -151,7 +157,7 @@ class ReactiveCloudFoundrySecurityInterceptorTests {
|
||||
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK);
|
||||
assertThat((AccessLevel) exchange.getAttribute("cloudFoundryAccessLevel"))
|
||||
.isEqualTo(AccessLevel.RESTRICTED);
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
private String mockAccessToken() {
|
||||
|
@ -25,6 +25,7 @@ import java.security.PrivateKey;
|
||||
import java.security.Signature;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
@ -121,7 +122,8 @@ class ReactiveTokenValidatorTests {
|
||||
String claims = "{\"exp\": 2147483647, \"iss\": \"http://localhost:8080/uaa/oauth/token\", \"scope\": [\"actuator.read\"]}";
|
||||
StepVerifier
|
||||
.create(this.tokenValidator.validate(new Token(getSignedToken(header.getBytes(), claims.getBytes()))))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
assertThat(this.tokenValidator).hasFieldOrPropertyWithValue("cachedTokenKeys", VALID_KEYS);
|
||||
fetchTokenKeys.assertWasSubscribed();
|
||||
}
|
||||
@ -135,7 +137,8 @@ class ReactiveTokenValidatorTests {
|
||||
String claims = "{\"exp\": 2147483647, \"iss\": \"http://localhost:8080/uaa/oauth/token\", \"scope\": [\"actuator.read\"]}";
|
||||
StepVerifier
|
||||
.create(this.tokenValidator.validate(new Token(getSignedToken(header.getBytes(), claims.getBytes()))))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
assertThat(this.tokenValidator).hasFieldOrPropertyWithValue("cachedTokenKeys", VALID_KEYS);
|
||||
fetchTokenKeys.assertWasSubscribed();
|
||||
}
|
||||
@ -167,7 +170,8 @@ class ReactiveTokenValidatorTests {
|
||||
String claims = "{\"exp\": 2147483647, \"iss\": \"http://localhost:8080/uaa/oauth/token\", \"scope\": [\"actuator.read\"]}";
|
||||
StepVerifier
|
||||
.create(this.tokenValidator.validate(new Token(getSignedToken(header.getBytes(), claims.getBytes()))))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
fetchTokenKeys.assertWasNotSubscribed();
|
||||
}
|
||||
|
||||
|
@ -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,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -71,7 +73,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -81,7 +84,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -91,7 +95,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -101,7 +106,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -111,7 +117,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -121,7 +128,8 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.UP))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -139,7 +147,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(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -150,7 +158,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(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -165,7 +173,7 @@ class CassandraDriverReactiveHealthIndicatorTests {
|
||||
assertThat(h.getDetails()).containsOnlyKeys("error");
|
||||
assertThat(h.getDetails().get("error"))
|
||||
.isEqualTo(DriverTimeoutException.class.getName() + ": Test Exception");
|
||||
}).verifyComplete();
|
||||
}).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
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(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -55,7 +55,10 @@ 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(30));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.actuate.health;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import reactor.core.publisher.Mono;
|
||||
@ -40,7 +42,8 @@ class ReactiveHealthIndicatorImplementationTests {
|
||||
void healthUp(CapturedOutput output) {
|
||||
StepVerifier.create(new SimpleReactiveHealthIndicator().health())
|
||||
.consumeNextWith((health) -> assertThat(health).isEqualTo(Health.up().build()))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
assertThat(output).doesNotContain("Health check failed for simple");
|
||||
}
|
||||
|
||||
@ -49,7 +52,8 @@ class ReactiveHealthIndicatorImplementationTests {
|
||||
StepVerifier.create(new CustomErrorMessageReactiveHealthIndicator().health())
|
||||
.consumeNextWith(
|
||||
(health) -> assertThat(health).isEqualTo(Health.down(new UnsupportedOperationException()).build()))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
assertThat(output).contains("Health check failed for custom");
|
||||
}
|
||||
|
||||
@ -57,7 +61,8 @@ 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(30));
|
||||
assertThat(output).contains("Health check failed with RuntimeException");
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2021 the original author or authors.
|
||||
* Copyright 2012-2023 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.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(30));
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,8 +73,16 @@ 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(30));
|
||||
connectionPool.create()
|
||||
.as(StepVerifier::create)
|
||||
.expectNextCount(1)
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
assertGauge(registry, "r2dbc.pool.acquired", 2);
|
||||
assertGauge(registry, "r2dbc.pool.allocated", 3);
|
||||
assertGauge(registry, "r2dbc.pool.idle", 1);
|
||||
|
@ -162,7 +162,7 @@ class MetricsWebFilterTests {
|
||||
exchange.getResponse().setRawStatusCode(500);
|
||||
return exchange.getResponse().setComplete();
|
||||
});
|
||||
StepVerifier.create(processing).expectComplete().verify(Duration.ofSeconds(5));
|
||||
StepVerifier.create(processing).expectComplete().verify(Duration.ofSeconds(30));
|
||||
assertMetricsContainsTag("uri", "/projects/{project}");
|
||||
assertMetricsContainsTag("status", "500");
|
||||
assertMetricsContainsTag("outcome", "UNKNOWN");
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.actuate.mongo;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import com.mongodb.MongoException;
|
||||
import org.bson.Document;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -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(30));
|
||||
}
|
||||
|
||||
@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(30));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2022 the original author or authors.
|
||||
* Copyright 2012-2023 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.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(30));
|
||||
}
|
||||
|
||||
@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(30));
|
||||
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(30));
|
||||
}
|
||||
|
||||
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(30));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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(30));
|
||||
}
|
||||
|
||||
@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(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -104,17 +105,18 @@ class ConnectionFactoryHealthIndicatorTests {
|
||||
.flatMap(Result::getRowsUpdated)
|
||||
.thenMany(it.close()))
|
||||
.as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
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(30));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
}
|
||||
@ -131,10 +133,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(30));
|
||||
}
|
||||
finally {
|
||||
StepVerifier.create(connectionFactory.close()).verifyComplete();
|
||||
StepVerifier.create(connectionFactory.close()).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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(30));
|
||||
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(30));
|
||||
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(30));
|
||||
}
|
||||
|
||||
@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(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -115,7 +116,8 @@ class RedisReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
then(redisConnection).should().closeLater();
|
||||
}
|
||||
|
||||
@ -128,7 +130,8 @@ class RedisReactiveHealthIndicatorTests {
|
||||
Mono<Health> health = healthIndicator.health();
|
||||
StepVerifier.create(health)
|
||||
.consumeNextWith((h) -> assertThat(h.getStatus()).isEqualTo(Status.DOWN))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
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,8 @@ 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(30));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.autoconfigure.data.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.test.StepVerifier;
|
||||
@ -80,7 +82,8 @@ class R2dbcRepositoriesAutoConfigurationTests {
|
||||
.findById(2000L)
|
||||
.as(StepVerifier::create)
|
||||
.expectNextCount(1)
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
});
|
||||
}
|
||||
|
||||
@ -103,7 +106,8 @@ class R2dbcRepositoriesAutoConfigurationTests {
|
||||
.findById(2000L)
|
||||
.as(StepVerifier::create)
|
||||
.expectNextCount(1)
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.autoconfigure.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.r2dbc.spi.Connection;
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -65,7 +67,11 @@ class R2dbcTransactionManagerAutoConfigurationTests {
|
||||
this.contextRunner.withUserConfiguration(SingleConnectionFactoryConfiguration.class, BaseConfiguration.class)
|
||||
.run((context) -> {
|
||||
TransactionalService bean = context.getBean(TransactionalService.class);
|
||||
bean.isTransactionActive().as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
bean.isTransactionActive()
|
||||
.as(StepVerifier::create)
|
||||
.expectNext(true)
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -83,8 +83,12 @@ class DataNeo4jTestReactiveIntegrationTests {
|
||||
.flatMap(this.exampleRepository::save)
|
||||
.as(StepVerifier::create)
|
||||
.expectNextCount(1)
|
||||
.verifyComplete();
|
||||
StepVerifier.create(this.neo4jTemplate.count(ExampleGraph.class)).expectNext(1L).verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
StepVerifier.create(this.neo4jTemplate.count(ExampleGraph.class))
|
||||
.expectNext(1L)
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2021 the original author or authors.
|
||||
* Copyright 2012-2023 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,8 @@
|
||||
|
||||
package org.springframework.boot.test.autoconfigure.data.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.r2dbc.spi.ConnectionFactory;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.test.StepVerifier;
|
||||
@ -46,7 +48,12 @@ class DataR2dbcTestIntegrationTests {
|
||||
|
||||
@Test
|
||||
void testDatabaseClient() {
|
||||
this.databaseClient.sql("SELECT * FROM example").fetch().all().as(StepVerifier::create).verifyComplete();
|
||||
this.databaseClient.sql("SELECT * FROM example")
|
||||
.fetch()
|
||||
.all()
|
||||
.as(StepVerifier::create)
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.boot.test.autoconfigure.data.redis;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -62,11 +63,16 @@ class DataRedisTestReactiveIntegrationTests {
|
||||
String id = UUID.randomUUID().toString();
|
||||
StepVerifier.create(this.operations.opsForValue().set(id, "Hello World"))
|
||||
.expectNext(Boolean.TRUE)
|
||||
.verifyComplete();
|
||||
StepVerifier.create(this.operations.opsForValue().get(id)).expectNext("Hello World").verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
StepVerifier.create(this.operations.opsForValue().get(id))
|
||||
.expectNext("Hello World")
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
StepVerifier.create(this.operations.execute((action) -> action.serverCommands().flushDb()))
|
||||
.expectNext("OK")
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -18,6 +18,7 @@ package org.springframework.boot.rsocket.netty;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.nio.channels.ClosedChannelException;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ -194,7 +195,7 @@ class NettyRSocketServerFactoryTests {
|
||||
private void checkEchoRequest() {
|
||||
String payload = "test payload";
|
||||
Mono<String> response = this.requester.route("test").data(payload).retrieveMono(String.class);
|
||||
StepVerifier.create(response).expectNext(payload).verifyComplete();
|
||||
StepVerifier.create(response).expectNext(payload).expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
private void testBasicSslWithKeyStore(String keyStore, String keyPassword, Transport transport) {
|
||||
|
@ -109,8 +109,7 @@ class NettyReactiveWebServerFactoryTests extends AbstractReactiveWebServerFactor
|
||||
@Test
|
||||
void whenSslIsConfiguredWithAValidAliasARequestSucceeds() {
|
||||
Mono<String> result = testSslWithAlias("test-alias");
|
||||
StepVerifier.setDefaultTimeout(Duration.ofSeconds(30));
|
||||
StepVerifier.create(result).expectNext("Hello World").verifyComplete();
|
||||
StepVerifier.create(result).expectNext("Hello World").expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -55,7 +55,8 @@ class MustacheViewTests {
|
||||
.block(Duration.ofSeconds(30));
|
||||
StepVerifier.create(exchange.getResponse().getBodyAsString())
|
||||
.assertNext((body) -> assertThat(body).isEqualToIgnoringWhitespace("Hello Spring"))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -193,8 +193,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
||||
.retrieve()
|
||||
.bodyToMono(String.class);
|
||||
|
||||
StepVerifier.setDefaultTimeout(Duration.ofSeconds(30));
|
||||
StepVerifier.create(result).expectNext("Hello World").verifyComplete();
|
||||
StepVerifier.create(result).expectNext("Hello World").expectComplete().verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package smoketest.data.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
@ -60,7 +62,8 @@ class CityRepositoryTests {
|
||||
void databaseHasBeenInitialized() {
|
||||
StepVerifier.create(this.repository.findByState("DC").filter((city) -> city.getName().equals("Washington")))
|
||||
.consumeNextWith((city) -> assertThat(city.getId()).isNotNull())
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
private static String r2dbcUrl() {
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package smoketest.data.r2dbc;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.PostgreSQLContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
@ -60,7 +62,8 @@ class CityRepositoryTests {
|
||||
void databaseHasBeenInitialized() {
|
||||
StepVerifier.create(this.repository.findByState("DC").filter((city) -> city.getName().equals("Washington")))
|
||||
.consumeNextWith((city) -> assertThat(city.getId()).isNotNull())
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
private static String r2dbcUrl() {
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
package smoketest.rsocket;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.rsocket.metadata.WellKnownMimeType;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -56,7 +58,8 @@ class SampleRSocketApplicationTests {
|
||||
Mono<Project> result = requester.route("find.project.spring-boot").retrieveMono(Project.class);
|
||||
StepVerifier.create(result)
|
||||
.assertNext((project) -> Assertions.assertThat(project.getName()).isEqualTo("spring-boot"))
|
||||
.verifyComplete();
|
||||
.expectComplete()
|
||||
.verify(Duration.ofSeconds(30));
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user