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: }