diff --git a/pom.xml b/pom.xml
index 4c59ba161..13e64d462 100644
--- a/pom.xml
+++ b/pom.xml
@@ -358,6 +358,7 @@
**/logback-test.xml
logback-test.xml
+ junit-platform.properties
true
diff --git a/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorMethodGenerationTest.java b/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorMethodGenerationTest.java
index 324a6c539..e84a72457 100644
--- a/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorMethodGenerationTest.java
+++ b/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorMethodGenerationTest.java
@@ -104,7 +104,7 @@
* @since 3.0.0
*/
@SuppressWarnings("java:S5976")
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class TranspileXmlConfigAnnotationProcessorMethodGenerationTest {
@TempDir
diff --git a/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorTest.java b/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorTest.java
index 43ec34e14..e1b7bc170 100644
--- a/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorTest.java
+++ b/src/build-tools/spring-config-transpiler/src/test/java/org/geoserver/spring/config/processor/TranspileXmlConfigAnnotationProcessorTest.java
@@ -28,7 +28,7 @@
*
* @since 3.0.0
*/
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class TranspileXmlConfigAnnotationProcessorTest {
private Compiler compilerWithProcessor() {
diff --git a/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProvider.java b/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProvider.java
index 266c489a7..dd2388323 100644
--- a/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProvider.java
+++ b/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProvider.java
@@ -22,7 +22,7 @@
*
* @see LockProvider
*/
-public class ChainedLockProvider implements LockProvider {
+class ChainedLockProvider implements LockProvider {
private static final Logger LOGGER = Logging.getLogger(ChainedLockProvider.class);
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryAutoConfigurationTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryAutoConfigurationTest.java
index 8ad512da2..f63203afd 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryAutoConfigurationTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryAutoConfigurationTest.java
@@ -20,11 +20,15 @@
import org.geoserver.cloud.config.catalog.backend.datadirectory.DataDirectoryProperties;
import org.geoserver.cloud.config.catalog.backend.datadirectory.DataDirectoryUpdateSequence;
import org.geoserver.config.plugin.RepositoryGeoServerFacade;
+import org.geoserver.platform.GeoServerExtensionsHelper;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.platform.config.UpdateSequence;
import org.geoserver.platform.resource.FileSystemResourceStore;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -32,36 +36,44 @@
* Test {@link DataDirectoryBackendConfiguration} through {@link DataDirectoryAutoConfiguration} when
* {@code geoserver.backend.data-directory.enabled=true}
*/
+@Execution(ExecutionMode.SAME_THREAD)
class DataDirectoryAutoConfigurationTest {
- static @TempDir Path datadir;
-
- private ApplicationContextRunner runner = new ApplicationContextRunner()
- .withAllowBeanDefinitionOverriding(true)
- .withAllowCircularReferences(true)
- .withConfiguration(AutoConfigurations.of(
- // AutoConfigurations from gs-cloud-catalog-backend-common
- org.geoserver.cloud.autoconfigure.geotools.GeoToolsHttpClientAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.backend.core.GeoServerBackendAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.main.DefaultUpdateSequenceAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.main.XstreamServiceLoadersAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.backend.core
- .RemoteEventResourcePoolCleanupUpAutoConfiguration.class,
- //
- org.geoserver.cloud.autoconfigure.main.GeoServerMainSecurityAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.metrics.catalog.CatalogMetricsAutoConfiguration.class,
- // AutoConfigurations from gs-cloud-catalog-backend-datadir
- org.geoserver.cloud.autoconfigure.catalog.backend.datadir.DataDirectoryAutoConfiguration.class //
- ))
- //
- .withPropertyValues(
- "geoserver.backend.dataDirectory.enabled=true", //
- "geoserver.backend.dataDirectory.location=%s".formatted(datadir.toAbsolutePath()) //
- );
+ private ApplicationContextRunner runner;
+
+ private Path datadir;
+
+ @BeforeEach
+ void beforeEach(@TempDir Path datadir) {
+ GeoServerExtensionsHelper.init(null);
+ this.datadir = datadir;
+ runner = new ApplicationContextRunner()
+ .withAllowBeanDefinitionOverriding(true)
+ .withAllowCircularReferences(true)
+ .withConfiguration(AutoConfigurations.of(
+ // AutoConfigurations from gs-cloud-catalog-backend-common
+ org.geoserver.cloud.autoconfigure.geotools.GeoToolsHttpClientAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.backend.core.GeoServerBackendAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.main.DefaultUpdateSequenceAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.main.XstreamServiceLoadersAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.backend.core
+ .RemoteEventResourcePoolCleanupUpAutoConfiguration.class,
+ //
+ org.geoserver.cloud.autoconfigure.main.GeoServerMainSecurityAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.metrics.catalog.CatalogMetricsAutoConfiguration.class,
+ // AutoConfigurations from gs-cloud-catalog-backend-datadir
+ org.geoserver.cloud.autoconfigure.catalog.backend.datadir.DataDirectoryAutoConfiguration
+ .class //
+ ))
+ //
+ .withPropertyValues(
+ "geoserver.backend.dataDirectory.enabled=true", //
+ "geoserver.backend.dataDirectory.location=%s".formatted(datadir.toAbsolutePath()) //
+ );
+ }
@Test
void testProperties() {
-
runner.run(context -> {
assertThat(context).hasNotFailed();
assertThat(context).hasSingleBean(DataDirectoryProperties.class);
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryUpdateSequenceTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryUpdateSequenceTest.java
index 2534d0381..f967c2f7c 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryUpdateSequenceTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/DataDirectoryUpdateSequenceTest.java
@@ -9,9 +9,13 @@
import org.geoserver.cloud.config.catalog.backend.datadirectory.DataDirectoryBackendConfiguration;
import org.geoserver.cloud.config.catalog.backend.datadirectory.DataDirectoryUpdateSequence;
import org.geoserver.config.GeoServer;
+import org.geoserver.platform.GeoServerExtensionsHelper;
import org.geoserver.platform.config.UpdateSequence;
import org.geoserver.platform.config.UpdateSequenceConformanceTest;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
@@ -28,12 +32,18 @@
"geoserver.backend.data-directory.enabled=true",
})
@ActiveProfiles("test")
+@Execution(ExecutionMode.SAME_THREAD)
class DataDirectoryUpdateSequenceTest implements UpdateSequenceConformanceTest {
private @Autowired DataDirectoryUpdateSequence updateSequence;
- private @Autowired GeoServer geoserver;
+ private @Autowired GeoServer geoServer;
static @TempDir Path datadir;
+ @BeforeAll
+ static void beforeAll() {
+ GeoServerExtensionsHelper.init(null);
+ }
+
@DynamicPropertySource
static void setUpDataDir(DynamicPropertyRegistry registry) {
registry.add("geoserver.backend.data-directory.location", datadir::toAbsolutePath);
@@ -46,6 +56,6 @@ public UpdateSequence getUpdataSequence() {
@Override
public GeoServer getGeoSever() {
- return geoserver;
+ return geoServer;
}
}
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/RemoteEventDataDirectoryAutoConfigurationTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/RemoteEventDataDirectoryAutoConfigurationTest.java
index 7157db012..13134e817 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/RemoteEventDataDirectoryAutoConfigurationTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/datadir/RemoteEventDataDirectoryAutoConfigurationTest.java
@@ -9,6 +9,8 @@
import java.nio.file.Path;
import org.geoserver.cloud.catalog.backend.datadir.EventualConsistencyEnforcer;
+import org.geoserver.platform.GeoServerExtensionsHelper;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -20,37 +22,40 @@
*/
class RemoteEventDataDirectoryAutoConfigurationTest {
- static @TempDir Path datadir;
+ private ApplicationContextRunner runner;
- private ApplicationContextRunner runner = new ApplicationContextRunner()
- .withAllowBeanDefinitionOverriding(true)
- .withAllowCircularReferences(true)
- .withConfiguration(AutoConfigurations.of(
- // AutoConfigurations from gs-cloud-catalog-backend-common
- org.geoserver.cloud.autoconfigure.geotools.GeoToolsHttpClientAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.backend.core.GeoServerBackendAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.main.DefaultUpdateSequenceAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.main.XstreamServiceLoadersAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.backend.core
- .RemoteEventResourcePoolCleanupUpAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.event.LocalCatalogEventsAutoConfiguration.class,
- //
- org.geoserver.cloud.autoconfigure.main.GeoServerMainSecurityAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.metrics.catalog.CatalogMetricsAutoConfiguration.class,
- // AutoConfigurations from gs-cloud-catalog-backend-datadir
- org.geoserver.cloud.autoconfigure.catalog.backend.datadir.DataDirectoryAutoConfiguration.class,
- org.geoserver.cloud.autoconfigure.catalog.backend.datadir.RemoteEventDataDirectoryAutoConfiguration
- .class))
- .withPropertyValues(
- "geoserver.backend.dataDirectory.enabled=true",
- "geoserver.backend.dataDirectory.location=%s".formatted(datadir.toAbsolutePath()),
- "geoserver.catalog.events.enabled=true");
+ @BeforeEach
+ void beforeEach(@TempDir Path datadir) {
+ GeoServerExtensionsHelper.init(null);
+ runner = new ApplicationContextRunner()
+ .withAllowBeanDefinitionOverriding(true)
+ .withAllowCircularReferences(true)
+ .withConfiguration(AutoConfigurations.of(
+ // AutoConfigurations from gs-cloud-catalog-backend-common
+ org.geoserver.cloud.autoconfigure.geotools.GeoToolsHttpClientAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.backend.core.GeoServerBackendAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.main.DefaultUpdateSequenceAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.main.XstreamServiceLoadersAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.backend.core
+ .RemoteEventResourcePoolCleanupUpAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.event.LocalCatalogEventsAutoConfiguration.class,
+ //
+ org.geoserver.cloud.autoconfigure.main.GeoServerMainSecurityAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.metrics.catalog.CatalogMetricsAutoConfiguration.class,
+ // AutoConfigurations from gs-cloud-catalog-backend-datadir
+ org.geoserver.cloud.autoconfigure.catalog.backend.datadir.DataDirectoryAutoConfiguration.class,
+ org.geoserver.cloud.autoconfigure.catalog.backend.datadir
+ .RemoteEventDataDirectoryAutoConfiguration.class))
+ .withPropertyValues(
+ "geoserver.backend.dataDirectory.enabled=true",
+ "geoserver.backend.dataDirectory.location=%s".formatted(datadir.toAbsolutePath()),
+ "geoserver.catalog.events.enabled=true");
+ }
@Test
void testEventualConsistencyEnforcerEnabledByDefault() {
runner.run(context -> {
- assertThat(context).hasNotFailed();
- assertThat(context).hasSingleBean(EventualConsistencyEnforcer.class);
+ assertThat(context).hasNotFailed().hasSingleBean(EventualConsistencyEnforcer.class);
});
}
@@ -58,8 +63,7 @@ void testEventualConsistencyEnforcerEnabledByDefault() {
void testEventualConsistencyEnforcerExplicitlyEnabled() {
runner.withPropertyValues("geoserver.backend.data-directory.eventual-consistency.enabled=true")
.run(context -> {
- assertThat(context).hasNotFailed();
- assertThat(context).hasSingleBean(EventualConsistencyEnforcer.class);
+ assertThat(context).hasNotFailed().hasSingleBean(EventualConsistencyEnforcer.class);
});
}
@@ -67,8 +71,7 @@ void testEventualConsistencyEnforcerExplicitlyEnabled() {
void testEventualConsistencyEnforcerDisabled() {
runner.withPropertyValues("geoserver.backend.data-directory.eventual-consistency.enabled=false")
.run(context -> {
- assertThat(context).hasNotFailed();
- assertThat(context).doesNotHaveBean(EventualConsistencyEnforcer.class);
+ assertThat(context).hasNotFailed().doesNotHaveBean(EventualConsistencyEnforcer.class);
});
}
}
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventualConsistencyEnforcerTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventualConsistencyEnforcerTest.java
index 4689da6a8..3a743fd25 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventualConsistencyEnforcerTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventualConsistencyEnforcerTest.java
@@ -47,6 +47,7 @@ class EventualConsistencyEnforcerTest {
@BeforeEach
void before() {
+ GeoServerExtensionsHelper.init(null);
catalog = new CatalogPlugin();
geoserver = new GeoServerImpl();
geoserver.setCatalog(catalog);
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventuallyConsistentCatalogFacadeTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventuallyConsistentCatalogFacadeTest.java
index 65242bafa..b41c1776a 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventuallyConsistentCatalogFacadeTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/EventuallyConsistentCatalogFacadeTest.java
@@ -41,10 +41,13 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
+@Execution(ExecutionMode.CONCURRENT)
class EventuallyConsistentCatalogFacadeTest {
EventualConsistencyEnforcer tracker;
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProviderTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProviderTest.java
index b64ee41d4..ad8cee213 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProviderTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/ChainedLockProviderTest.java
@@ -19,11 +19,11 @@ class ChainedLockProviderTest {
@Test
void acquiresBothLocksInOrder() {
List order = new ArrayList<>();
- LockProvider first = key -> {
+ LockProvider first = _ -> {
order.add("first-acquire");
return () -> order.add("first-release");
};
- LockProvider second = key -> {
+ LockProvider second = _ -> {
order.add("second-acquire");
return () -> order.add("second-release");
};
@@ -40,11 +40,11 @@ void acquiresBothLocksInOrder() {
@Test
void releasesFirstLockIfSecondFails() {
List order = new ArrayList<>();
- LockProvider first = key -> {
+ LockProvider first = _ -> {
order.add("first-acquire");
return () -> order.add("first-release");
};
- LockProvider second = key -> {
+ LockProvider second = _ -> {
throw new RuntimeException("forced second lock failure");
};
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/DistributedFileLockProviderTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/DistributedFileLockProviderTest.java
index c1206744e..7a384b396 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/DistributedFileLockProviderTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/catalog/backend/datadir/locking/DistributedFileLockProviderTest.java
@@ -17,14 +17,14 @@
import org.geoserver.platform.resource.Resource.Lock;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(value = ExecutionMode.CONCURRENT)
class DistributedFileLockProviderTest {
- @TempDir
- File tempDir;
-
@Test
- void acquireAndRelease() {
+ void acquireAndRelease(@TempDir File tempDir) {
DistributedFileLockProvider provider = new DistributedFileLockProvider(tempDir);
Lock lock = provider.acquire("testKey");
assertThat(lock).isNotNull();
@@ -32,7 +32,7 @@ void acquireAndRelease() {
}
@Test
- void createsLockFileAndDirectory() {
+ void createsLockFileAndDirectory(@TempDir File tempDir) {
new DistributedFileLockProvider(tempDir);
File locksDir = new File(tempDir, ".filelocks");
assertThat(locksDir).isDirectory();
@@ -41,7 +41,7 @@ void createsLockFileAndDirectory() {
}
@Test
- void destroyCleansUpResources() throws Exception {
+ void destroyCleansUpResources(@TempDir File tempDir) throws Exception {
DistributedFileLockProvider provider = new DistributedFileLockProvider(tempDir);
provider.acquire("key").release();
provider.destroy();
@@ -59,7 +59,7 @@ void constructorWithNullBasePathFails() {
}
@Test
- void multipleKeysSucceed() {
+ void multipleKeysSucceed(@TempDir File tempDir) {
DistributedFileLockProvider provider = new DistributedFileLockProvider(tempDir);
Lock lock1 = provider.acquire("key1");
Lock lock2 = provider.acquire("key2");
@@ -74,7 +74,7 @@ void multipleKeysSucceed() {
@Test
@SuppressWarnings("java:S2925") // Thread.sleep
- void sameKeyBlocksOnSecondThread() throws Exception {
+ void sameKeyBlocksOnSecondThread(@TempDir File tempDir) throws Exception {
DistributedFileLockProvider provider = new DistributedFileLockProvider(tempDir);
Lock lock = provider.acquire("blockedKey");
diff --git a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/event/remote/datadir/RemoteEventDataDirectoryProcessorTest.java b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/event/remote/datadir/RemoteEventDataDirectoryProcessorTest.java
index 448781839..dd6cb8bb6 100644
--- a/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/event/remote/datadir/RemoteEventDataDirectoryProcessorTest.java
+++ b/src/catalog/backends/datadir/src/test/java/org/geoserver/cloud/event/remote/datadir/RemoteEventDataDirectoryProcessorTest.java
@@ -55,7 +55,10 @@
import org.geoserver.config.plugin.RepositoryGeoServerFacade;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class RemoteEventDataDirectoryProcessorTest {
ExtendedCatalogFacade mockFacade;
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigBackendAutoConfigurationTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigBackendAutoConfigurationTest.java
index 7ebc6b8d6..13439a21a 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigBackendAutoConfigurationTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigBackendAutoConfigurationTest.java
@@ -35,7 +35,7 @@
* @since 1.4
*/
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigBackendAutoConfigurationTest {
@Container
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfigurationTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfigurationTest.java
index 22416ccb7..07883e5af 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfigurationTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfigurationTest.java
@@ -33,7 +33,7 @@
*/
@Testcontainers(disabledWithoutDocker = true)
@Slf4j
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigDataSourceAutoConfigurationTest {
@Container
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/PgconfigCatalogBackendConformanceTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/PgconfigCatalogBackendConformanceTest.java
index d6ed4104d..6ee85e379 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/PgconfigCatalogBackendConformanceTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/PgconfigCatalogBackendConformanceTest.java
@@ -33,7 +33,7 @@
/** @since 1.4 */
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigCatalogBackendConformanceTest extends CatalogConformanceTest {
@Container
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/repository/PgconfigWorkspaceRepositoryTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/repository/PgconfigWorkspaceRepositoryTest.java
index 1976a264b..6fac4d00a 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/repository/PgconfigWorkspaceRepositoryTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/catalog/repository/PgconfigWorkspaceRepositoryTest.java
@@ -22,7 +22,7 @@
/** @since 1.4 */
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigWorkspaceRepositoryTest {
@Container
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigConfigRepositoryConformanceTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigConfigRepositoryConformanceTest.java
index ce9bec48d..4e693adf7 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigConfigRepositoryConformanceTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigConfigRepositoryConformanceTest.java
@@ -30,7 +30,7 @@
/** @since 1.4 */
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigConfigRepositoryConformanceTest extends GeoServerConfigConformanceTest {
@Container
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigUpdateSequenceTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigUpdateSequenceTest.java
index b630c893e..ce0baea99 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigUpdateSequenceTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/config/PgconfigUpdateSequenceTest.java
@@ -20,7 +20,7 @@
/** @since 1.4 */
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
@SuppressWarnings("java:S2187")
class PgconfigUpdateSequenceTest implements UpdateSequenceConformanceTest {
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/resource/PgconfigResourceTest.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/resource/PgconfigResourceTest.java
index d65f37bb5..f8a03082a 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/resource/PgconfigResourceTest.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/resource/PgconfigResourceTest.java
@@ -58,7 +58,7 @@
@Slf4j
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigResourceTest {
@Container
diff --git a/src/catalog/events-tests/README.md b/src/catalog/events-tests/README.md
new file mode 100644
index 000000000..ca5582af9
--- /dev/null
+++ b/src/catalog/events-tests/README.md
@@ -0,0 +1,146 @@
+# Catalog Events Module
+
+Implements an application-level catalog/config events object model
+and standard event propagation mechanism through the ApplicationContext.
+
+The event object hierarchy has a notion of whether the event was generated
+by the running service instance or a remote one, but is not tied to any
+distributed event delivery mechanism. That responsibility is left to
+an integration architectural layer.
+
+Standard Spring `@EventListeners` can hence be used to implement
+orthogonal concerns. Care must be taken to filter out events
+by `InfoEvent.isLocal()` and `InfoEvent.isRemote()` as appropriate,
+if relevant to the listener.
+
+A spring-boot `AutoConfiguration` is provided to enable or disable
+the usage of these application-level level events, through
+the `geoserver.catalog.events.enabled` boolean configuration property.
+
+As a convenience, the `@ConditionalOnCatalogEvents` annotation
+can be used to enable additional functionality on any downstream
+dependency.
+
+
+```mermaid
+classDiagram
+ direction LR
+ GeoServerEvent <|-- UpdateSequenceEvent
+ GeoServerEvent <|-- LifecycleEvent
+ LifecycleEvent <|-- ReloadEvent
+ LifecycleEvent <|-- ResetEvent
+ UpdateSequenceEvent <|-- InfoEvent
+ UpdateSequenceEvent <|-- SecurityConfigChanged
+ InfoEvent <|-- InfoAdded
+ InfoEvent <|-- InfoModified
+ InfoEvent <|-- InfoRemoved
+ InfoEvent o-- ConfigInfoType
+ InfoAdded <|-- CatalogInfoAdded
+ InfoAdded <|-- ConfigInfoAdded
+ ConfigInfoAdded <|-- GeoServerInfoSet
+ ConfigInfoAdded <|-- LoggingInfoSet
+ ConfigInfoAdded <|-- ServiceAdded
+ ConfigInfoAdded <|-- SettingsAdded
+ InfoModified <|-- CatalogInfoModified
+ InfoModified <|-- ConfigInfoModified
+ CatalogInfoModified <|-- DefaultNamespaceSet
+ CatalogInfoModified <|-- DefaultWorkspaceSet
+ CatalogInfoModified <|-- DefaultDataStoreSet
+ ConfigInfoModified <|-- GeoServerInfoModified
+ ConfigInfoModified <|-- LoggingInfoModified
+ ConfigInfoModified <|-- ServiceModified
+ ConfigInfoModified <|-- SettingsModified
+ InfoRemoved <|-- CatalogInfoRemoved
+ InfoRemoved <|-- ConfigInfoRemoved
+ ConfigInfoRemoved <|-- ServiceRemoved
+ ConfigInfoRemoved <|-- SettingsRemoved
+ class GeoServerEvent{
+ <>
+ String origin
+ long timestamp
+ String author
+ String id
+ }
+ class LifecycleEvent{
+ <>
+ }
+ class ReloadEvent{
+ }
+ class ResetEvent{
+ }
+ class UpdateSequenceEvent{
+ Long updateSequence
+ }
+ class InfoEvent{
+ <>
+ String objectId
+ ConfigInfoType objectType
+ }
+ class InfoAdded{
+ <>
+ ~I extends Info~ object
+ }
+ class InfoModified{
+ <>
+ Patch patch
+ }
+ class InfoRemoved{
+ <>
+ }
+ class ConfigInfoAdded{
+ <>
+ }
+ class ConfigInfoModified{
+ <>
+ }
+ class ConfigInfoRemoved{
+ <>
+ }
+ class ServiceModified{
+ String workspaceId
+ }
+ class ServiceRemoved{
+ String workspaceId
+ }
+ class SettingsModified{
+ String workspaceId
+ }
+ class SettingsRemoved{
+ String workspaceId
+ }
+ class DefaultDataStoreSet{
+ String workspaceId
+ String defaultDataStoreId
+ }
+ class DefaultNamespaceSet{
+ newNamespaceId
+ }
+ class DefaultWorkspaceSet{
+ String newWorkspaceId
+ }
+ class SecurityConfigChanged{
+ String reason
+ }
+ class ConfigInfoType {
+ <>
+ Catalog
+ WorkspaceInfo
+ NamespaceInfo
+ CoverageStoreInfo
+ DataStoreInfo
+ WmsStoreInfo
+ WmtsStoreInfo
+ FeatureTypeInfo
+ CoverageInfo
+ WmsLayerInfo
+ WmtsLayerInfo
+ LayerInfo
+ LayerGroupInfo
+ MapInfo
+ StyleInfo
+ GeoServerInfo
+ ServiceInfo
+ SettingsInfo
+ LoggingInfo
+ }
+```
diff --git a/src/catalog/events-tests/pom.xml b/src/catalog/events-tests/pom.xml
new file mode 100644
index 000000000..64d4c091d
--- /dev/null
+++ b/src/catalog/events-tests/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ org.geoserver.cloud.catalog
+ gs-cloud-catalog
+ ${revision}
+
+ gs-cloud-events-tests
+ jar
+ Separate module to run Spring Cloud Event Bus tests
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+ org.geoserver.cloud.catalog
+ gs-cloud-events
+
+
+ org.springframework.cloud
+ spring-cloud-bus
+
+
+ org.geoserver.cloud.catalog
+ gs-cloud-catalog-plugin
+ ${project.version}
+ test-jar
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-webmvc
+ test
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+ test
+
+
+ org.testcontainers
+ testcontainers-junit-jupiter
+ test
+
+
+ org.testcontainers
+ testcontainers-rabbitmq
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+
+
+
+
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/autoconfigure/event/bus/GeoServerBusIntegrationAutoConfigurationTest.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/autoconfigure/event/bus/GeoServerBusIntegrationAutoConfigurationTest.java
similarity index 100%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/autoconfigure/event/bus/GeoServerBusIntegrationAutoConfigurationTest.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/autoconfigure/event/bus/GeoServerBusIntegrationAutoConfigurationTest.java
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTests.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTestSupport.java
similarity index 99%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTests.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTestSupport.java
index 5de936409..67b86cb38 100644
--- a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTests.java
+++ b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/BusAmqpIntegrationTestSupport.java
@@ -94,7 +94,7 @@
"logging.level.org.springframework.cloud.bus.BusConsumer=info"
})
@Testcontainers
-public abstract class BusAmqpIntegrationTests {
+abstract class BusAmqpIntegrationTestSupport {
@Container
private static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:4-management-alpine");
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/BusEventCollector.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/BusEventCollector.java
similarity index 100%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/BusEventCollector.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/BusEventCollector.java
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java
similarity index 99%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java
index f23b6836f..4b553a704 100644
--- a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java
+++ b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/CatalogRemoteApplicationEventsIT.java
@@ -54,7 +54,7 @@
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
-class CatalogRemoteApplicationEventsIT extends BusAmqpIntegrationTests {
+class CatalogRemoteApplicationEventsIT extends BusAmqpIntegrationTestSupport {
@Test
void testCatalogSetDefaultWorkspace() {
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java
similarity index 99%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java
index 3814956a1..7f0a42ca1 100644
--- a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java
+++ b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/ConfigRemoteApplicationEventsIT.java
@@ -38,7 +38,7 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-class ConfigRemoteApplicationEventsIT extends BusAmqpIntegrationTests {
+class ConfigRemoteApplicationEventsIT extends BusAmqpIntegrationTestSupport {
@Override
@BeforeEach
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java
similarity index 99%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java
index 941f74351..443ffb678 100644
--- a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java
+++ b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/LifecycleRemoteApplicationEventsIT.java
@@ -16,7 +16,7 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-class LifecycleRemoteApplicationEventsIT extends BusAmqpIntegrationTests {
+class LifecycleRemoteApplicationEventsIT extends BusAmqpIntegrationTestSupport {
@BeforeAll
static void handleGsExtensions() {
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/RemoteGeoServerEventsConfigurationTest.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/RemoteGeoServerEventsConfigurationTest.java
similarity index 100%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/RemoteGeoServerEventsConfigurationTest.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/RemoteGeoServerEventsConfigurationTest.java
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/TestConfigurationAutoConfiguration.java b/src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/TestConfigurationAutoConfiguration.java
similarity index 100%
rename from src/catalog/events/src/test/java/org/geoserver/cloud/event/bus/TestConfigurationAutoConfiguration.java
rename to src/catalog/events-tests/src/test/java/org/geoserver/cloud/event/bus/TestConfigurationAutoConfiguration.java
diff --git a/src/catalog/events/src/test/resources/application.yml b/src/catalog/events-tests/src/test/resources/application.yml
similarity index 100%
rename from src/catalog/events/src/test/resources/application.yml
rename to src/catalog/events-tests/src/test/resources/application.yml
diff --git a/src/catalog/events-tests/src/test/resources/logback-test.xml b/src/catalog/events-tests/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..b714568ed
--- /dev/null
+++ b/src/catalog/events-tests/src/test/resources/logback-test.xml
@@ -0,0 +1,15 @@
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/catalog/events/pom.xml b/src/catalog/events/pom.xml
index 0d04e18c4..e3ac0be7d 100644
--- a/src/catalog/events/pom.xml
+++ b/src/catalog/events/pom.xml
@@ -56,26 +56,6 @@
spring-boot-starter-webmvc
test
-
- org.springframework.cloud
- spring-cloud-starter-bus-amqp
- test
-
-
- org.testcontainers
- testcontainers-junit-jupiter
- test
-
-
- org.testcontainers
- testcontainers-rabbitmq
- test
-
-
- org.awaitility
- awaitility
- test
-
diff --git a/src/catalog/events/src/main/java/org/geoserver/cloud/autoconfigure/event/bus/ConditionalOnGeoServerRemoteEventsDisabled.java b/src/catalog/events/src/main/java/org/geoserver/cloud/autoconfigure/event/bus/ConditionalOnGeoServerRemoteEventsDisabled.java
index 4f1abeb73..582f059ee 100644
--- a/src/catalog/events/src/main/java/org/geoserver/cloud/autoconfigure/event/bus/ConditionalOnGeoServerRemoteEventsDisabled.java
+++ b/src/catalog/events/src/main/java/org/geoserver/cloud/autoconfigure/event/bus/ConditionalOnGeoServerRemoteEventsDisabled.java
@@ -12,13 +12,12 @@
import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.bus.BusBridge;
import org.springframework.cloud.bus.ConditionalOnBusEnabled;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
-@ConditionalOnMissingBean(BusBridge.class)
+@ConditionalOnMissingBean(name = "org.springframework.cloud.bus.BusBridge")
@ConditionalOnProperty(
value = ConditionalOnBusEnabled.SPRING_CLOUD_BUS_ENABLED,
matchIfMissing = false,
diff --git a/src/catalog/events/src/test/java/org/geoserver/cloud/config/catalog/events/CatalogApplicationEventsConfigurationTest.java b/src/catalog/events/src/test/java/org/geoserver/cloud/config/catalog/events/CatalogApplicationEventsConfigurationTest.java
index 17272e8ff..da5dbb729 100644
--- a/src/catalog/events/src/test/java/org/geoserver/cloud/config/catalog/events/CatalogApplicationEventsConfigurationTest.java
+++ b/src/catalog/events/src/test/java/org/geoserver/cloud/config/catalog/events/CatalogApplicationEventsConfigurationTest.java
@@ -58,9 +58,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
@SpringBootTest(classes = {TestConfigurationAutoConfiguration.class, ApplicationEventCapturingListener.class})
@EnableAutoConfiguration
+@ActiveProfiles("test")
class CatalogApplicationEventsConfigurationTest {
private @Autowired GeoServer geoserver;
diff --git a/src/catalog/events/src/test/resources/application-test.yml b/src/catalog/events/src/test/resources/application-test.yml
new file mode 100644
index 000000000..de96f9c87
--- /dev/null
+++ b/src/catalog/events/src/test/resources/application-test.yml
@@ -0,0 +1,2 @@
+spring.cloud.bus.enabled: false
+spring.main.banner-mode: off
\ No newline at end of file
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/ConnectionParametersSerializerTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/ConnectionParametersSerializerTest.java
index 1032c0b47..c6d046722 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/ConnectionParametersSerializerTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/ConnectionParametersSerializerTest.java
@@ -21,10 +21,13 @@
import org.geotools.referencing.CRS;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;
/** Tests for {@link ConnectionParameters} serialization and deserialization. */
+@Execution(ExecutionMode.CONCURRENT)
class ConnectionParametersSerializerTest {
private ObjectMapper objectMapper;
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleBackwardsCompatibilityTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleBackwardsCompatibilityTest.java
index a53c91c4b..f9947d3e0 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleBackwardsCompatibilityTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleBackwardsCompatibilityTest.java
@@ -22,6 +22,8 @@
import org.geoserver.catalog.WorkspaceInfo;
import org.geotools.jackson.databind.dto.CoordinateReferenceSystemDto;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/**
* Verifies that JSON produced by Jackson 2's property naming convention (lowercase leading characters) can be
@@ -41,6 +43,7 @@
* {@code Filter.NativeFilter.Native} → {@code "native"}
*
*/
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerCatalogModuleBackwardsCompatibilityTest extends BackwardsCompatibilityTestSupport {
@Test
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleJsonTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleJsonTest.java
index 3950208ca..f7b685f65 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleJsonTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleJsonTest.java
@@ -6,9 +6,12 @@
package org.geoserver.jackson.databind.catalog;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
/** @since 1.0 */
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerCatalogModuleJsonTest extends GeoServerCatalogModuleTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleYamlTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleYamlTest.java
index ed75d38bd..18baa83e0 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleYamlTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/GeoServerCatalogModuleYamlTest.java
@@ -6,9 +6,12 @@
package org.geoserver.jackson.databind.catalog;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
/** @since 1.0 */
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerCatalogModuleYamlTest extends GeoServerCatalogModuleTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationBackwardsCompatibilityTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationBackwardsCompatibilityTest.java
index 688c871e9..021683745 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationBackwardsCompatibilityTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationBackwardsCompatibilityTest.java
@@ -21,6 +21,8 @@
import org.geoserver.config.ServiceInfo;
import org.geoserver.jackson.databind.catalog.dto.ResolvingProxyDto;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/**
* Verifies that hardcoded JSON produced by Jackson 2's property naming convention can be deserialized correctly into
@@ -33,6 +35,7 @@
* and id), not as full objects. After deserialization, these are converted to proxy Info objects by the
* {@link org.geoserver.jackson.databind.mapper.PatchMapper}.
*/
+@Execution(ExecutionMode.CONCURRENT)
class PatchSerializationBackwardsCompatibilityTest extends BackwardsCompatibilityTestSupport {
@Test
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationJsonTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationJsonTest.java
index 0aa7d8b0f..734749d14 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationJsonTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationJsonTest.java
@@ -6,8 +6,11 @@
package org.geoserver.jackson.databind.catalog;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
+@Execution(ExecutionMode.CONCURRENT)
class PatchSerializationJsonTest extends PatchSerializationTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationYamlTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationYamlTest.java
index 8590f8550..8bdb2ab31 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationYamlTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/PatchSerializationYamlTest.java
@@ -6,8 +6,11 @@
package org.geoserver.jackson.databind.catalog;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
+@Execution(ExecutionMode.CONCURRENT)
class PatchSerializationYamlTest extends PatchSerializationTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/VirtualTableSerializationTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/VirtualTableSerializationTest.java
index 5f3c423e2..b501f90de 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/VirtualTableSerializationTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/catalog/VirtualTableSerializationTest.java
@@ -17,6 +17,8 @@
import org.geotools.jdbc.VirtualTableParameter;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
@@ -25,6 +27,7 @@
/** Test to verify our VirtualTable serialization fixes work correctly */
@Slf4j
+@Execution(ExecutionMode.CONCURRENT)
class VirtualTableSerializationTest {
private ObjectMapper objectMapper;
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoServerConfigModuleBackwardsCompatibilityTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoServerConfigModuleBackwardsCompatibilityTest.java
index 01b1ddf9d..951579229 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoServerConfigModuleBackwardsCompatibilityTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoServerConfigModuleBackwardsCompatibilityTest.java
@@ -17,6 +17,8 @@
import org.geoserver.wms.WMSInfo;
import org.geoserver.wps.WPSInfo;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/**
* Verifies that JSON produced by Jackson 2's property naming convention can be deserialized for GeoServer configuration
@@ -40,6 +42,7 @@
* {@code WcsService.SRS} → {@code "srs"}
*
*/
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerConfigModuleBackwardsCompatibilityTest extends BackwardsCompatibilityTestSupport {
@Test
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleJsonTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleJsonTest.java
index 50bf9bf2e..0075baaed 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleJsonTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleJsonTest.java
@@ -13,10 +13,13 @@
import org.geoserver.config.UserDetailsDisplaySettingsInfo;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import org.skyscreamer.jsonassert.JSONAssert;
import tools.jackson.databind.ObjectMapper;
/** @since 1.0 */
+@Execution(ExecutionMode.CONCURRENT)
class GeoSeververConfigModuleJsonTest extends GeoServerConfigModuleTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleYamlTest.java b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleYamlTest.java
index 0eaae32c6..b6a3fe3b6 100644
--- a/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleYamlTest.java
+++ b/src/catalog/jackson-bindings/geoserver/src/test/java/org/geoserver/jackson/databind/config/GeoSeververConfigModuleYamlTest.java
@@ -6,9 +6,12 @@
package org.geoserver.jackson.databind.config;
import org.geotools.jackson.databind.util.ObjectMapperUtil;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
import tools.jackson.databind.ObjectMapper;
/** @since 1.0 */
+@Execution(ExecutionMode.CONCURRENT)
class GeoSeververConfigModuleYamlTest extends GeoServerConfigModuleTest {
protected @Override ObjectMapper newObjectMapper() {
diff --git a/src/catalog/jackson-bindings/geoserver/src/test/resources/junit-platform.properties b/src/catalog/jackson-bindings/geoserver/src/test/resources/junit-platform.properties
new file mode 100644
index 000000000..2115a2f13
--- /dev/null
+++ b/src/catalog/jackson-bindings/geoserver/src/test/resources/junit-platform.properties
@@ -0,0 +1 @@
+junit.jupiter.execution.parallel.enabled = true
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/AbstractCatalogVisitorTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/AbstractCatalogVisitorTest.java
index 48547b861..05808c494 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/AbstractCatalogVisitorTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/AbstractCatalogVisitorTest.java
@@ -28,7 +28,10 @@
import org.geoserver.catalog.impl.WMTSStoreInfoImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class AbstractCatalogVisitorTest {
private StoreInfo visitedStore;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogFacadeExtensionAdapterTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogFacadeExtensionAdapterTest.java
index 26804ff1e..3eabd04c2 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogFacadeExtensionAdapterTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogFacadeExtensionAdapterTest.java
@@ -17,11 +17,14 @@
import org.geoserver.catalog.plugin.forwarding.ResolvingCatalogFacadeDecorator;
import org.geoserver.platform.GeoServerResourceLoader;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/**
* Asserts that a {@link CatalogFacadeExtensionAdapter} does not result in double publishing of catalog events, and that
* {@link CatalogFacadeExtensionAdapter#update} correctly forwards to legacy {@link CatalogFacade#save} methods
*/
+@Execution(ExecutionMode.CONCURRENT)
class CatalogFacadeExtensionAdapterTest extends CatalogConformanceTest {
private CatalogPlugin catalog;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogPluginConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogPluginConformanceTest.java
index 1b91e2490..18b35c767 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogPluginConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/CatalogPluginConformanceTest.java
@@ -7,7 +7,10 @@
import java.io.File;
import org.geoserver.platform.GeoServerResourceLoader;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class CatalogPluginConformanceTest extends CatalogConformanceTest {
protected @Override CatalogPlugin createCatalog(File tmpFolder) {
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/NamespaceInfoLookupTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/NamespaceInfoLookupTest.java
index ef2ade815..5f179ff08 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/NamespaceInfoLookupTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/NamespaceInfoLookupTest.java
@@ -16,8 +16,11 @@
import org.geoserver.catalog.plugin.CatalogInfoLookup.NamespaceInfoLookup;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** Test suite for {@link NamespaceInfoLookup} */
+@Execution(ExecutionMode.CONCURRENT)
class NamespaceInfoLookupTest {
private static final String URI_1 = "http://gs.test.com/ns1";
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/PropertyDiffTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/PropertyDiffTest.java
index 0ae96ec8b..2fb9e6bed 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/PropertyDiffTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/PropertyDiffTest.java
@@ -28,7 +28,10 @@
import org.geotools.util.SimpleInternationalString;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class PropertyDiffTest {
private PropertyDiffTestSupport support = new PropertyDiffTestSupport();
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/XmlCatalogInfoLookupConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/XmlCatalogInfoLookupConformanceTest.java
index 6e25cceaf..d8dc2d743 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/XmlCatalogInfoLookupConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/XmlCatalogInfoLookupConformanceTest.java
@@ -17,7 +17,10 @@
import org.geoserver.platform.GeoServerResourceLoader;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class XmlCatalogInfoLookupConformanceTest extends CatalogConformanceTest {
@Override
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockProviderGeoServerConfigurationLockTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockProviderGeoServerConfigurationLockTest.java
index 65e86e66c..b47fbad98 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockProviderGeoServerConfigurationLockTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockProviderGeoServerConfigurationLockTest.java
@@ -27,8 +27,11 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** @since 1.0 */
+@Execution(value = ExecutionMode.SAME_THREAD)
class LockProviderGeoServerConfigurationLockTest {
@TempDir
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogDataDirectoryTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogDataDirectoryTest.java
index b56ddefc2..3dc063229 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogDataDirectoryTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogDataDirectoryTest.java
@@ -12,8 +12,11 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** @since 1.0 */
+@Execution(value = ExecutionMode.SAME_THREAD)
class LockingCatalogDataDirectoryTest extends LockingCatalogTest {
@TempDir
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogTest.java
index 8e07c779a..5da40cdfc 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/locking/LockingCatalogTest.java
@@ -32,8 +32,11 @@
import org.geoserver.config.plugin.GeoServerImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** @since 1.0 */
+@Execution(ExecutionMode.CONCURRENT)
class LockingCatalogTest {
private GeoServerConfigurationLock configLock;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/resolving/CatalogPropertyResolverTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/resolving/CatalogPropertyResolverTest.java
index 3eff5c469..b7a9daea4 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/resolving/CatalogPropertyResolverTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/resolving/CatalogPropertyResolverTest.java
@@ -35,7 +35,10 @@
import org.geoserver.config.plugin.GeoServerImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class CatalogPropertyResolverTest {
CatalogTestData testData;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/validation/BeforeRemoveValidatorTest.java b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/validation/BeforeRemoveValidatorTest.java
index 452b2efdc..b61de8416 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/validation/BeforeRemoveValidatorTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/catalog/plugin/validation/BeforeRemoveValidatorTest.java
@@ -18,7 +18,10 @@
import org.geoserver.config.plugin.GeoServerImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class BeforeRemoveValidatorTest {
Catalog catalog;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/config/impl/CatalogImplConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/config/impl/CatalogImplConformanceTest.java
index 310dbed3c..991a0cfcb 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/config/impl/CatalogImplConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/config/impl/CatalogImplConformanceTest.java
@@ -11,8 +11,11 @@
import org.geoserver.catalog.plugin.CatalogConformanceTest;
import org.geoserver.config.GeoServerResourcePersister;
import org.geoserver.platform.GeoServerResourceLoader;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** {@link CatalogConformanceTest} for the traditional {@link CatalogImpl} with {@link DefaultCatalogFacade} */
+@Execution(ExecutionMode.CONCURRENT)
class CatalogImplConformanceTest extends CatalogConformanceTest {
protected @Override CatalogImpl createCatalog(File tmpFolder) {
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/config/impl/GeoServerImplConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/config/impl/GeoServerImplConformanceTest.java
index d5acfaeb3..d191fc76f 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/config/impl/GeoServerImplConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/config/impl/GeoServerImplConformanceTest.java
@@ -8,8 +8,11 @@
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerConfigConformanceTest;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** {@link GeoServerConfigConformanceTest} for the traditional {@link GeoServerImpl} */
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerImplConformanceTest extends GeoServerConfigConformanceTest {
protected @Override GeoServer createGeoServer() {
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/GeoServerImplConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/GeoServerImplConformanceTest.java
index 7de7b2e24..4d9aba94f 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/GeoServerImplConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/GeoServerImplConformanceTest.java
@@ -8,11 +8,14 @@
import org.geoserver.catalog.plugin.CatalogPlugin;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerConfigConformanceTest;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/**
* {@link GeoServerConfigConformanceTest} for {@link GeoServerImpl} with {@link RepositoryGeoServerFacade} backed by
* {@link MemoryConfigRepository} and a {@link CatalogPlugin}
*/
+@Execution(ExecutionMode.CONCURRENT)
class GeoServerImplConformanceTest extends GeoServerConfigConformanceTest {
protected @Override GeoServer createGeoServer() {
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/XmlSerializedConfigRepositoryConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/XmlSerializedConfigRepositoryConformanceTest.java
index 6fce91a44..1e27b7421 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/XmlSerializedConfigRepositoryConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/config/plugin/XmlSerializedConfigRepositoryConformanceTest.java
@@ -15,7 +15,10 @@
import org.geoserver.config.GeoServerConfigConformanceTest;
import org.geoserver.config.util.XStreamPersister;
import org.geoserver.config.util.XStreamPersisterFactory;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+@Execution(ExecutionMode.CONCURRENT)
class XmlSerializedConfigRepositoryConformanceTest extends GeoServerConfigConformanceTest {
protected @Override GeoServer createGeoServer() {
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/platform/config/DefaultUpdateSequenceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/platform/config/DefaultUpdateSequenceTest.java
index 048225c28..a9feee4f4 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/platform/config/DefaultUpdateSequenceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/platform/config/DefaultUpdateSequenceTest.java
@@ -9,8 +9,11 @@
import org.geoserver.config.impl.GeoServerInfoImpl;
import org.geoserver.config.plugin.GeoServerImpl;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
/** @since 1.2 */
+@Execution(ExecutionMode.CONCURRENT)
class DefaultUpdateSequenceTest implements UpdateSequenceConformanceTest {
GeoServer gs;
diff --git a/src/catalog/plugin/src/test/java/org/geoserver/platform/config/UpdateSequenceConformanceTest.java b/src/catalog/plugin/src/test/java/org/geoserver/platform/config/UpdateSequenceConformanceTest.java
index 920811ecc..0998a9637 100644
--- a/src/catalog/plugin/src/test/java/org/geoserver/platform/config/UpdateSequenceConformanceTest.java
+++ b/src/catalog/plugin/src/test/java/org/geoserver/platform/config/UpdateSequenceConformanceTest.java
@@ -42,7 +42,7 @@ public interface UpdateSequenceConformanceTest {
final long initial = updateSequence.currValue();
final long expected = initial + incrementCount;
- IntStream.range(0, incrementCount).parallel().forEach(i -> updateSequence.nextValue());
+ IntStream.range(0, incrementCount).parallel().forEach(_ -> updateSequence.nextValue());
long v = updateSequence.currValue();
assertEquals(expected, v);
diff --git a/src/catalog/plugin/src/test/resources/junit-platform.properties b/src/catalog/plugin/src/test/resources/junit-platform.properties
new file mode 100644
index 000000000..2115a2f13
--- /dev/null
+++ b/src/catalog/plugin/src/test/resources/junit-platform.properties
@@ -0,0 +1 @@
+junit.jupiter.execution.parallel.enabled = true
diff --git a/src/catalog/pom.xml b/src/catalog/pom.xml
index 1ad466b30..e88038551 100644
--- a/src/catalog/pom.xml
+++ b/src/catalog/pom.xml
@@ -13,6 +13,7 @@
plugin
events
+ events-tests
cache
jackson-bindings
backends
diff --git a/src/extensions/security/geoserver-acl/src/test/java/org/geoserver/cloud/autoconfigure/extensions/security/acl/AclExtensionAutoConfigurationTest.java b/src/extensions/security/geoserver-acl/src/test/java/org/geoserver/cloud/autoconfigure/extensions/security/acl/AclExtensionAutoConfigurationTest.java
index f1964bbf8..c139fa268 100644
--- a/src/extensions/security/geoserver-acl/src/test/java/org/geoserver/cloud/autoconfigure/extensions/security/acl/AclExtensionAutoConfigurationTest.java
+++ b/src/extensions/security/geoserver-acl/src/test/java/org/geoserver/cloud/autoconfigure/extensions/security/acl/AclExtensionAutoConfigurationTest.java
@@ -55,7 +55,7 @@
*
* @since 2.27.0.0
*/
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class AclExtensionAutoConfigurationTest {
private ApplicationContextRunner runner;
diff --git a/src/gwc/backends/pgconfig/src/test/java/org/geoserver/cloud/gwc/backend/pgconfig/PgconfigTileLayerCatalogIT.java b/src/gwc/backends/pgconfig/src/test/java/org/geoserver/cloud/gwc/backend/pgconfig/PgconfigTileLayerCatalogIT.java
index dbeea2c2f..edcb9460f 100644
--- a/src/gwc/backends/pgconfig/src/test/java/org/geoserver/cloud/gwc/backend/pgconfig/PgconfigTileLayerCatalogIT.java
+++ b/src/gwc/backends/pgconfig/src/test/java/org/geoserver/cloud/gwc/backend/pgconfig/PgconfigTileLayerCatalogIT.java
@@ -45,7 +45,7 @@
/** @since 1.7 */
@Testcontainers(disabledWithoutDocker = true)
-@Execution(value = ExecutionMode.CONCURRENT)
+@Execution(ExecutionMode.CONCURRENT)
class PgconfigTileLayerCatalogIT {
@Container
diff --git a/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main/XstreamServiceLoadersAutoConfiguration.java b/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main/XstreamServiceLoadersAutoConfiguration.java
index 52435c41c..4256436e3 100644
--- a/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main/XstreamServiceLoadersAutoConfiguration.java
+++ b/src/main/src/main/java/org/geoserver/cloud/autoconfigure/main/XstreamServiceLoadersAutoConfiguration.java
@@ -33,8 +33,6 @@
@Slf4j(topic = "org.geoserver.cloud.config.catalog")
public class XstreamServiceLoadersAutoConfiguration {
- private static final String CONTRIBUTING_MSG = "Automatically contributing {}";
-
@ConditionalOnMissingBean(WFSXStreamLoader.class)
@Bean
WFSXStreamLoader wfsLoader(GeoServerResourceLoader resourceLoader) {
@@ -104,6 +102,6 @@ private T log(T extension) {
}
private void log(Class extends Object> extensionType) {
- log.info(CONTRIBUTING_MSG, extensionType.getSimpleName());
+ log.debug("Automatically contributing {}", extensionType.getSimpleName());
}
}