diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailable.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailable.java index 8f7bfd65b80..d148b50047c 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailable.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailable.java @@ -16,38 +16,25 @@ package org.springframework.boot.testsupport.testcontainers; -import org.junit.jupiter.api.extension.ConditionEvaluationResult; -import org.junit.jupiter.api.extension.ExecutionCondition; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.testcontainers.DockerClientFactory; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.extension.ExtendWith; /** - * An {@link ExecutionCondition} that disables execution if Docker is unavailable. + * Disables test execution if Docker is unavailable. * * @author Andy Wilkinson + * @author Phillip Webb * @since 2.3.0 */ -public class DisabledIfDockerUnavailable implements ExecutionCondition { - - @Override - public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { - System.out.println("Checking Docker's availability"); - if (isDockerAvailable()) { - System.out.println("Docker available"); - return ConditionEvaluationResult.enabled("Docker is available"); - } - System.out.println("Docker unavailable"); - return ConditionEvaluationResult.disabled("Docker is not available"); - } - - private boolean isDockerAvailable() { - try { - DockerClientFactory.instance().client(); - return true; - } - catch (Throwable ex) { - return false; - } - } +@Target({ ElementType.TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@ExtendWith(DisabledIfDockerUnavailableCondition.class) +public @interface DisabledIfDockerUnavailable { } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailableCondition.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailableCondition.java new file mode 100644 index 00000000000..4b6b3325380 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/DisabledIfDockerUnavailableCondition.java @@ -0,0 +1,58 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.testsupport.testcontainers; + +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.testcontainers.DockerClientFactory; + +/** + * An {@link ExecutionCondition} that disables execution if Docker is unavailable. + * + * @author Andy Wilkinson + * @author Phillip Webb + */ +class DisabledIfDockerUnavailableCondition implements ExecutionCondition { + + private static final String SILENCE_PROPERTY = "visibleassertions.silence"; + + private static final ConditionEvaluationResult ENABLED = ConditionEvaluationResult.enabled("Docker available"); + + private static final ConditionEvaluationResult DISABLED = ConditionEvaluationResult.disabled("Docker unavailable"); + + @Override + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { + String originalSilenceValue = System.getProperty(SILENCE_PROPERTY); + try { + DockerClientFactory.instance().client(); + return ENABLED; + } + catch (Throwable ex) { + return DISABLED; + } + finally { + if (originalSilenceValue != null) { + System.setProperty(SILENCE_PROPERTY, originalSilenceValue); + } + else { + System.clearProperty(SILENCE_PROPERTY); + } + } + } + +} diff --git a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java index 1a1640bab47..2c5545b8960 100644 --- a/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java +++ b/spring-boot-tests/spring-boot-deployment-tests/src/intTest/java/sample/DeploymentIntegrationTests.java @@ -26,7 +26,6 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.StandardHttpRequestRetryHandler; import org.awaitility.Awaitility; import org.awaitility.core.ConditionTimeoutException; -import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.GenericContainer; @@ -44,7 +43,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** * Deployment integration tests. */ -@ExtendWith(DisabledIfDockerUnavailable.class) +@DisabledIfDockerUnavailable class DeploymentIntegrationTests { @ParameterizedTest @@ -116,6 +115,7 @@ class DeploymentIntegrationTests { } } + @Override public String toString() { return this.baseImage; } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java index f3335cc2a3b..52699693e1f 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/intTest/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIntegrationTests.java @@ -24,7 +24,6 @@ import java.util.regex.Pattern; import org.assertj.core.api.Condition; import org.junit.jupiter.api.Assumptions; -import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.GenericContainer; @@ -44,7 +43,7 @@ import static org.hamcrest.Matchers.containsString; * @author Andy Wilkinson * @author Ali Shahbour */ -@ExtendWith(DisabledIfDockerUnavailable.class) +@DisabledIfDockerUnavailable class SysVinitLaunchScriptIntegrationTests { private static final char ESC = 27;