package org.geotools.data.memory; import junit.framework.Assert; import org.geotools.data.DataTestCase; import org.geotools.data.FeatureReader; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; public class MemoryDataStoreConcurrencyTest extends DataTestCase { public MemoryDataStoreConcurrencyTest(String name) { super(name); } public void testConcurrencyReadsAndWrite() throws Exception { final MemoryDataStore dataStore = new MemoryDataStore(); dataStore.createSchema(roadType); // start thread to write each second a feature Thread writeThread = new Thread() { @Override public void run() { for (int i=0; i<10000; i++) { SimpleFeature feature = SimpleFeatureBuilder.build(roadType, new Object[] { new Integer(i), line(new int[]{10, 10, 20, 10}), "r" + i}, "road.rd" + i); dataStore.addFeature(feature); } super.run(); } }; writeThread.start(); try { // start some reads from FeatureSource for (int i=0; i< 1000; i++) { // just run through the features Assert.assertTrue(dataStore != null); FeatureReader featureReader = dataStore.getFeatureReader(roadType.getTypeName()); Assert.assertTrue(featureReader != null); while (featureReader.hasNext()) { featureReader.next(); } } } catch (Exception e) { throw e; } finally { writeThread.stop(); } } }