/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2014 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.wms_1_3;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.custommonkey.xmlunit.NamespaceContext;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.XpathEngine;
import org.geoserver.wms.GetMapOutputFormat;
import org.geoserver.wms.WMSInfo;
import org.geoserver.wms.WMSTestSupport;
import org.geoserver.wms.featureinfo.GetFeatureInfoOutputFormat;
import org.geoserver.wms.featureinfo.TextFeatureInfoOutputFormat;
import org.geoserver.wms.map.RenderedImageMapOutputFormat;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class CapabilitiesAllowedMimeTypesTest extends WMSTestSupport {
GetMapOutputFormat getMapFormat;
GetFeatureInfoOutputFormat getInfoFormat;
@Override
protected void registerNamespaces(Map<String, String> namespaces) {
namespaces.put("wms", "http://www.opengis.net/wms");
namespaces.put("ows", "http://www.opengis.net/ows");
}
void addMimeTypes() {
getMapFormat = new RenderedImageMapOutputFormat(getWMS());
getInfoFormat = new TextFeatureInfoOutputFormat(getWMS());
WMSInfo wms = getWMS().getServiceInfo();
wms.getGetMapMimeTypes().add(getMapFormat.getMimeType());
wms.getGetFeatureInfoMimeTypes().add(getInfoFormat.getContentType());
wms.setGetMapMimeTypeCheckingEnabled(true);
wms.setGetFeatureInfoMimeTypeCheckingEnabled(true);
getGeoServer().save(wms);
}
@After
public void removeMimeTypes () {
WMSInfo wms = getWMS().getServiceInfo();
wms.getGetMapMimeTypes().clear();
wms.getGetFeatureInfoMimeTypes().clear();
wms.setGetMapMimeTypeCheckingEnabled(false);
wms.setGetFeatureInfoMimeTypeCheckingEnabled(false);
getGeoServer().save(wms);
}
@Test
public void testAllowedMimeTypes() throws Exception {
// check with no restrictions
Document doc = getAsDOM("sf/PrimitiveGeoFeature/wms?service=WMS&request=getCapabilities&version=1.3.0", true);
XpathEngine xpath = XMLUnit.newXpathEngine();
NodeList formatNodes = xpath.getMatchingNodes("wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetMap/wms:Format",
doc);
Assert.assertTrue(formatNodes.getLength() > 1);
formatNodes = xpath.getMatchingNodes("/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetFeatureInfo/wms:Format",doc);
Assert.assertTrue(formatNodes.getLength() > 1);
// add mime type restrictions
addMimeTypes();
doc = getAsDOM("sf/PrimitiveGeoFeature/wms?service=WMS&request=getCapabilities&version=1.3.0", true);
formatNodes = xpath.getMatchingNodes("wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetMap/wms:Format",
doc);
Assert.assertEquals(1,formatNodes.getLength());
Assert.assertEquals(getMapFormat.getMimeType(),formatNodes.item(0).getTextContent());
formatNodes = xpath.getMatchingNodes("/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetFeatureInfo/wms:Format",doc);
Assert.assertEquals(1,formatNodes.getLength());
Assert.assertEquals(getInfoFormat.getContentType(),formatNodes.item(0).getTextContent());
// remove restrictions
removeMimeTypes();
doc = getAsDOM("sf/PrimitiveGeoFeature/wms?service=WMS&request=getCapabilities&version=1.3.0", true);
formatNodes = xpath.getMatchingNodes("wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetMap/wms:Format",
doc);
Assert.assertTrue(formatNodes.getLength() > 1);
formatNodes = xpath.getMatchingNodes("/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetFeatureInfo/wms:Format",doc);
Assert.assertTrue(formatNodes.getLength() > 1);
}
}