package org.geoserver.wfs;
import junit.framework.Test;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.data.test.MockData;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class MaxFeaturesTest extends WFSTestSupport {
private static Catalog catalog;
/**
* This is a READ ONLY TEST so we can use one time setup
*/
public static Test suite() {
return new OneTimeTestSetup(new MaxFeaturesTest());
}
@Override
protected void oneTimeSetUp() throws Exception {
super.oneTimeSetUp();
// set global max to 5
GeoServer gs = getGeoServer();
WFSInfo wfs = getWFS();
wfs.setMaxFeatures( 5 );
gs.save( wfs );
catalog = getCatalog();
}
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());
}
public void testLocalMax() throws Exception {
// setup different max on local
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN );
info.setMaxFeatures(3);
catalog.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());
}
public void testLocalMaxBigger() throws Exception {
// setup different max on local
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN);
info.setMaxFeatures(10);
catalog.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());
}
public void testCombinedLocalMaxes() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN);
info.setMaxFeatures(2);
catalog.save( info );
info = getFeatureTypeInfo(MockData.BASIC_POLYGONS);
info.setMaxFeatures(2);
catalog.save( info );
Document doc = getAsDOM("wfs?request=GetFeature&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());
}
public void testCombinedLocalMaxesBigger() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN);
info.setMaxFeatures(4);
catalog.save( info );
info = getFeatureTypeInfo(MockData.BASIC_POLYGONS);
info.setMaxFeatures(2);
catalog.save( info );
Document doc = getAsDOM("wfs?request=GetFeature&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());
}
public void testCombinedLocalMaxesBiggerRequestOverride() throws Exception {
// fifteen has 15 features, basic polygons 3
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN);
info.setMaxFeatures(3);
catalog.save(info);
info = getFeatureTypeInfo(MockData.BASIC_POLYGONS);
catalog.save(info);
info.setMaxFeatures(2);
Document doc = getAsDOM("wfs?request=GetFeature&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());
}
public void testMaxFeaturesBreak() throws Exception {
// see http://jira.codehaus.org/browse/GEOS-1489
FeatureTypeInfo info = getFeatureTypeInfo(MockData.FIFTEEN);
info.setMaxFeatures(3);
catalog.save( info );
info = getFeatureTypeInfo(MockData.BASIC_POLYGONS);
info.setMaxFeatures(2);
catalog.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());
}
}