Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@
<excludes>
<exclude>**/logback-test.xml</exclude>
<exclude>logback-test.xml</exclude>
<exclude>junit-platform.properties</exclude>
</excludes>
<skipIfEmpty>true</skipIfEmpty>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
* @since 3.0.0
*/
@SuppressWarnings("java:S5976")
@Execution(value = ExecutionMode.CONCURRENT)
@Execution(ExecutionMode.CONCURRENT)
class TranspileXmlConfigAnnotationProcessorMethodGenerationTest {

@TempDir
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
*
* @since 3.0.0
*/
@Execution(value = ExecutionMode.CONCURRENT)
@Execution(ExecutionMode.CONCURRENT)
class TranspileXmlConfigAnnotationProcessorTest {

private Compiler compilerWithProcessor() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
*
* @see LockProvider
*/
public class ChainedLockProvider implements LockProvider {
class ChainedLockProvider implements LockProvider {

private static final Logger LOGGER = Logging.getLogger(ChainedLockProvider.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,48 +20,60 @@
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;

/**
* 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -46,6 +56,6 @@ public UpdateSequence getUpdataSequence() {

@Override
public GeoServer getGeoSever() {
return geoserver;
return geoServer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,55 +22,56 @@
*/
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);
});
}

@Test
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);
});
}

@Test
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);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class EventualConsistencyEnforcerTest {

@BeforeEach
void before() {
GeoServerExtensionsHelper.init(null);
catalog = new CatalogPlugin();
geoserver = new GeoServerImpl();
geoserver.setCatalog(catalog);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ class ChainedLockProviderTest {
@Test
void acquiresBothLocksInOrder() {
List<String> 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");
};
Expand All @@ -40,11 +40,11 @@ void acquiresBothLocksInOrder() {
@Test
void releasesFirstLockIfSecondFails() {
List<String> 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");
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,22 @@
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();
lock.release();
}

@Test
void createsLockFileAndDirectory() {
void createsLockFileAndDirectory(@TempDir File tempDir) {
new DistributedFileLockProvider(tempDir);
File locksDir = new File(tempDir, ".filelocks");
assertThat(locksDir).isDirectory();
Expand All @@ -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();
Expand All @@ -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");
Expand All @@ -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");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
* @since 1.4
*/
@Testcontainers(disabledWithoutDocker = true)
@Execution(value = ExecutionMode.CONCURRENT)
@Execution(ExecutionMode.CONCURRENT)
class PgconfigBackendAutoConfigurationTest {

@Container
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
*/
@Testcontainers(disabledWithoutDocker = true)
@Slf4j
@Execution(value = ExecutionMode.CONCURRENT)
@Execution(ExecutionMode.CONCURRENT)
class PgconfigDataSourceAutoConfigurationTest {

@Container
Expand Down
Loading
Loading