/* (c) 2017 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.wms.featureinfo; import java.net.URL; import java.net.URLDecoder; import java.util.HashMap; import org.geoserver.catalog.CatalogBuilder; import org.geoserver.catalog.CatalogFactory; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.config.GeoServerLoader; import org.geoserver.data.test.MockData; import org.geoserver.ows.Dispatcher; import org.geoserver.platform.ServiceException; import org.geoserver.test.ows.KvpRequestReaderTestSupport; import org.geoserver.wms.GetFeatureInfoRequest; import org.geoserver.wms.WMS; import org.geoserver.wms.WMSInfo; import org.geoserver.wms.WMSInfoImpl; import org.geoserver.wms.map.GetMapKvpRequestReader; import junit.framework.Test; @SuppressWarnings("unchecked") public class GetFeatureInfoKvpRequestReaderTest extends KvpRequestReaderTestSupport { GetFeatureInfoKvpReader reader; Dispatcher dispatcher; public static final String STATES_SLD = "<StyledLayerDescriptor version=\"1.0.0\">" + "<UserLayer><Name>sf:states</Name><UserStyle><Name>UserSelection</Name>" + "<FeatureTypeStyle><Rule><Filter xmlns:gml=\"http://www.opengis.net/gml\">" + "<PropertyIsEqualTo><PropertyName>STATE_ABBR</PropertyName><Literal>IL</Literal></PropertyIsEqualTo>" + "</Filter><PolygonSymbolizer><Fill><CssParameter name=\"fill\">#FF0000</CssParameter></Fill>" + "</PolygonSymbolizer></Rule><Rule><LineSymbolizer><Stroke/></LineSymbolizer></Rule>" + "</FeatureTypeStyle></UserStyle></UserLayer></StyledLayerDescriptor>"; /** * This is a READ ONLY TEST so we can use one time setup */ public static Test suite() { return new OneTimeTestSetup(new GetFeatureInfoKvpRequestReaderTest()); } @Override protected void oneTimeSetUp() throws Exception { super.oneTimeSetUp(); CatalogFactory cf = getCatalog().getFactory(); CatalogBuilder cb = new CatalogBuilder(getCatalog()); LayerGroupInfo gi = cf.createLayerGroup(); gi.setName("testGroup"); gi.getLayers().add(getCatalog().getLayerByName(MockData.BASIC_POLYGONS.getLocalPart())); gi.getStyles().add(getCatalog().getStyleByName("polygon")); cb.calculateLayerGroupBounds(gi); getCatalog().add(gi); LayerGroupInfo gi2 = cf.createLayerGroup(); gi2.setName("testGroup2"); gi2.getLayers().add(getCatalog().getLayerByName(MockData.BASIC_POLYGONS.getLocalPart())); gi2.getStyles().add(getCatalog().getStyleByName("raster")); gi2.getLayers().add(getCatalog().getLayerByName(MockData.BUILDINGS.getLocalPart())); gi2.getStyles().add(getCatalog().getStyleByName("raster")); cb.calculateLayerGroupBounds(gi2); getCatalog().add(gi2); } @Override protected void oneTimeTearDown() throws Exception { super.oneTimeTearDown(); // reset the legacy flag so that other tests are not getting affected by it GeoServerLoader.setLegacy(false); } protected void setUpInternal() throws Exception { super.setUpInternal(); dispatcher = (Dispatcher) applicationContext.getBean("dispatcher"); WMS wms = new WMS(getGeoServer()); reader = new GetFeatureInfoKvpReader(wms); } public void testSldDisabled() throws Exception { HashMap kvp = new HashMap(); URL url = GetMapKvpRequestReader.class.getResource("BasicPolygonsLibraryDefault.sld"); String decoded = URLDecoder.decode(url.toExternalForm(), "UTF-8"); kvp.put("sld", decoded); kvp.put("layers", MockData.BASIC_POLYGONS.getPrefix() + ":" + MockData.BASIC_POLYGONS.getLocalPart()); WMS wms = new WMS(getGeoServer()); WMSInfo oldInfo = wms.getGeoServer().getService(WMSInfo.class); WMSInfo info = new WMSInfoImpl(); info.setDynamicStylingDisabled(Boolean.TRUE); getGeoServer().remove(oldInfo); getGeoServer().add(info); reader = new GetFeatureInfoKvpReader(wms); GetFeatureInfoRequest request = (GetFeatureInfoRequest) reader.createRequest(); boolean error = false; try { request = (GetFeatureInfoRequest) reader.read(request, parseKvp(kvp), kvp); } catch (ServiceException e) { error = true; } getGeoServer().remove(info); getGeoServer().add(oldInfo); assertTrue(error); } public void testSldBodyDisabled() throws Exception { HashMap kvp = new HashMap(); kvp.put("sld_body", STATES_SLD); kvp.put("layers", MockData.BASIC_POLYGONS.getPrefix() + ":" + MockData.BASIC_POLYGONS.getLocalPart()); WMS wms = new WMS(getGeoServer()); WMSInfo oldInfo = wms.getGeoServer().getService(WMSInfo.class); WMSInfo info = new WMSInfoImpl(); info.setDynamicStylingDisabled(Boolean.TRUE); getGeoServer().remove(oldInfo); getGeoServer().add(info); reader = new GetFeatureInfoKvpReader(wms); GetFeatureInfoRequest request = (GetFeatureInfoRequest) reader.createRequest(); boolean error = false; try { request = (GetFeatureInfoRequest) reader.read(request, parseKvp(kvp), kvp); } catch (ServiceException e) { error = true; } getGeoServer().remove(info); getGeoServer().add(oldInfo); assertTrue(error); } }