package mil.nga.giat.geowave.test.basic; import java.io.File; import java.net.URL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions; import mil.nga.giat.geowave.test.GeoWaveITRunner; import mil.nga.giat.geowave.test.TestUtils; import mil.nga.giat.geowave.test.TestUtils.DimensionalityType; import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore; import mil.nga.giat.geowave.test.annotation.GeoWaveTestStore.GeoWaveStoreType; @RunWith(GeoWaveITRunner.class) public class GeoWaveBasicSpatialVectorIT extends AbstractGeoWaveBasicVectorIT { private final static Logger LOGGER = LoggerFactory.getLogger(GeoWaveBasicSpatialVectorIT.class); private static final String HAIL_EXPECTED_BOX_FILTER_RESULTS_FILE = HAIL_TEST_CASE_PACKAGE + "hail-box-filter.shp"; private static final String HAIL_EXPECTED_POLYGON_FILTER_RESULTS_FILE = HAIL_TEST_CASE_PACKAGE + "hail-polygon-filter.shp"; private static final String TORNADO_TRACKS_EXPECTED_BOX_FILTER_RESULTS_FILE = TORNADO_TRACKS_TEST_CASE_PACKAGE + "tornado_tracks-box-filter.shp"; private static final String TORNADO_TRACKS_EXPECTED_POLYGON_FILTER_RESULTS_FILE = TORNADO_TRACKS_TEST_CASE_PACKAGE + "tornado_tracks-polygon-filter.shp"; private static final String TEST_BOX_FILTER_FILE = TEST_FILTER_PACKAGE + "Box-Filter.shp"; private static final String TEST_POLYGON_FILTER_FILE = TEST_FILTER_PACKAGE + "Polygon-Filter.shp"; private static final String CQL_DELETE_STR = "STATE = 'TX'"; @GeoWaveTestStore(value = { GeoWaveStoreType.ACCUMULO, GeoWaveStoreType.BIGTABLE, GeoWaveStoreType.HBASE }) protected DataStorePluginOptions dataStore; private static long startMillis; @BeforeClass public static void reportTestStart() { startMillis = System.currentTimeMillis(); LOGGER.warn("-----------------------------------------"); LOGGER.warn("* *"); LOGGER.warn("* RUNNING GeoWaveBasicSpatialVectorIT *"); LOGGER.warn("* *"); LOGGER.warn("-----------------------------------------"); } @AfterClass public static void reportTestFinish() { LOGGER.warn("-----------------------------------------"); LOGGER.warn("* *"); LOGGER.warn("* FINISHED GeoWaveBasicSpatialVectorIT *"); LOGGER .warn("* " + ((System.currentTimeMillis() - startMillis) / 1000) + "s elapsed. *"); LOGGER.warn("* *"); LOGGER.warn("-----------------------------------------"); } @Test public void testMultiThreadedIngestAndQuerySpatialPointsAndLines() { testIngestAndQuerySpatialPointsAndLines(4); } public void testIngestAndQuerySpatialPointsAndLines( final int nthreads ) { long mark = System.currentTimeMillis(); LOGGER.debug("Testing DataStore Type: " + dataStore.getType()); // ingest both lines and points TestUtils.testLocalIngest( dataStore, DimensionalityType.SPATIAL, HAIL_SHAPEFILE_FILE, nthreads); long dur = (System.currentTimeMillis() - mark); LOGGER.debug("Ingest (points) duration = " + dur + " ms with " + nthreads + " thread(s)."); mark = System.currentTimeMillis(); TestUtils.testLocalIngest( dataStore, DimensionalityType.SPATIAL, TORNADO_TRACKS_SHAPEFILE_FILE, nthreads); dur = (System.currentTimeMillis() - mark); LOGGER.debug("Ingest (lines) duration = " + dur + " ms with " + nthreads + " thread(s)."); try { mark = System.currentTimeMillis(); testQuery( new File( TEST_BOX_FILTER_FILE).toURI().toURL(), new URL[] { new File( HAIL_EXPECTED_BOX_FILTER_RESULTS_FILE).toURI().toURL(), new File( TORNADO_TRACKS_EXPECTED_BOX_FILTER_RESULTS_FILE).toURI().toURL() }, TestUtils.DEFAULT_SPATIAL_INDEX, "bounding box constraint only"); dur = (System.currentTimeMillis() - mark); LOGGER.debug("BBOX query duration = " + dur + " ms."); } catch (final Exception e) { e.printStackTrace(); TestUtils.deleteAll(dataStore); Assert.fail("Error occurred while testing a bounding box query of spatial index: '" + e.getLocalizedMessage() + "'"); } try { mark = System.currentTimeMillis(); testQuery( new File( TEST_POLYGON_FILTER_FILE).toURI().toURL(), new URL[] { new File( HAIL_EXPECTED_POLYGON_FILTER_RESULTS_FILE).toURI().toURL(), new File( TORNADO_TRACKS_EXPECTED_POLYGON_FILTER_RESULTS_FILE).toURI().toURL() }, TestUtils.DEFAULT_SPATIAL_INDEX, "polygon constraint only"); dur = (System.currentTimeMillis() - mark); LOGGER.debug("POLY query duration = " + dur + " ms."); } catch (final Exception e) { e.printStackTrace(); TestUtils.deleteAll(dataStore); Assert.fail("Error occurred while testing a polygon query of spatial index: '" + e.getLocalizedMessage() + "'"); } if ((nthreads > 0)) { try { testStats( new File[] { new File( HAIL_SHAPEFILE_FILE), new File( TORNADO_TRACKS_SHAPEFILE_FILE) }, TestUtils.DEFAULT_SPATIAL_INDEX, true); } catch (final Exception e) { e.printStackTrace(); TestUtils.deleteAll(dataStore); Assert.fail("Error occurred while testing a bounding box stats on spatial index: '" + e.getLocalizedMessage() + "'"); } } try { testDeleteCQL( CQL_DELETE_STR, TestUtils.DEFAULT_SPATIAL_INDEX); } catch (final Exception e) { e.printStackTrace(); TestUtils.deleteAll(dataStore); Assert.fail("Error occurred while testing deletion of an entry using spatial index: '" + e.getLocalizedMessage() + "'"); } try { testDeleteSpatial( new File( TEST_POLYGON_FILTER_FILE).toURI().toURL(), TestUtils.DEFAULT_SPATIAL_INDEX); } catch (final Exception e) { e.printStackTrace(); TestUtils.deleteAll(dataStore); Assert.fail("Error occurred while testing deletion of an entry using spatial index: '" + e.getLocalizedMessage() + "'"); } TestUtils.deleteAll(dataStore); } @Override protected DataStorePluginOptions getDataStorePluginOptions() { return dataStore; } }