You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
5.7 KiB
126 lines
5.7 KiB
package de.superx.kettle; |
|
|
|
import java.io.File; |
|
import java.sql.Connection; |
|
import java.sql.ResultSet; |
|
import java.sql.SQLException; |
|
import java.sql.Statement; |
|
|
|
import javax.sql.DataSource; |
|
|
|
import org.h2.tools.Server; |
|
import org.junit.AfterClass; |
|
import org.junit.Ignore; |
|
import org.junit.Test; |
|
import org.pentaho.di.core.KettleEnvironment; |
|
import org.pentaho.di.core.Result; |
|
import org.pentaho.di.core.database.DataSourceProviderFactory; |
|
import org.pentaho.di.core.database.DataSourceProviderInterface; |
|
import org.pentaho.di.core.database.DatabaseMeta; |
|
import org.pentaho.di.core.exception.KettleException; |
|
import org.pentaho.di.core.exception.KettleXMLException; |
|
import org.pentaho.di.core.logging.LogLevel; |
|
import org.pentaho.di.core.parameters.UnknownParamException; |
|
import org.pentaho.di.job.Job; |
|
import org.pentaho.di.job.JobMeta; |
|
import org.pentaho.di.metastore.DatabaseMetaStoreUtil; |
|
import org.pentaho.metastore.api.exceptions.MetaStoreException; |
|
import org.pentaho.metastore.stores.memory.MemoryMetaStore; |
|
|
|
import de.superx.db.H2InMemoryCreator; |
|
import de.superx.stat.StatisticsBase; |
|
import de.superx.util.test.KettleH2TestDataSourceProvider; |
|
import junit.framework.Assert; |
|
|
|
/** |
|
* @author brummer |
|
* |
|
*/ |
|
public class StudentOfficialStatisticsTest { |
|
|
|
private static final String SCHEMA_PATH = String.join(File.separator, "test", "resources", "schema_files", "student_statistics", "schema"); |
|
private static final String VIEWS_PATH = String.join(File.separator, "test", "resources", "schema_files", "student_statistics", "views"); |
|
private static final String UNLOADS_PATH = String.join(File.separator, "test", "resources", "schema_files", "student_statistics", "unloads"); |
|
private static final String KETTLE_PLUGIN_DIR = String.join(File.separator, "superx", "WEB-INF", "kettle-plugins"); |
|
private DataSource datasource = null; |
|
|
|
/** |
|
* @throws java.lang.Exception |
|
*/ |
|
private static void createInMemoryTestDb() throws Exception { |
|
H2InMemoryCreator h2InMemoryCreator = new H2InMemoryCreator(); |
|
String schemaPath = new File(SCHEMA_PATH).getAbsolutePath(); |
|
String viewsPath = new File(VIEWS_PATH).getAbsolutePath(); |
|
String unloadsPath = new File(UNLOADS_PATH).getAbsolutePath(); |
|
h2InMemoryCreator.setSchemaDir(schemaPath) |
|
.setViewDir(viewsPath) |
|
.setUnlDir(unloadsPath) |
|
.setUserName("sa") |
|
.setTablePattern("(astat_.*|sos_.*|trans_cifx|cif.*|dim_studiengang|hochschulinfo|semester|konstanten|accredited_ects)") |
|
.setViewPattern("skipeverything"); |
|
h2InMemoryCreator.createH2InMemory(); |
|
} |
|
|
|
@Ignore |
|
@Test |
|
public void testStudentStatistics() throws Exception { |
|
createInMemoryTestDb(); |
|
MemoryMetaStore metastore = new MemoryMetaStore(); |
|
initKettleEnvironment(metastore); |
|
// attention: it seems that in memory datasource is destroyed by kettle processing if we do not keep an open connection!? |
|
try ( Connection conn = this.datasource.getConnection(); ) { |
|
// Job job = runKettleJob(metastore); |
|
// notifyLoggedErrors(job); |
|
// validateResult(conn); |
|
Server.startWebServer(conn); // uncomment for local (e.g. dev env) debugging |
|
} |
|
} |
|
|
|
private void initKettleEnvironment(MemoryMetaStore metastore) throws KettleException, MetaStoreException { |
|
System.setProperty("BI_KETTLE_PLUGIN_BASE_FOLDERS", KETTLE_PLUGIN_DIR); |
|
KettleEnvironment.init(); |
|
DataSourceProviderInterface providerinterface = new KettleH2TestDataSourceProvider("default", null); |
|
DataSourceProviderFactory.setDataSourceProviderInterface(providerinterface); |
|
this.datasource = providerinterface.getNamedDataSource("eduetl"); |
|
DatabaseMeta dbmeta = new DatabaseMeta("eduetl", "POSTGRESQL", "JNDI", null, "eduetl", "1521", null, null); |
|
DatabaseMetaStoreUtil.createDatabaseElement(metastore, dbmeta); |
|
} |
|
|
|
private static Job runKettleJob(MemoryMetaStore metastore) throws KettleXMLException, UnknownParamException { |
|
JobMeta jobMeta = new JobMeta(null, "superx/WEB-INF/conf/edustore/db/module/astat/etl/statistik2016/estatistik.kjb", null, metastore, null); |
|
jobMeta.setParameterValue("lieferung", "1"); |
|
jobMeta.setParameterValue("berichtssemester", "20181"); |
|
jobMeta.setParameterValue("stichtagsart_pruef_vorsem", "2"); |
|
jobMeta.setParameterValue("stichtagsart_pruef_berichtssem", "4"); |
|
jobMeta.setParameterValue("stichtagsart_stud_vorsem", "6"); |
|
jobMeta.setParameterValue("stichtagsart_stud_berichtssem", "1"); |
|
Job job = new Job(null, jobMeta); |
|
job.setLogLevel(LogLevel.DETAILED); |
|
job.start(); |
|
job.waitUntilFinished(); |
|
return job; |
|
} |
|
|
|
private static void notifyLoggedErrors(Job job) { |
|
Result result = job.getResult(); |
|
String log = result.getLogText(); |
|
boolean errorsOccured = log.contains("ERROR"); |
|
Assert.assertFalse("Errors where found in kettle log:\n" + log, errorsOccured); |
|
} |
|
|
|
private static void validateResult(Connection conn) throws SQLException { |
|
Statement statement = conn.createStatement(); |
|
ResultSet resultSet = statement.executeQuery("select * from " + StatisticsBase.MODULE_PREFIX + "astat"); |
|
resultSet.next(); |
|
String ef007_name = resultSet.getString("ef007"); |
|
String ef023_pruefungBestanden = resultSet.getString("ef023"); |
|
Assert.assertEquals("'ef007' (name) differs from expected value", "Anne", ef007_name); |
|
Assert.assertEquals("'ef023' (pruefungBestanden) differs from expected value", "0", ef023_pruefungBestanden); |
|
} |
|
|
|
@AfterClass |
|
public static void after() { |
|
KettleEnvironment.shutdown(); |
|
} |
|
|
|
}
|
|
|