/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.wms_1_1_1; import static org.junit.Assert.*; import org.custommonkey.xmlunit.XMLAssert; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.CatalogBuilder; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerGroupInfo.Mode; import org.geoserver.config.GeoServerInfo; import org.geoserver.config.ResourceErrorHandling; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.test.GeoServerSystemTestSupport; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.springframework.mock.web.MockHttpServletResponse; public class CapabilitiesModifyingTest extends GeoServerSystemTestSupport { @Before public void resetWmsConfigChanges() { GeoServerInfo global = getGeoServer().getGlobal(); global.setResourceErrorHandling(ResourceErrorHandling.OGC_EXCEPTION_REPORT); getGeoServer().save(global); } @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); Catalog catalog = getCatalog(); for (FeatureTypeInfo ft : catalog.getFeatureTypes()) { ft.setLatLonBoundingBox(null); catalog.save(ft); } // create a misconfigured layer group LayerGroupInfo lg = catalog.getFactory().createLayerGroup(); lg.getLayers().add(catalog.getLayerByName(getLayerId(MockData.LAKES))); lg.setName("test"); lg.setMode(Mode.NAMED); catalog.add(lg); } @Test public void testMisconfiguredLayerGeneratesErrorDocumentInDefaultConfig() throws Exception { MockHttpServletResponse response = getAsServletResponse( "wms?service=WMS&request=GetCapabilities&version=1.1.1"); assertTrue("Response does not contain ServiceExceptionReport: " + response.getContentAsString(), response.getContentAsString().endsWith("</ServiceExceptionReport>")); } @Test public void testMisconfiguredLayerIsSkippedWhenWMSServiceIsConfiguredThatWay() throws Exception { GeoServerInfo global = getGeoServer().getGlobal(); global.setResourceErrorHandling(ResourceErrorHandling.SKIP_MISCONFIGURED_LAYERS); getGeoServer().save(global); Document caps = getAsDOM( "wms?service=WMS&request=GetCapabilities&version=1.1.1"); assertEquals("WMT_MS_Capabilities", caps.getDocumentElement().getTagName()); // we misconfigured all the layers in the server, so there should be no named layers now. XMLAssert.assertXpathEvaluatesTo("", "//Layer/Name/text()", caps); } @Test public void testMisconfiguredLayerGeneratesErrorDocumentInDefaultConfig_1_3_0() throws Exception { MockHttpServletResponse response = getAsServletResponse( "wms?service=WMS&request=GetCapabilities&version=1.3.0"); assertTrue("Response does not contain ServiceExceptionReport: " + response.getContentAsString(), response.getContentAsString().endsWith("</ServiceExceptionReport>")); } @Test public void testMisconfiguredLayerIsSkippedWhenWMSServiceIsConfiguredThatWay_1_3_0() throws Exception { GeoServerInfo global = getGeoServer().getGlobal(); global.setResourceErrorHandling(ResourceErrorHandling.SKIP_MISCONFIGURED_LAYERS); getGeoServer().save(global); Document caps = getAsDOM( "wms?service=WMS&request=GetCapabilities&version=1.3.0"); assertEquals("WMS_Capabilities", caps.getDocumentElement().getTagName()); // we misconfigured all the layers in the server, so there should be no named layers now. XMLAssert.assertXpathEvaluatesTo("", "//Layer/Name/text()", caps); } }