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.
197 lines
8.6 KiB
197 lines
8.6 KiB
package de.superx.kettle; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertFalse; |
|
|
|
import java.io.File; |
|
import java.util.List; |
|
import java.util.Map; |
|
|
|
import javax.sql.DataSource; |
|
|
|
import org.junit.AfterClass; |
|
import org.junit.BeforeClass; |
|
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 org.springframework.jdbc.core.JdbcTemplate; |
|
|
|
import de.superx.db.H2InMemoryCreator; |
|
import de.superx.stat.StatisticsBase; |
|
import de.superx.util.test.KettleH2TestDataSourceProvider; |
|
|
|
public class ExaminationOfficialStatisticsTest { |
|
|
|
private static final String SCHEMA_PATH = String.join(File.separator, "test", "resources", "schema_files", "examination_statistics", "course_of_study_missing", "schema"); |
|
private static final String VIEWS_PATH = String.join(File.separator, "test", "resources", "schema_files", "examination_statistics", "course_of_study_missing", "views"); |
|
private static final String UNLOADS_PATH = String.join(File.separator, "test", "resources", "schema_files", "examination_statistics", "course_of_study_missing", "unloads"); |
|
private static final String KETTLE_PLUGIN_DIR = String.join(File.separator, "superx", "WEB-INF", "kettle-plugins"); |
|
private static MemoryMetaStore metastore = new MemoryMetaStore(); |
|
private static DataSource datasource = null; |
|
|
|
@BeforeClass |
|
public static void initEnvironment() throws Exception { |
|
createInMemoryTestDb(); |
|
initKettleEnvironment(); |
|
} |
|
|
|
/** |
|
* @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|sx_repository)") |
|
.setViewPattern("skipeverything"); |
|
h2InMemoryCreator.createH2InMemory(); |
|
} |
|
|
|
@SuppressWarnings("static-method") |
|
@Test |
|
public void testExamsWithoutCourseOfStudy() throws Exception { |
|
Job job = runKettleJob(); |
|
notifyLoggedErrors(job); |
|
validateResult(); |
|
// Server.startWebServer(conn); // uncomment for local (e.g. dev env) debugging |
|
} |
|
|
|
private static void initKettleEnvironment() throws KettleException, MetaStoreException { |
|
System.setProperty("BI_KETTLE_PLUGIN_BASE_FOLDERS", KETTLE_PLUGIN_DIR); |
|
KettleEnvironment.init(); |
|
DataSourceProviderInterface datasourceProvider = new KettleH2TestDataSourceProvider("default", null); |
|
DataSourceProviderFactory.setDataSourceProviderInterface(datasourceProvider); |
|
datasource = datasourceProvider.getNamedDataSource("eduetl"); |
|
DatabaseMeta dbmeta = new DatabaseMeta("eduetl", "POSTGRESQL", "JNDI", null, "eduetl", "1521", null, null); |
|
DatabaseMetaStoreUtil.createDatabaseElement(metastore, dbmeta); |
|
} |
|
|
|
private static Job runKettleJob() 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", "2"); |
|
jobMeta.setParameterValue("berichtssemester", "20182"); |
|
jobMeta.setParameterValue("stichtagsart_pruef_vorsem", "2"); |
|
jobMeta.setParameterValue("stichtagsart_pruef_berichtssem", "4"); |
|
jobMeta.setParameterValue("stichtagsart_stud_vorsem", "6"); |
|
jobMeta.setParameterValue("stichtagsart_stud_berichtssem", "1"); |
|
jobMeta.setParameterValue("matrikelnr", "11230911"); |
|
Job job = new Job(null, jobMeta); |
|
job.setLogLevel(LogLevel.BASIC); |
|
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"); |
|
assertFalse("Errors where found in kettle log:\n" + log, errorsOccured); |
|
} |
|
|
|
private static void validateResult() { |
|
JdbcTemplate jt = new JdbcTemplate(datasource); |
|
List<Map<String, Object>> resultRows = jt.queryForList("select * from " + StatisticsBase.MODULE_PREFIX + "astat"); |
|
assertEquals("Result has to be exactly one row", 1, resultRows.size()); |
|
Map<String, Object> result = resultRows.get(0); |
|
validateStudierendenDaten(result); |
|
validateErstePruefungsDaten(result); |
|
validateZweitePruefungsDaten(result); |
|
} |
|
|
|
private static void validateStudierendenDaten(Map<String, Object> row) { |
|
validateValue(row,"ef001", "03"); |
|
validateValue(row,"ef002", "2"); |
|
validateValue(row,"ef003", "2018"); |
|
validateValue(row,"ef004", "9994"); |
|
validateValue(row,"ef005", "000001"); |
|
validateValue(row,"ef006", "000011230911"); |
|
validateValue(row,"ef007", "1"); |
|
validateValue(row,"ef008u1", "22"); |
|
validateValue(row,"ef008u2", "07"); |
|
validateValue(row,"ef008u3", "1995"); |
|
validateValue(row,"ef009", "Flor"); |
|
validateValue(row,"ef010", "134"); |
|
validateValue(row,"ef017", "9994"); |
|
validateValue(row,"ef018", ""); |
|
validateValue(row,"ef019", "2"); |
|
validateValue(row,"ef020", "2017"); |
|
validateValue(row,"ef117", "2013"); |
|
validateValue(row,"ef118", "03"); |
|
validateValue(row,"ef119u1", "05"); |
|
validateValue(row,"ef119u2", "770"); |
|
} |
|
|
|
private static void validateErstePruefungsDaten(Map<String, Object> row) { |
|
validateValue(row, "ef126", "1999102"); |
|
validateValue(row, "ef127", "03"); |
|
validateValue(row, "ef128", "00"); |
|
validateValue(row, "ef129", "0"); |
|
validateValue(row, "ef130", "0"); |
|
validateValue(row, "ef131", "0"); |
|
validateValue(row, "ef132", "030"); |
|
validateValue(row, "ef133", "000"); |
|
validateValue(row, "ef134", "000"); |
|
validateValue(row, "ef147", "168"); |
|
validateValue(row, "ef148", ""); |
|
validateValue(row, "ef149", "04"); |
|
validateValue(row, "ef150", "660"); |
|
validateValue(row, "ef151", "661"); |
|
validateValue(row, "ef153", "662"); |
|
validateValue(row, "ef155", "11"); |
|
validateValue(row, "ef156", "2018"); |
|
validateValue(row, "ef157", "1"); |
|
validateValue(row, "ef158", "8"); |
|
} |
|
|
|
private static void validateZweitePruefungsDaten(Map<String, Object> row) { |
|
validateValue(row, "ef163", "1999107"); |
|
validateValue(row, "ef164", "03"); |
|
validateValue(row, "ef165", "00"); |
|
validateValue(row, "ef166", "0"); |
|
validateValue(row, "ef167", "0"); |
|
validateValue(row, "ef168", "0"); |
|
validateValue(row, "ef169", "030"); |
|
validateValue(row, "ef170", "000"); |
|
validateValue(row, "ef171", "000"); |
|
validateValue(row, "ef184", "168"); |
|
validateValue(row, "ef185", ""); |
|
validateValue(row, "ef186", "04"); |
|
validateValue(row, "ef187", ""); |
|
validateValue(row, "ef188", "664"); |
|
validateValue(row, "ef190", "665"); |
|
validateValue(row, "ef192", "10"); |
|
validateValue(row, "ef193", "2018"); |
|
validateValue(row, "ef194", "1"); |
|
validateValue(row, "ef195", "8"); |
|
} |
|
|
|
private static void validateValue(Map<String, Object> row, String key, String expected) { |
|
Object value = row.get(key); |
|
String strValue = value != null ? value.toString() : ""; |
|
assertEquals(key, expected, strValue); |
|
} |
|
|
|
@AfterClass |
|
public static void after() { |
|
KettleEnvironment.shutdown(); |
|
} |
|
|
|
}
|
|
|