/* (c) 2014 - 2016 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.wfs;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayOutputStream;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.concurrent.atomic.AtomicInteger;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.data.test.SystemTestData;
import org.geoserver.wfs.request.FeatureCollectionResponse;
import org.geotools.data.DataUtilities;
import org.geotools.data.FeatureSource;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureIterator;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.springframework.mock.web.MockHttpServletResponse;
public class GetFeatureBoundedTest extends WFSTestSupport {
@Override
protected void setUpInternal(SystemTestData data) throws Exception {
WFSInfo wfs = getWFS();
wfs.setFeatureBounding(true);
getGeoServer().save(wfs);
}
@Test
public void testCloseIterators() throws Exception {
// build a wfs response with an iterator that will mark if close has been called, or not
FeatureTypeInfo fti = getCatalog().getFeatureTypeByName(getLayerId(MockData.POLYGONS));
FeatureSource fs = fti.getFeatureSource(null, null);
SimpleFeatureCollection fc = (SimpleFeatureCollection) fs.getFeatures();
final AtomicInteger openIterators = new AtomicInteger(0);
SimpleFeatureCollection decorated = new org.geotools.feature.collection.DecoratingSimpleFeatureCollection(
fc) {
@Override
public SimpleFeatureIterator features() {
openIterators.incrementAndGet();
final SimpleFeature f = DataUtilities.first(delegate);
return new SimpleFeatureIterator() {
@Override
public SimpleFeature next() throws NoSuchElementException {
return f;
}
@Override
public boolean hasNext() {
return true;
}
@Override
public void close() {
openIterators.decrementAndGet();
}
};
}
};
FeatureBoundsFeatureCollection fbc = new FeatureBoundsFeatureCollection(decorated, decorated.getSchema());
FeatureIterator<?> i = fbc.features();
i.close();
assertEquals(0, openIterators.get());
}
}