/* (c) 2014 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.wfs;
import static org.junit.Assert.assertEquals;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.data.test.SystemTestData;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class MaxFeaturesTest extends WFSTestSupport {
@Override
protected void setUpInternal(SystemTestData data) throws Exception {
// set global max to 5
GeoServer gs = getGeoServer();
WFSInfo wfs = getWFS();
wfs.setMaxFeatures( 5 );
gs.save( wfs );
}
@Before
public void resetLocalMaxes() {
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(0);
getCatalog().save( info );
info = getFeatureTypeInfo(SystemTestData.BASIC_POLYGONS);
info.setMaxFeatures(0);
getCatalog().save( info );
}
@Test
public void testGlobalMax() throws Exception {
// fifteen has 15 elements, but global max is 5
Document doc = getAsDOM("wfs?request=GetFeature&typename=cdf:Fifteen" +
"&version=1.0.0&service=wfs");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
NodeList featureMembers = doc.getElementsByTagName("gml:featureMember");
assertEquals(5, featureMembers.getLength());
}
@Test
public void testLocalMax() throws Exception {
// setup different max on local
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN );
info.setMaxFeatures(3);
getCatalog().save( info );
// fifteen has 15 elements, but global max is 5 and local is 3
Document doc = getAsDOM("wfs?request=GetFeature&typename=cdf:Fifteen" +
"&version=1.0.0&service=wfs");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
NodeList featureMembers = doc.getElementsByTagName("gml:featureMember");
assertEquals(3, featureMembers.getLength());
}
@Test
public void testLocalMaxBigger() throws Exception {
// setup different max on local
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(10);
getCatalog().save( info );
// fifteen has 15 elements, but global max is 5 and local is 10
Document doc = getAsDOM("wfs?request=GetFeature&typename=cdf:Fifteen" +
"&version=1.0.0&service=wfs");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
NodeList featureMembers = doc.getElementsByTagName("gml:featureMember");
assertEquals(5, featureMembers.getLength());
}
@Test
public void testCombinedLocalMaxes() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(2);
getCatalog().save( info );
info = getFeatureTypeInfo(SystemTestData.BASIC_POLYGONS);
info.setMaxFeatures(2);
getCatalog().save( info );
Document doc = getAsDOM("wfs?request=GetFeature&srsName=EPSG:4326&typename=cdf:Fifteen,cite:BasicPolygons" +
"&version=1.0.0&service=wfs");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
assertEquals(4, doc.getElementsByTagName("gml:featureMember").getLength());
assertEquals(2, doc.getElementsByTagName("cdf:Fifteen").getLength());
assertEquals(2, doc.getElementsByTagName("cite:BasicPolygons").getLength());
}
@Test
public void testCombinedLocalMaxesBigger() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(4);
getCatalog().save( info );
info = getFeatureTypeInfo(SystemTestData.BASIC_POLYGONS);
info.setMaxFeatures(2);
getCatalog().save( info );
Document doc = getAsDOM("wfs?request=GetFeature&srsName=EPSG:4326&typename=cdf:Fifteen,cite:BasicPolygons" +
"&version=1.0.0&service=wfs");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
assertEquals(5, doc.getElementsByTagName("gml:featureMember").getLength());
assertEquals(4, doc.getElementsByTagName("cdf:Fifteen").getLength());
assertEquals(1, doc.getElementsByTagName("cite:BasicPolygons").getLength());
}
@Test
public void testCombinedLocalMaxesBiggerRequestOverride() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(3);
getCatalog().save(info);
info = getFeatureTypeInfo(SystemTestData.BASIC_POLYGONS);
getCatalog().save(info);
info.setMaxFeatures(2);
Document doc = getAsDOM("wfs?request=GetFeature&srsName=EPSG:4326&typename=cdf:Fifteen,cite:BasicPolygon" +
"s&version=1.0.0&service=wfs&maxFeatures=4");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
assertEquals(4, doc.getElementsByTagName("gml:featureMember").getLength());
assertEquals(3, doc.getElementsByTagName("cdf:Fifteen").getLength());
assertEquals(1, doc.getElementsByTagName("cite:BasicPolygons").getLength());
}
@Test
public void testMaxFeaturesBreak() throws Exception {
// See https://osgeo-org.atlassian.net/browse/GEOS-1489
FeatureTypeInfo info = getFeatureTypeInfo(SystemTestData.FIFTEEN);
info.setMaxFeatures(3);
getCatalog().save( info );
info = getFeatureTypeInfo(SystemTestData.BASIC_POLYGONS);
info.setMaxFeatures(2);
getCatalog().save(info);
Document doc = getAsDOM("wfs?request=GetFeature&typename=cdf:Fifteen,cite:BasicPolygon" +
"s&version=1.0.0&service=wfs&maxFeatures=3");
assertEquals("wfs:FeatureCollection", doc.getDocumentElement().getNodeName());
assertEquals(3, doc.getElementsByTagName("gml:featureMember").getLength());
assertEquals(3, doc.getElementsByTagName("cdf:Fifteen").getLength());
assertEquals(0, doc.getElementsByTagName("cite:BasicPolygons").getLength());
}
}