diff --git a/src/apps/geoserver/pom.xml b/src/apps/geoserver/pom.xml index 4729ee95d..837bf79df 100644 --- a/src/apps/geoserver/pom.xml +++ b/src/apps/geoserver/pom.xml @@ -67,5 +67,20 @@ spring-boot-starter-test test + + org.testcontainers + junit-jupiter + test + + + org.xmlunit + xmlunit-matchers + test + + + org.xmlunit + xmlunit-assertj3 + test + diff --git a/src/apps/geoserver/wcs/src/test/java/org/geoserver/cloud/wcs/WcsApplicationTest.java b/src/apps/geoserver/wcs/src/test/java/org/geoserver/cloud/wcs/WcsApplicationTest.java index 7c13217e5..656a9568a 100644 --- a/src/apps/geoserver/wcs/src/test/java/org/geoserver/cloud/wcs/WcsApplicationTest.java +++ b/src/apps/geoserver/wcs/src/test/java/org/geoserver/cloud/wcs/WcsApplicationTest.java @@ -4,14 +4,123 @@ */ package org.geoserver.cloud.wcs; +import static org.assertj.core.api.Assertions.assertThat; + import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.ActiveProfiles; +import java.util.stream.Stream; + @SpringBootTest @ActiveProfiles("test") class WcsApplicationTest { + protected @Autowired ConfigurableApplicationContext context; + + @Test + void testWcsCoreBeans() { + expectBean("legacyWcsLoader", org.geoserver.wcs.WCSLoader.class); + expectBean("wcsLoader", org.geoserver.wcs.WCSXStreamLoader.class); + expectBean("wcsFactoryExtension", org.geoserver.wcs.WCSFactoryExtension.class); + expectBean("wcsURLMapping", org.geoserver.ows.OWSHandlerMapping.class); + expectBean("wcsLocalWorkspaceURLManger", org.geoserver.ows.LocalWorkspaceURLMangler.class); + expectBean("cqlKvpParser", org.geoserver.ows.kvp.CQLFilterKvpParser.class); + expectBean( + "coverageResponseDelegateFactory", + org.geoserver.wcs.responses.CoverageResponseDelegateFinder.class); + expectBean( + "geotiffCoverageResponseDelegate", + org.geoserver.wcs.responses.GeoTIFFCoverageResponseDelegate.class); + expectBean( + "imgCoverageResponseDelegate", + org.geoserver.wcs.responses.IMGCoverageResponseDelegate.class); + expectBean( + "debugCoverageResponseDelegate", + org.geoserver.wcs.responses.DebugCoverageResponseDelegate.class); + expectBean("coverageCleaner", org.geoserver.wcs.CoverageCleanerCallback.class); + expectBean("wcsResourceVoter", org.geoserver.wcs.WCSResourceVoter.class); + expectBean("legacyWcsLoader", org.geoserver.wcs.WCSLoader.class); + expectBean("wcsLoader", org.geoserver.wcs.WCSXStreamLoader.class); + expectBean("wcsFactoryExtension", org.geoserver.wcs.WCSFactoryExtension.class); + expectBean("wcsURLMapping", org.geoserver.ows.OWSHandlerMapping.class); + expectBean("wcsLocalWorkspaceURLManger", org.geoserver.ows.LocalWorkspaceURLMangler.class); + expectBean("cqlKvpParser", org.geoserver.ows.kvp.CQLFilterKvpParser.class); + expectBean( + "coverageResponseDelegateFactory", + org.geoserver.wcs.responses.CoverageResponseDelegateFinder.class); + expectBean( + "geotiffCoverageResponseDelegate", + org.geoserver.wcs.responses.GeoTIFFCoverageResponseDelegate.class); + expectBean( + "imgCoverageResponseDelegate", + org.geoserver.wcs.responses.IMGCoverageResponseDelegate.class); + expectBean( + "debugCoverageResponseDelegate", + org.geoserver.wcs.responses.DebugCoverageResponseDelegate.class); + expectBean("coverageCleaner", org.geoserver.wcs.CoverageCleanerCallback.class); + expectBean("wcsResourceVoter", org.geoserver.wcs.WCSResourceVoter.class); + } @Test - void contextLoads() {} + void testBeansWcs_1_0() { + expectBeans( + "wcs100ServiceTarget", + "wcsLogger", + "wcs100Service", + "wcsService-1.0.0", + "wcs100ExceptionHandler", + "wcs100AxisSubsetKvpParser", + "wcs100BBoxKvpParser", + "wcs100InterpolationKvpParser", + "wcs100CoverageKvpParser", + "wcs100SourceCoverageKvpParser", + "wcs100SectionKvpParser", + "wcs100TimeKvpParser", + "wcs100ElevationKvpParser", + "wcs100GetCapabilitiesKvpReader", + "wcs100DescribeCoverageKvpReader", + "wcs100GetCoverageRequestReader", + "wcs-1.0.0-configuration", + "wcs100CapabilitiesRequestReader", + "wcs100DescribeCoverageRequestReader", + "wcs100GetCoverageRequestXMLReader", + "wcs100GetCapabilitiesResponse", + "wcs100DescribeCoverageResponse", + "wcs100GetCoverageResponse", + "workspaceQualifier", + "wcs100ServiceTarget", + "wcsLogger", + "wcs100Service", + "wcsService-1.0.0", + "wcs100ExceptionHandler", + "wcs100AxisSubsetKvpParser", + "wcs100BBoxKvpParser", + "wcs100InterpolationKvpParser", + "wcs100CoverageKvpParser", + "wcs100SourceCoverageKvpParser", + "wcs100SectionKvpParser", + "wcs100TimeKvpParser", + "wcs100ElevationKvpParser", + "wcs100GetCapabilitiesKvpReader", + "wcs100DescribeCoverageKvpReader", + "wcs100GetCoverageRequestReader", + "wcs-1.0.0-configuration", + "wcs100CapabilitiesRequestReader", + "wcs100DescribeCoverageRequestReader", + "wcs100GetCoverageRequestXMLReader", + "wcs100GetCapabilitiesResponse", + "wcs100DescribeCoverageResponse", + "wcs100GetCoverageResponse", + "workspaceQualifier"); + } + + protected void expectBeans(String... names) { + Stream.of(names).forEach(name -> assertThat(context.getBean(name)).isNotNull()); + } + + protected void expectBean(String name, Class type) { + assertThat(context.getBean(name)).isInstanceOf(type); + } } diff --git a/src/apps/geoserver/wfs/src/main/resources/bootstrap.yml b/src/apps/geoserver/wfs/src/main/resources/bootstrap.yml index 0058360d1..bcd10bd4f 100644 --- a/src/apps/geoserver/wfs/src/main/resources/bootstrap.yml +++ b/src/apps/geoserver/wfs/src/main/resources/bootstrap.yml @@ -30,6 +30,7 @@ spring: name: wfs-service autoconfigure: exclude: + - org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration - org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration diff --git a/src/apps/geoserver/wfs/src/test/java/org/geoserver/cloud/wfs/app/WfsApplicationTest.java b/src/apps/geoserver/wfs/src/test/java/org/geoserver/cloud/wfs/app/WfsApplicationTest.java index 578e75766..5acba2725 100644 --- a/src/apps/geoserver/wfs/src/test/java/org/geoserver/cloud/wfs/app/WfsApplicationTest.java +++ b/src/apps/geoserver/wfs/src/test/java/org/geoserver/cloud/wfs/app/WfsApplicationTest.java @@ -5,15 +5,57 @@ package org.geoserver.cloud.wfs.app; import org.junit.jupiter.api.Test; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.junit.jupiter.api.io.TempDir; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.xmlunit.assertj3.XmlAssert; -@SpringBootTest -@EnableAutoConfiguration +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; + +@SpringBootTest(classes = WfsApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") class WfsApplicationTest { + static @TempDir Path tmpdir; + static Path datadir; + + @DynamicPropertySource + static void setUpDataDir(DynamicPropertyRegistry registry) throws IOException { + datadir = Files.createDirectory(tmpdir.resolve("datadir")); + registry.add("geoserver.backend.data-directory.location", datadir::toAbsolutePath); + } + + private TestRestTemplate restTemplate = new TestRestTemplate("admin", "geoserver"); + + @Test + void owsGetCapabilitiesSmokeTest(@LocalServerPort int servicePort) { + String url = + "http://localhost:%d/ows?SERVICE=WFS&REQUEST=GETCAPABILITIES&VERSION=1.1.0" + .formatted(servicePort); + String caps = restTemplate.getForObject(url, String.class); + Map nscontext = Map.of("wfs", "http://www.opengis.net/wfs"); + XmlAssert.assertThat(caps) + .withNamespaceContext(nscontext) + .hasXPath("/wfs:WFS_Capabilities"); + } + @Test - void contextLoads() {} + void wfsGetCapabilitiesSmokeTest(@LocalServerPort int servicePort) { + String url = + "http://localhost:%d/wfs?SERVICE=WFS&REQUEST=GETCAPABILITIES&VERSION=1.1.0" + .formatted(servicePort); + String caps = restTemplate.getForObject(url, String.class); + Map nscontext = Map.of("wfs", "http://www.opengis.net/wfs"); + XmlAssert.assertThat(caps) + .withNamespaceContext(nscontext) + .hasXPath("/wfs:WFS_Capabilities"); + } } diff --git a/src/apps/geoserver/wfs/src/test/resources/bootstrap-test.yml b/src/apps/geoserver/wfs/src/test/resources/bootstrap-test.yml index 2e0d739a3..98d7bd758 100644 --- a/src/apps/geoserver/wfs/src/test/resources/bootstrap-test.yml +++ b/src/apps/geoserver/wfs/src/test/resources/bootstrap-test.yml @@ -3,6 +3,7 @@ spring: banner-mode: off allow-bean-definition-overriding: true allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization + cloud.bus.enabled: false cloud.config.enabled: false cloud.config.discovery.enabled: false cloud.discovery.enabled: false diff --git a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/KMLAutoConfigurationTest.java b/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/KMLAutoConfigurationTest.java deleted file mode 100644 index 6f0f9ff50..000000000 --- a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/KMLAutoConfigurationTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the - * GPL 2.0 license, available at the root application directory. - */ -package org.geoserver.cloud.wms.app; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.geoserver.cloud.wms.controller.kml.KMLIconsController; -import org.geoserver.cloud.wms.controller.kml.KMLReflectorController; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.test.context.ActiveProfiles; - -/** - * @since 1.0 - */ -@SpringBootTest -@ActiveProfiles({"test", "testdatadir"}) -class KMLAutoConfigurationTest { - - private @Autowired ConfigurableApplicationContext context; - - /** - * @throws java.lang.Exception - */ - @BeforeEach - void setUp() throws Exception {} - - @Test - void testControllers() { - expecteBean("kmlIconsController", KMLIconsController.class); - expecteBean("kmlReflectorController", KMLReflectorController.class); - } - - private void expecteBean(String name, Class type) { - assertThat(context.getBean(name)).isInstanceOf(type); - } -} diff --git a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationDataDirectoryTest.java b/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationDataDirectoryTest.java index 9ed44098b..6a61d32ac 100644 --- a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationDataDirectoryTest.java +++ b/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationDataDirectoryTest.java @@ -4,25 +4,55 @@ */ package org.geoserver.cloud.wms.app; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; +import org.xmlunit.assertj3.XmlAssert; -import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; -/** See {@code src/test/resources/bootstrap-testdatadir.yml} */ -@SpringBootTest(properties = "gwc.wms-integration=true") -@ActiveProfiles({"test", "testdatadir"}) +@SpringBootTest( + classes = WmsApplication.class, + webEnvironment = WebEnvironment.RANDOM_PORT, + properties = {"geoserver.backend.data-directory.enabled=true", "gwc.wms-integration=true"}) +@ActiveProfiles({"test"}) class WmsApplicationDataDirectoryTest extends WmsApplicationTest { - private static @TempDir File tmpDataDir; + static @TempDir Path tmpdir; + static Path datadir; @DynamicPropertySource - static void registerPgProperties(DynamicPropertyRegistry registry) { - String datadir = tmpDataDir.getAbsolutePath(); - registry.add("data_directory", () -> datadir); - registry.add("gwc.wms-integration", () -> "true"); + static void setUpDataDir(DynamicPropertyRegistry registry) throws IOException { + datadir = Files.createDirectory(tmpdir.resolve("datadir")); + registry.add("geoserver.backend.data-directory.location", datadir::toAbsolutePath); + } + + private String baseURL; + + private TestRestTemplate restTemplate = new TestRestTemplate("admin", "geoserver"); + + @BeforeEach + void setUp(@LocalServerPort int servicePort) { + baseURL = "http://localhost:%d/ows".formatted(servicePort); + } + + @Test + void getCapabilitiesSmokeTest() { + String url = baseURL + "?SERVICE=WMS&REQUEST=GETCAPABILITIES&VERSION=1.3.0"; + String caps = restTemplate.getForObject(url, String.class); + Map nscontext = Map.of("wms", "http://www.opengis.net/wms"); + XmlAssert.assertThat(caps) + .withNamespaceContext(nscontext) + .hasXPath("/wms:WMS_Capabilities"); } } diff --git a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationTest.java b/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationTest.java index 81cb02b8b..b707f63e6 100644 --- a/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationTest.java +++ b/src/apps/geoserver/wms/src/test/java/org/geoserver/cloud/wms/app/WmsApplicationTest.java @@ -10,6 +10,8 @@ import org.geoserver.cloud.virtualservice.VirtualServiceVerifier; import org.geoserver.cloud.wms.controller.GetMapReflectorController; import org.geoserver.cloud.wms.controller.WMSController; +import org.geoserver.cloud.wms.controller.kml.KMLIconsController; +import org.geoserver.cloud.wms.controller.kml.KMLReflectorController; import org.geoserver.gwc.wms.CachingExtendedCapabilitiesProvider; import org.geoserver.ows.FlatKvpParser; import org.geoserver.ows.kvp.CQLFilterKvpParser; @@ -28,53 +30,58 @@ abstract class WmsApplicationTest { @Test void testExpectedBeansFromWmsApplicationAutoConfiguration() { - expecteBean("wfsConfiguration", WFSConfiguration.class); - expecteBean("webMapServiceController", WMSController.class); - expecteBean("virtualServiceVerifier", VirtualServiceVerifier.class); - expecteBean("getMapReflectorController", GetMapReflectorController.class); - expecteBean( + expectBean("wfsConfiguration", WFSConfiguration.class); + expectBean("webMapServiceController", WMSController.class); + expectBean("virtualServiceVerifier", VirtualServiceVerifier.class); + expectBean("getMapReflectorController", GetMapReflectorController.class); + expectBean( "wms_1_1_1_GetCapabilitiesResponse", org.geoserver.wms.capabilities.GetCapabilitiesResponse.class); } @Test void testExpectedBeansFromGsWfsJarFile() { - expecteBean("bboxKvpParser", BBoxKvpParser.class); - expecteBean("featureIdKvpParser", FlatKvpParser.class); - expecteBean("cqlKvpParser", CQLFilterKvpParser.class); - expecteBean("maxFeatureKvpParser", NumericKvpParser.class); - expecteBean("sortByKvpParser", SortByKvpParser.class); - expecteBean("wfsSqlViewKvpParser", ViewParamsKvpParser.class); + expectBean("bboxKvpParser", BBoxKvpParser.class); + expectBean("featureIdKvpParser", FlatKvpParser.class); + expectBean("cqlKvpParser", CQLFilterKvpParser.class); + expectBean("maxFeatureKvpParser", NumericKvpParser.class); + expectBean("sortByKvpParser", SortByKvpParser.class); + expectBean("wfsSqlViewKvpParser", ViewParamsKvpParser.class); - expecteBean("wfsXsd-1.0", org.geoserver.wfs.xml.v1_0_0.WFS.class); - expecteBean("wfsXmlConfiguration-1.0", org.geoserver.wfs.xml.v1_0_0.WFSConfiguration.class); + expectBean("wfsXsd-1.0", org.geoserver.wfs.xml.v1_0_0.WFS.class); + expectBean("wfsXmlConfiguration-1.0", org.geoserver.wfs.xml.v1_0_0.WFSConfiguration.class); - expecteBean("wfsXsd-1.1", org.geoserver.wfs.xml.v1_1_0.WFS.class); - expecteBean("wfsXmlConfiguration-1.1", org.geoserver.wfs.xml.v1_1_0.WFSConfiguration.class); + expectBean("wfsXsd-1.1", org.geoserver.wfs.xml.v1_1_0.WFS.class); + expectBean("wfsXmlConfiguration-1.1", org.geoserver.wfs.xml.v1_1_0.WFSConfiguration.class); - expecteBean("wfsXsd-1.0", org.geoserver.wfs.xml.v1_0_0.WFS.class); - expecteBean("wfsXmlConfiguration-1.0", org.geoserver.wfs.xml.v1_0_0.WFSConfiguration.class); + expectBean("wfsXsd-1.0", org.geoserver.wfs.xml.v1_0_0.WFS.class); + expectBean("wfsXmlConfiguration-1.0", org.geoserver.wfs.xml.v1_0_0.WFSConfiguration.class); - expecteBean("filter1_0_0_KvpParser", org.geoserver.wfs.kvp.Filter_1_0_0_KvpParser.class); - expecteBean("filter1_1_0_KvpParser", org.geoserver.wfs.kvp.Filter_1_1_0_KvpParser.class); - expecteBean("filter2_0_0_KvpParser", org.geoserver.wfs.kvp.Filter_2_0_0_KvpParser.class); + expectBean("filter1_0_0_KvpParser", org.geoserver.wfs.kvp.Filter_1_0_0_KvpParser.class); + expectBean("filter1_1_0_KvpParser", org.geoserver.wfs.kvp.Filter_1_1_0_KvpParser.class); + expectBean("filter2_0_0_KvpParser", org.geoserver.wfs.kvp.Filter_2_0_0_KvpParser.class); - expecteBean("gml2SchemaBuilder", org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.GML2.class); - expecteBean("gml3SchemaBuilder", org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.GML3.class); + expectBean("gml2SchemaBuilder", org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.GML2.class); + expectBean("gml3SchemaBuilder", org.geoserver.wfs.xml.FeatureTypeSchemaBuilder.GML3.class); - expecteBean("gml2OutputFormat", org.geoserver.wfs.xml.GML2OutputFormat.class); - expecteBean("gml3OutputFormat", org.geoserver.wfs.xml.GML3OutputFormat.class); - expecteBean("gml32OutputFormat", org.geoserver.wfs.xml.GML32OutputFormat.class); + expectBean("gml2OutputFormat", org.geoserver.wfs.xml.GML2OutputFormat.class); + expectBean("gml3OutputFormat", org.geoserver.wfs.xml.GML3OutputFormat.class); + expectBean("gml32OutputFormat", org.geoserver.wfs.xml.GML32OutputFormat.class); } @Test void testGwcWmsIntegration() { - expecteBean( - "gwcWMSExtendedCapabilitiesProvider", CachingExtendedCapabilitiesProvider.class); - expecteBean("gwcGetMapAdvise", ForwardGetMapToGwcAspect.class); + expectBean("gwcWMSExtendedCapabilitiesProvider", CachingExtendedCapabilitiesProvider.class); + expectBean("gwcGetMapAdvise", ForwardGetMapToGwcAspect.class); } - protected void expecteBean(String name, Class type) { + @Test + void testKmlIntegration() { + expectBean("kmlIconsController", KMLIconsController.class); + expectBean("kmlReflectorController", KMLReflectorController.class); + } + + protected void expectBean(String name, Class type) { assertThat(context.getBean(name)).isInstanceOf(type); } } diff --git a/src/apps/geoserver/wms/src/test/resources/bootstrap-testdatadir.yml b/src/apps/geoserver/wms/src/test/resources/bootstrap-testdatadir.yml deleted file mode 100644 index 7c9d79162..000000000 --- a/src/apps/geoserver/wms/src/test/resources/bootstrap-testdatadir.yml +++ /dev/null @@ -1,5 +0,0 @@ -geoserver: - backend: - data-directory: - enabled: true - location: ${data_directory:${java.io.tmpdir}/geoserver_cloud_data_directory} diff --git a/src/apps/geoserver/wps/src/test/java/org/geoserver/cloud/wps/WpsApplicationTest.java b/src/apps/geoserver/wps/src/test/java/org/geoserver/cloud/wps/WpsApplicationTest.java index c3ebc1d86..0922584ef 100644 --- a/src/apps/geoserver/wps/src/test/java/org/geoserver/cloud/wps/WpsApplicationTest.java +++ b/src/apps/geoserver/wps/src/test/java/org/geoserver/cloud/wps/WpsApplicationTest.java @@ -5,15 +5,53 @@ package org.geoserver.cloud.wps; import org.junit.jupiter.api.Test; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.junit.jupiter.api.io.TempDir; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.xmlunit.assertj3.XmlAssert; -@SpringBootTest -@EnableAutoConfiguration +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; + +@SpringBootTest(classes = WpsApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") class WpsApplicationTest { + static @TempDir Path tmpdir; + static Path datadir; + + @DynamicPropertySource + static void setUpDataDir(DynamicPropertyRegistry registry) throws IOException { + datadir = Files.createDirectory(tmpdir.resolve("datadir")); + registry.add("geoserver.backend.data-directory.location", datadir::toAbsolutePath); + } + + private TestRestTemplate restTemplate = new TestRestTemplate("admin", "geoserver"); + + @Test + void owsGetCapabilitiesSmokeTest(@LocalServerPort int servicePort) { + String url = + "http://localhost:%d/ows?SERVICE=WPS&REQUEST=GETCAPABILITIES&VERSION=1.0.0" + .formatted(servicePort); + String caps = restTemplate.getForObject(url, String.class); + Map nscontext = Map.of("wps", "http://www.opengis.net/wps/1.0.0"); + XmlAssert.assertThat(caps).withNamespaceContext(nscontext).hasXPath("/wps:Capabilities"); + } + @Test - void contextLoads() {} + void wpsGetCapabilitiesSmokeTest(@LocalServerPort int servicePort) { + String url = + "http://localhost:%d/wps?SERVICE=WPS&REQUEST=GETCAPABILITIES&VERSION=1.0.0" + .formatted(servicePort); + String caps = restTemplate.getForObject(url, String.class); + Map nscontext = Map.of("wps", "http://www.opengis.net/wps/1.0.0"); + XmlAssert.assertThat(caps).withNamespaceContext(nscontext).hasXPath("/wps:Capabilities"); + } } diff --git a/src/apps/geoserver/wps/src/test/resources/bootstrap-test.yml b/src/apps/geoserver/wps/src/test/resources/bootstrap-test.yml index 59181b330..bb021d0ec 100644 --- a/src/apps/geoserver/wps/src/test/resources/bootstrap-test.yml +++ b/src/apps/geoserver/wps/src/test/resources/bootstrap-test.yml @@ -3,6 +3,7 @@ spring: banner-mode: off allow-bean-definition-overriding: true allow-circular-references: true # false by default since spring-boot 2.6.0, breaks geoserver initialization + cloud.bus.enabled: false cloud.config.enabled: false cloud.config.discovery.enabled: false cloud.discovery.enabled: false diff --git a/src/apps/infrastructure/discovery/src/test/java/org/geoserver/cloud/discovery/DiscoveryApplicationTests.java b/src/apps/infrastructure/discovery/src/test/java/org/geoserver/cloud/discovery/DiscoveryApplicationTests.java index 1b76e4b6a..d0d447a18 100644 --- a/src/apps/infrastructure/discovery/src/test/java/org/geoserver/cloud/discovery/DiscoveryApplicationTests.java +++ b/src/apps/infrastructure/discovery/src/test/java/org/geoserver/cloud/discovery/DiscoveryApplicationTests.java @@ -4,12 +4,33 @@ */ package org.geoserver.cloud.discovery; +import static org.assertj.core.api.Assertions.assertThat; + +import org.json.JSONException; import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; -@SpringBootTest +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) class DiscoveryApplicationTests { + private TestRestTemplate restTemplate = new TestRestTemplate(); + @Test - void contextLoads() {} + void getApps(@LocalServerPort int servicePort) throws JSONException { + String url = "http://localhost:%d/eureka/apps".formatted(servicePort); + ResponseEntity response = restTemplate.getForEntity(url, String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + JSONAssert.assertEquals( + """ + {"applications":{"versions__delta":"1","apps__hashcode":"","application":[]}} + """, + response.getBody(), + false); + } } diff --git a/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/config/catalog/backend/datadirectory/DataDirectoryBackendConfiguration.java b/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/config/catalog/backend/datadirectory/DataDirectoryBackendConfiguration.java index aafabf92e..1203f89e9 100644 --- a/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/config/catalog/backend/datadirectory/DataDirectoryBackendConfiguration.java +++ b/src/catalog/backends/datadir/src/main/java/org/geoserver/cloud/config/catalog/backend/datadirectory/DataDirectoryBackendConfiguration.java @@ -51,8 +51,9 @@ public DataDirectoryBackendConfiguration( this.dataDirectoryConfig = dataDirectoryConfig; this.catalogProperties = catalogProperties; log.info( - "Loading geoserver config backend with {}", - DataDirectoryBackendConfiguration.class.getSimpleName()); + "Loading geoserver config backend with {} from {}", + DataDirectoryBackendConfiguration.class.getSimpleName(), + dataDirectoryConfig.getLocation()); } @Bean diff --git a/src/catalog/backends/jdbcconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/jdbcconfig/JdbcConfigUpdateSequenceTest.java b/src/catalog/backends/jdbcconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/jdbcconfig/JdbcConfigUpdateSequenceTest.java index 895dba378..3bb15c1e9 100644 --- a/src/catalog/backends/jdbcconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/jdbcconfig/JdbcConfigUpdateSequenceTest.java +++ b/src/catalog/backends/jdbcconfig/src/test/java/org/geoserver/cloud/autoconfigure/catalog/backend/jdbcconfig/JdbcConfigUpdateSequenceTest.java @@ -4,6 +4,8 @@ */ package org.geoserver.cloud.autoconfigure.catalog.backend.jdbcconfig; +import static org.junit.jupiter.api.Assertions.assertFalse; + import org.geoserver.cloud.config.catalog.backend.jdbcconfig.JdbcConfigUpdateSequence; import org.geoserver.config.GeoServer; import org.geoserver.platform.config.UpdateSequence; @@ -35,5 +37,6 @@ public GeoServer getGeoSever() { @Override public @Test void testUpdateSequence() { // no-op + assertFalse(false); } } diff --git a/src/catalog/cache/src/test/java/org/geoserver/cloud/catalog/cache/GeoServerBackendCacheConfigurationTest.java b/src/catalog/cache/src/test/java/org/geoserver/cloud/catalog/cache/GeoServerBackendCacheConfigurationTest.java index c8f35d52b..207496023 100644 --- a/src/catalog/cache/src/test/java/org/geoserver/cloud/catalog/cache/GeoServerBackendCacheConfigurationTest.java +++ b/src/catalog/cache/src/test/java/org/geoserver/cloud/catalog/cache/GeoServerBackendCacheConfigurationTest.java @@ -4,6 +4,7 @@ */ package org.geoserver.cloud.catalog.cache; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import org.geoserver.catalog.plugin.CatalogPlugin; @@ -39,14 +40,21 @@ class GeoServerBackendCacheConfigurationTest { @Test void testCachingCatalogFacade() { contextRunner.run( - context -> context.isTypeMatch("cachingCatalogFacade", CachingCatalogFacade.class)); + context -> + assertThat( + context.isTypeMatch( + "cachingCatalogFacade", CachingCatalogFacade.class)) + .isTrue()); } @Test void testCachingGeoServerFacade() { contextRunner.run( context -> - context.isTypeMatch( - "cachingGeoServerFacade", CachingGeoServerFacade.class)); + assertThat( + context.isTypeMatch( + "cachingGeoServerFacade", + CachingGeoServerFacade.class)) + .isTrue()); } }