ingo@1127: /* ingo@1127: * Copyright (c) 2010 by Intevation GmbH ingo@1127: * ingo@1127: * This program is free software under the LGPL (>=v2.1) ingo@1127: * Read the file LGPL.txt coming with the software for details ingo@1127: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1127: */ ingo@1127: tim@132: package de.intevation.gnv.geobackend.base.query; tim@132: sascha@886: import de.intevation.gnv.geobackend.base.Result; sascha@886: import de.intevation.gnv.geobackend.base.ResultDescriptor; sascha@886: sascha@886: import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPoolFactory; sascha@886: sascha@886: import de.intevation.gnv.geobackend.base.query.container.QueryContainerFactory; sascha@886: sascha@886: import de.intevation.gnv.geobackend.base.query.exception.QueryException; sascha@886: tim@132: import java.io.FileInputStream; tim@132: import java.io.InputStream; sascha@886: tim@132: import java.util.Collection; tim@132: import java.util.Iterator; tim@132: import java.util.Properties; tim@132: sascha@886: import junit.framework.TestCase; sascha@886: tim@132: import org.apache.log4j.BasicConfigurator; tim@132: import org.apache.log4j.Logger; tim@132: tim@132: /** tim@132: * TestCase for the QueryExecutor interface sascha@887: * @author Tim Englich tim@132: * tim@132: */ tim@132: public class QueryExecutorTestCase extends TestCase { sascha@885: sascha@885: tim@132: /** tim@132: * the logger, used to log exceptions and additonaly information tim@132: */ tim@132: private static Logger log = null; sascha@885: tim@132: static{ tim@132: BasicConfigurator.configure(); tim@132: log = Logger.getLogger(QueryExecutorTestCase.class); tim@132: } sascha@885: tim@132: /** tim@132: * Constructor tim@132: * @param name tim@132: */ tim@132: public QueryExecutorTestCase(String name) { tim@132: super(name); tim@132: } sascha@885: sascha@885: tim@139: public void testSpatialQuery(){ tim@139: try { sascha@885: tim@264: this.testQuery(5, "spatial_query", null); tim@139: } catch (QueryException e) { tim@139: log.error(e,e); tim@139: fail(); tim@139: } tim@139: } sascha@885: tim@266: public void testSpatialQueryWithoutIntersects(){ tim@266: try { tim@274: // this.testQuery(286, "spatial_query_without_intersects", null); tim@274: this.testQuery(0, "spatial_query_without_intersects2", null); tim@274: this.testQuery(2060, "spatial_query_without_intersects3", null); tim@274: this.testQuery(0, "spatial_query_without_intersects4", null); tim@274: this.testQuery(27031, "spatial_query_without_intersects5", null); tim@274: this.testQuery(8464, "spatial_query_without_intersects6", null); tim@266: } catch (QueryException e) { tim@266: log.error(e,e); tim@266: fail(); tim@266: } tim@266: } sascha@885: tim@275: public void testSpatialQueryWithInnerSelect(){ tim@275: try { tim@275: this.testQuery(1998, "spatial_query_with_innerselect", null); tim@275: } catch (QueryException e) { tim@275: log.error(e,e); tim@275: fail(); tim@275: } tim@275: } sascha@885: sascha@885: tim@275: public void testChooseFis(){ tim@275: try { tim@379: this.testQuery(1, "choose_fis_query", null); tim@275: } catch (QueryException e) { tim@275: log.error(e, e); tim@275: fail(); tim@275: } tim@275: } sascha@885: sascha@885: tim@132: /** tim@132: * Tests if the Databaseconnection can be established and tim@132: * Data could be read from the Database tim@132: */ tim@132: public void testQueryExecutor(){ sascha@885: tim@132: try { sascha@885: tim@139: this.testQuery(6, "mesh", null); sascha@885: tim@139: this.testQuery(1, "mesh_id", new String[]{"5"}); sascha@885: sascha@885: sascha@885: tim@132: } catch (QueryException e) { tim@132: log.error(e,e); tim@132: fail(); tim@132: } tim@132: } sascha@885: tim@139: public void testTimeSeriesQueries(){ sascha@885: tim@139: try{ tim@139: // Test zum initialisieren der umgebung tim@139: this.testQuery(6, "mesh", null); sascha@885: sascha@885: tim@139: this.testQuery(11, "timeseries_stations", new String[]{"4"}); tim@139: this.testQuery(11, "timeseries_stations_op", new String[]{"4"}); tim@139: this.testQuery(1, "timeseries_interval", new String[]{"500042 ", "54"}); sascha@885: tim@139: } catch (QueryException e) { tim@139: log.error(e,e); tim@139: fail(); tim@139: } sascha@885: tim@139: } tim@139: tim@139: /** tim@139: * @param resultsize tim@139: * @param queryID tim@139: * @param filter tim@139: * @throws QueryException tim@139: */ tim@139: private void testQuery(int resultsize, String queryID, String[] filter) tim@139: throws QueryException { tim@139: long start = System.currentTimeMillis(); tim@139: QueryExecutor queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor(); tim@139: Collection results = queryExecutor.executeQuery(queryID, filter); tim@274: // if (results == null || results.size() == 0){ tim@274: // log.error("Keine Daten erhalten"); tim@274: // fail(); tim@274: // }else { tim@139: assertEquals(resultsize, results.size()); tim@139: log.debug(resultsize+" Datensätze erhalten"); tim@139: Iterator it = results.iterator(); tim@275: while (it.hasNext()){ tim@275: Result tmpResult = it.next(); tim@275: ResultDescriptor resultDescriptor = tmpResult.getResultDescriptor(); tim@275: int columns = resultDescriptor.getColumnCount(); tim@275: for (int i = 0; i < columns; i++){ tim@275: String columnName = resultDescriptor.getColumnName(i); tim@275: Object value = tmpResult.getString(columnName); tim@275: log.debug(columnName + " ==> "+value.toString()); tim@275: } tim@275: } tim@274: // } tim@139: log.debug("Query dauerte: "+(System.currentTimeMillis()-start) +"ms"); tim@139: } sascha@885: tim@132: tim@132: tim@132: /** tim@132: * @see junit.framework.TestCase#setUp() tim@132: */ tim@132: @Override tim@132: protected void setUp() throws Exception { sascha@885: tim@132: super.setUp(); tim@132: InputStream inputStream = new FileInputStream("src/test/ressources/ArcSDEConnectionPoolTestCase.properties"); tim@132: Properties properties = new Properties(); tim@132: properties.load(inputStream); sascha@885: tim@132: ConnectionPoolFactory cpf = ConnectionPoolFactory.getInstance(); tim@132: cpf.initializeConnectionPool(properties); sascha@885: sascha@885: tim@132: inputStream = new FileInputStream("src/test/ressources/QueryExecutorTestCase.properties"); tim@132: properties = new Properties(); tim@132: properties.load(inputStream); sascha@885: tim@132: QueryContainerFactory qcf = QueryContainerFactory.getInstance(); tim@132: qcf.initializeQueryContainer(properties); tim@132: } tim@132: tim@132: }