Skip to content

Commit

Permalink
Avoid log flooding with exceptions on catalog events tests
Browse files Browse the repository at this point in the history
Catalog events tests are not running off a full GeoServer instance, and
the GeoServerLoader is trying to find unavailable service loaders,
resulting in unnecessary log flooding.
  • Loading branch information
groldan authored and github-actions[bot] committed Jan 27, 2025
1 parent e51e153 commit b6d9ef8
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
*/
package org.geoserver.cloud.autoconfigure.catalog.backend.core;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.ResourcePool;
import org.geoserver.catalog.plugin.CatalogPlugin;
import org.geoserver.cloud.autoconfigure.catalog.event.ConditionalOnCatalogEvents;
import org.geoserver.cloud.event.info.InfoEvent;
import org.geoserver.cloud.event.remote.resourcepool.RemoteEventResourcePoolProcessor;
Expand All @@ -25,8 +25,7 @@
public class RemoteEventResourcePoolCleanupUpAutoConfiguration {

@Bean
RemoteEventResourcePoolProcessor remoteEventResourcePoolProcessor(
@Qualifier("rawCatalog") CatalogPlugin rawCatalog) {
RemoteEventResourcePoolProcessor remoteEventResourcePoolProcessor(@Qualifier("rawCatalog") Catalog rawCatalog) {

return new RemoteEventResourcePoolProcessor(rawCatalog);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@

import static org.assertj.core.api.Assertions.assertThat;

import org.geoserver.catalog.plugin.CatalogPlugin;
import org.geoserver.catalog.Catalog;
import org.geoserver.cloud.event.info.InfoEvent;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;

class RemoteEventResourcePoolCleanupUpAutoConfigurationTest {

private final ApplicationContextRunner runner = new ApplicationContextRunner()
.withBean("rawCatalog", CatalogPlugin.class)
.withBean("rawCatalog", Catalog.class, () -> Mockito.mock(Catalog.class))
.withConfiguration(AutoConfigurations.of(RemoteEventResourcePoolCleanupUpAutoConfiguration.class));

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import java.io.File;
import java.util.List;
import lombok.SneakyThrows;
import org.geoserver.catalog.Catalog;
import org.geoserver.cloud.config.factory.FilteringXmlBeanDefinitionReader;
import org.geoserver.cloud.security.CloudGeoServerSecurityManager;
Expand All @@ -20,6 +21,9 @@
import org.geoserver.platform.config.UpdateSequence;
import org.geoserver.platform.resource.FileSystemResourceStore;
import org.geoserver.platform.resource.ResourceStore;
import org.geoserver.security.ResourceAccessManager;
import org.geoserver.security.SecureCatalogImpl;
import org.geoserver.security.TestResourceAccessManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
Expand All @@ -46,8 +50,11 @@ void setUp() {
runner = createContextRunner(tempDir);
}

@SneakyThrows(Exception.class)
static ApplicationContextRunner createContextRunner(File tempDir) {
Catalog catalog = mock(Catalog.class);
Catalog rawCatalog = mock(Catalog.class);
ResourceAccessManager resourceAccessManager = new TestResourceAccessManager();
SecureCatalogImpl secureCatalog = new SecureCatalogImpl(rawCatalog, resourceAccessManager);
GeoServer geoserver = mock(GeoServer.class);
ResourceStore resourceStore = new FileSystemResourceStore(tempDir);
GeoServerResourceLoader resourceLoader = new GeoServerResourceLoader(resourceStore);
Expand All @@ -60,8 +67,9 @@ static ApplicationContextRunner createContextRunner(File tempDir) {
.withBean(ResourceStore.class, () -> resourceStore)
.withBean(GeoServerResourceLoader.class, () -> resourceLoader)
.withBean("dataDirectory", GeoServerDataDirectory.class, () -> datadir)
.withBean("catalog", Catalog.class, () -> catalog)
.withBean("rawCatalog", Catalog.class, () -> catalog)
.withBean("rawCatalog", Catalog.class, () -> rawCatalog)
.withBean("catalog", Catalog.class, () -> secureCatalog)
.withBean("secureCatalog", Catalog.class, () -> secureCatalog)
.withBean("geoServer", GeoServer.class, () -> geoserver)
.withBean("updateSequence", UpdateSequence.class, () -> updateSequence)
.withPropertyValues("logging.level.org.geoserver.platform: off");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,57 @@
*/
package org.geoserver.cloud.event.bus;

import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Optional;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.plugin.CatalogPlugin;
import org.geoserver.config.ConfigurationListener;
import org.geoserver.config.DefaultGeoServerLoader;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerConfigPersister;
import org.geoserver.config.GeoServerLoader;
import org.geoserver.config.ServicePersister;
import org.geoserver.config.plugin.GeoServerImpl;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.platform.config.DefaultUpdateSequence;
import org.geoserver.platform.config.UpdateSequence;
import org.geoserver.util.IOUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextClosedEvent;

@EnableAutoConfiguration
@SpringBootConfiguration
public class TestConfigurationAutoConfiguration {
public class TestConfigurationAutoConfiguration implements InitializingBean, ApplicationListener<ContextClosedEvent> {

private File tmpDir;

@Override
public void afterPropertiesSet() throws Exception {
this.tmpDir = java.nio.file.Files.createTempDirectory("gs").toFile();
}

@Override
public void onApplicationEvent(ContextClosedEvent event) {
try {
IOUtils.delete(tmpDir, true);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}

@Bean
GeoServerResourceLoader geoServerResourceLoader() {
return new GeoServerResourceLoader(tmpDir);
}

@Bean
UpdateSequence testUpdateSequence(GeoServer gs) {
Expand All @@ -34,8 +67,9 @@ XStreamPersisterFactory xStreamPersisterFactory() {
}

@Bean(name = {"catalog", "rawCatalog"})
public Catalog catalog() {
return new CatalogPlugin(false);
Catalog catalog() {
final boolean isolated = false;
return new CatalogPlugin(isolated);
}

@Bean
Expand All @@ -46,8 +80,8 @@ GeoServer geoServer(@Qualifier("catalog") Catalog catalog) {
}

@Bean
GeoServerResourceLoader geoServerResourceLoader() {
return new GeoServerResourceLoader();
GeoServerExtensions geoserverExtensions() {
return new GeoServerExtensions();
}

@Bean
Expand All @@ -56,6 +90,19 @@ GeoServerLoader geoserverLoader(
@Qualifier("geoServerResourceLoader") GeoServerResourceLoader geoServerResourceLoader) {
DefaultGeoServerLoader loader = new DefaultGeoServerLoader(geoServerResourceLoader);
loader.postProcessBeforeInitialization(geoServer, "geoserver");

removeListener(geoServer, ServicePersister.class);
removeListener(geoServer, GeoServerConfigPersister.class);

return loader;
}

private void removeListener(GeoServer geoServer, Class<? extends ConfigurationListener> type) {
Optional<ConfigurationListener> listener =
geoServer.getListeners().stream().filter(type::isInstance).findFirst();

if (listener.isPresent()) {
geoServer.removeListener(listener.orElseThrow());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,57 @@
*/
package org.geoserver.cloud.config.catalog.events;

import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.Optional;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.plugin.CatalogPlugin;
import org.geoserver.config.ConfigurationListener;
import org.geoserver.config.DefaultGeoServerLoader;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerConfigPersister;
import org.geoserver.config.GeoServerLoader;
import org.geoserver.config.ServicePersister;
import org.geoserver.config.plugin.GeoServerImpl;
import org.geoserver.config.util.XStreamPersisterFactory;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.platform.config.DefaultUpdateSequence;
import org.geoserver.platform.config.UpdateSequence;
import org.geoserver.util.IOUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.event.ContextClosedEvent;

@EnableAutoConfiguration
@SpringBootConfiguration
class TestConfigurationAutoConfiguration {
public class TestConfigurationAutoConfiguration implements InitializingBean, ApplicationListener<ContextClosedEvent> {

private File tmpDir;

@Override
public void afterPropertiesSet() throws Exception {
this.tmpDir = java.nio.file.Files.createTempDirectory("gs").toFile();
}

@Override
public void onApplicationEvent(ContextClosedEvent event) {
try {
IOUtils.delete(tmpDir, true);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}

@Bean
GeoServerResourceLoader geoServerResourceLoader() {
return new GeoServerResourceLoader(tmpDir);
}

@Bean
UpdateSequence testUpdateSequence(GeoServer gs) {
Expand All @@ -35,7 +67,7 @@ XStreamPersisterFactory xStreamPersisterFactory() {
}

@Bean(name = {"catalog", "rawCatalog"})
public Catalog catalog() {
Catalog catalog() {
final boolean isolated = false;
return new CatalogPlugin(isolated);
}
Expand All @@ -52,17 +84,25 @@ GeoServerExtensions geoserverExtensions() {
return new GeoServerExtensions();
}

@Bean
GeoServerResourceLoader geoServerResourceLoader() {
return new GeoServerResourceLoader();
}

@Bean
GeoServerLoader geoserverLoader(
@Qualifier("geoServer") GeoServer geoServer,
@Qualifier("geoServerResourceLoader") GeoServerResourceLoader geoServerResourceLoader) {
DefaultGeoServerLoader loader = new DefaultGeoServerLoader(geoServerResourceLoader);
loader.postProcessBeforeInitialization(geoServer, "geoserver");

removeListener(geoServer, ServicePersister.class);
removeListener(geoServer, GeoServerConfigPersister.class);

return loader;
}

private void removeListener(GeoServer geoServer, Class<? extends ConfigurationListener> type) {
Optional<ConfigurationListener> listener =
geoServer.getListeners().stream().filter(type::isInstance).findFirst();

if (listener.isPresent()) {
geoServer.removeListener(listener.orElseThrow());
}
}
}

0 comments on commit b6d9ef8

Please sign in to comment.