diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml
index 19d15573..beab8ce8 100644
--- a/spring-cloud-commons/pom.xml
+++ b/spring-cloud-commons/pom.xml
@@ -167,11 +167,6 @@
spring-boot-starter-test
test
-
- org.junit.vintage
- junit-vintage-engine
- test
-
org.springframework.cloud
spring-cloud-test-support
diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/ManagementServerPortUtilsTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/ManagementServerPortUtilsTests.java
index 520cb185..a7c9e2e9 100644
--- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/ManagementServerPortUtilsTests.java
+++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/ManagementServerPortUtilsTests.java
@@ -16,20 +16,17 @@
package org.springframework.cloud.client.discovery;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import static org.assertj.core.api.BDDAssertions.then;
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-boot-actuator-autoconfigure-*" })
public class ManagementServerPortUtilsTests {
diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AbstractLoadBalancerAutoConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AbstractLoadBalancerAutoConfigurationTests.java
index 1a0d21b8..a4be354d 100644
--- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AbstractLoadBalancerAutoConfigurationTests.java
+++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AbstractLoadBalancerAutoConfigurationTests.java
@@ -21,7 +21,7 @@ import java.util.Collection;
import java.util.Map;
import java.util.Random;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.WebApplicationType;
diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfigurationTests.java
index 6a92b5f1..40436e92 100644
--- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfigurationTests.java
+++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfigurationTests.java
@@ -18,10 +18,7 @@ package org.springframework.cloud.client.loadbalancer;
import java.util.List;
-import org.junit.runner.RunWith;
-
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;
@@ -30,7 +27,6 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Spencer Gibb
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-retry-*.jar", "spring-boot-starter-aop-*.jar" })
public class LoadBalancerAutoConfigurationTests extends AbstractLoadBalancerAutoConfigurationTests {
diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/serviceregistry/ServiceRegistryAutoConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/serviceregistry/ServiceRegistryAutoConfigurationTests.java
index 0cccbae5..3e919ecc 100644
--- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/serviceregistry/ServiceRegistryAutoConfigurationTests.java
+++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/serviceregistry/ServiceRegistryAutoConfigurationTests.java
@@ -16,14 +16,12 @@
package org.springframework.cloud.client.serviceregistry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
@@ -32,7 +30,6 @@ import static org.assertj.core.api.Assertions.fail;
/**
* @author Spencer Gibb
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-boot-actuator-*.jar", "spring-boot-starter-actuator-*.jar" })
public class ServiceRegistryAutoConfigurationTests {
diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml
index d072cc28..1c6ad521 100644
--- a/spring-cloud-context/pom.xml
+++ b/spring-cloud-context/pom.xml
@@ -72,11 +72,6 @@
spring-boot-starter-test
test
-
- org.junit.vintage
- junit-vintage-engine
- test
-
org.springframework.cloud
spring-cloud-test-support
diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationClassPathTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationClassPathTests.java
index 0ae9196c..86e16a76 100644
--- a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationClassPathTests.java
+++ b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationClassPathTests.java
@@ -16,15 +16,13 @@
package org.springframework.cloud.autoconfigure;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.endpoint.event.RefreshEventListener;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
@@ -33,7 +31,6 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Spencer Gibb
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-boot-actuator-*.jar", "spring-boot-starter-actuator-*.jar" })
public class RefreshAutoConfigurationClassPathTests {
diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationMoreClassPathTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationMoreClassPathTests.java
index 70492ba8..664d12f5 100644
--- a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationMoreClassPathTests.java
+++ b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationMoreClassPathTests.java
@@ -16,16 +16,15 @@
package org.springframework.cloud.autoconfigure;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.test.system.OutputCaptureRule;
+import org.springframework.boot.test.system.CapturedOutput;
+import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
@@ -34,21 +33,18 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Spencer Gibb
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-boot-actuator-autoconfigure-*.jar", "spring-boot-starter-actuator-*.jar" })
+@ExtendWith(OutputCaptureExtension.class)
public class RefreshAutoConfigurationMoreClassPathTests {
- @Rule
- public OutputCaptureRule outputCapture = new OutputCaptureRule();
-
private static ConfigurableApplicationContext getApplicationContext(Class> configuration, String... properties) {
return new SpringApplicationBuilder(configuration).web(WebApplicationType.NONE).properties(properties).run();
}
@Test
- public void unknownClassProtected() {
+ public void unknownClassProtected(CapturedOutput outputCapture) {
try (ConfigurableApplicationContext context = getApplicationContext(Config.class, "debug=true")) {
- String output = this.outputCapture.toString();
+ String output = outputCapture.toString();
then(output)
.doesNotContain("Failed to introspect annotations on "
+ "[class org.springframework.cloud.autoconfigure.RefreshEndpointAutoConfiguration")
diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/RsaDisabledTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/RsaDisabledTests.java
index 7bc03db4..80056cf4 100644
--- a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/RsaDisabledTests.java
+++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/encrypt/RsaDisabledTests.java
@@ -18,15 +18,13 @@ package org.springframework.cloud.bootstrap.encrypt;
import java.util.Map;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import static org.assertj.core.api.BDDAssertions.then;
@@ -34,20 +32,19 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Ryan Baxter
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions({ "spring-security-rsa*.jar" })
public class RsaDisabledTests {
private ConfigurableApplicationContext context;
- @Before
+ @BeforeEach
public void setUp() {
this.context = new SpringApplicationBuilder().web(WebApplicationType.NONE)
.sources(EncryptionBootstrapConfiguration.class).web(WebApplicationType.NONE)
.properties("encrypt.key:mykey", "encrypt.rsa.strong:true", "encrypt.rsa.salt:foobar").run();
}
- @After
+ @AfterEach
public void tearDown() {
if (this.context != null) {
this.context.close();
diff --git a/spring-cloud-loadbalancer/pom.xml b/spring-cloud-loadbalancer/pom.xml
index 709d1b2c..8bf44ba7 100644
--- a/spring-cloud-loadbalancer/pom.xml
+++ b/spring-cloud-loadbalancer/pom.xml
@@ -138,10 +138,5 @@
awaitility
test
-
- org.junit.vintage
- junit-vintage-engine
- test
-
diff --git a/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/security/OAuth2LoadBalancerClientAutoConfigurationTests.java b/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/security/OAuth2LoadBalancerClientAutoConfigurationTests.java
index 5490f8f2..2101ac40 100644
--- a/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/security/OAuth2LoadBalancerClientAutoConfigurationTests.java
+++ b/spring-cloud-loadbalancer/src/test/java/org/springframework/cloud/loadbalancer/security/OAuth2LoadBalancerClientAutoConfigurationTests.java
@@ -17,37 +17,28 @@
package org.springframework.cloud.loadbalancer.security;
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.test.ClassPathExclusions;
-import org.springframework.cloud.test.ModifiedClassPathRunner;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Configuration;
import static org.assertj.core.api.Assertions.assertThat;
-
/**
* @author Dave Syer
*
*/
-@RunWith(ModifiedClassPathRunner.class)
@ClassPathExclusions("spring-retry-*.jar")
public class OAuth2LoadBalancerClientAutoConfigurationTests {
private ConfigurableApplicationContext context;
- @Rule
- public ExpectedException expected = ExpectedException.none();
-
- @Before
+ @BeforeEach
public void before() {
// FIXME: why do I need to do this? (fails in maven build without it.
// https://stackoverflow.com/questions/28911560/tomcat-8-embedded-error-org-apache-catalina-core-containerbase-a-child-con
@@ -55,7 +46,7 @@ public class OAuth2LoadBalancerClientAutoConfigurationTests {
TomcatURLStreamHandlerFactory.disable();
}
- @After
+ @AfterEach
public void close() {
if (this.context != null) {
this.context.close();
@@ -63,7 +54,7 @@ public class OAuth2LoadBalancerClientAutoConfigurationTests {
}
@Test
- @Ignore
+ @Disabled
public void userInfoNotLoadBalanced() {
this.context = new SpringApplicationBuilder(ClientConfiguration.class).properties("spring.config.name=test",
"server.port=0", "security.oauth2.resource.userInfoUri:https://example.com").run();
@@ -73,7 +64,7 @@ public class OAuth2LoadBalancerClientAutoConfigurationTests {
}
@Test
- @Ignore
+ @Disabled
public void userInfoLoadBalancedNoRetry() {
this.context = new SpringApplicationBuilder(ClientConfiguration.class).properties("spring.config.name=test",
"server.port=0", "security.oauth2.resource.userInfoUri:https://nosuchservice",
diff --git a/spring-cloud-starter-bootstrap/pom.xml b/spring-cloud-starter-bootstrap/pom.xml
index 968dc45f..3185fc35 100644
--- a/spring-cloud-starter-bootstrap/pom.xml
+++ b/spring-cloud-starter-bootstrap/pom.xml
@@ -27,6 +27,10 @@
org.springframework.cloud
spring-cloud-starter
+
+ org.junit.platform
+ junit-platform-launcher
+
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-cloud-test-support/pom.xml b/spring-cloud-test-support/pom.xml
index 51c237a7..f1620cf2 100644
--- a/spring-cloud-test-support/pom.xml
+++ b/spring-cloud-test-support/pom.xml
@@ -65,6 +65,18 @@
spring-boot-starter-test
test
+
+ org.junit.platform
+ junit-platform-engine
+
+
+ org.junit.platform
+ junit-platform-launcher
+
+
+ org.junit.jupiter
+ junit-jupiter
+
org.hibernate.validator
hibernate-validator
diff --git a/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathExclusions.java b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathExclusions.java
index 2609cf08..075ec66b 100644
--- a/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathExclusions.java
+++ b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathExclusions.java
@@ -21,6 +21,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.junit.jupiter.api.extension.ExtendWith;
+
/**
* Taken from Spring Boot test utils. https://github.com/spring-projects/spring-boot/blob/
* 1.4.x/spring-boot/src/test/java/org/springframework/boot/testutil/ClassPathExclusions.java
@@ -28,6 +30,7 @@ import java.lang.annotation.Target;
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
+@ExtendWith(ModifiedClassPathExtension.class)
public @interface ClassPathExclusions {
/**
diff --git a/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathOverrides.java b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathOverrides.java
index 237f21f1..291c0670 100644
--- a/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathOverrides.java
+++ b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ClassPathOverrides.java
@@ -21,14 +21,17 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.junit.jupiter.api.extension.ExtendWith;
+
/**
- * Annotation used in combination with {@link ModifiedClassPathRunner} to override entries
+ * Annotation used in combination with {@link ModifiedClassPathExtension} to override entries
* on the classpath.
*
* @author Andy Wilkinson
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
+@ExtendWith(ModifiedClassPathExtension.class)
public @interface ClassPathOverrides {
/**
diff --git a/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ModifiedClassPathClassLoader.java b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ModifiedClassPathClassLoader.java
new file mode 100644
index 00000000..df044250
--- /dev/null
+++ b/spring-cloud-test-support/src/main/java/org/springframework/cloud/test/ModifiedClassPathClassLoader.java
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2012-2022 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.cloud.test;
+
+import java.io.File;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.impl.DefaultServiceLocator;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResult;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+import org.eclipse.aether.spi.connector.transport.TransporterFactory;
+import org.eclipse.aether.transport.http.HttpTransporterFactory;
+
+import org.springframework.core.annotation.MergedAnnotation;
+import org.springframework.core.annotation.MergedAnnotations;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.util.ConcurrentReferenceHashMap;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * Custom {@link URLClassLoader} that modifies the class path.
+ *
+ * @author Andy Wilkinson
+ * @author Christoph Dreis
+ * @author Siva Krishna Battu
+ * @see ModifiedClassPathClassLoader.java
+ */
+final class ModifiedClassPathClassLoader extends URLClassLoader {
+
+ private static final Map, ModifiedClassPathClassLoader> cache = new ConcurrentReferenceHashMap<>();
+
+ private static final Pattern INTELLIJ_CLASSPATH_JAR_PATTERN = Pattern.compile(".*classpath(\\d+)?\\.jar");
+
+ private static final int MAX_RESOLUTION_ATTEMPTS = 5;
+
+ private final ClassLoader junitLoader;
+
+ ModifiedClassPathClassLoader(URL[] urls, ClassLoader parent, ClassLoader junitLoader) {
+ super(urls, parent);
+ this.junitLoader = junitLoader;
+ }
+
+ @Override
+ public Class> loadClass(String name) throws ClassNotFoundException {
+ if (name.startsWith("org.junit") || name.startsWith("org.hamcrest")
+ || name.startsWith("io.netty.internal.tcnative")) {
+ return Class.forName(name, false, this.junitLoader);
+ }
+ return super.loadClass(name);
+ }
+
+ static ModifiedClassPathClassLoader get(Class> testClass, Method testMethod, List