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.
215 lines
8.9 KiB
215 lines
8.9 KiB
package de.superx.spring.batch; |
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertNotNull; |
|
import static org.junit.Assert.assertTrue; |
|
|
|
import java.io.File; |
|
import java.io.IOException; |
|
import java.io.StringReader; |
|
import java.io.StringWriter; |
|
import java.util.List; |
|
|
|
import javax.xml.parsers.DocumentBuilderFactory; |
|
import javax.xml.parsers.ParserConfigurationException; |
|
import javax.xml.transform.Source; |
|
import javax.xml.transform.Transformer; |
|
import javax.xml.transform.TransformerException; |
|
import javax.xml.transform.TransformerFactory; |
|
import javax.xml.transform.stream.StreamResult; |
|
import javax.xml.transform.stream.StreamSource; |
|
|
|
import org.junit.Before; |
|
import org.junit.Test; |
|
import org.springframework.batch.core.Job; |
|
import org.springframework.batch.core.job.flow.FlowJob; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
import org.springframework.jdbc.datasource.init.ScriptException; |
|
import org.w3c.dom.Document; |
|
import org.xml.sax.InputSource; |
|
import org.xml.sax.SAXException; |
|
|
|
import de.superx.BaseDbTest; |
|
import de.superx.dbt.UnsupportedPythonVersionException; |
|
import de.superx.job.ContainerNode; |
|
import de.superx.servlet.SuperXManager; |
|
import de.superx.spring.batch.tasklet.TaskletContext; |
|
import de.superx.spring.batch.util.StepCounter; |
|
import de.superx.spring.service.BatchJobDescriptionAdapter; |
|
import de.superx.spring.service.DbJobDescriptionAdapter; |
|
import de.superx.spring.service.EntityJobDescriptionSource; |
|
import de.superx.spring.service.JobDescriptionSource; |
|
import de.superx.util.PathAndFileUtils; |
|
|
|
public class EntityJobDescriptionSourceTest extends BaseDbTest { |
|
|
|
@Autowired |
|
DbJobDescriptionAdapter dbAdapter; |
|
|
|
@Autowired |
|
BatchJobDescriptionAdapter batchJobDecriptionAdapter; |
|
|
|
@Autowired |
|
JobDescriptionSource entityJobDescriptionSource; |
|
|
|
private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory |
|
.newInstance(); |
|
|
|
@Before |
|
public void init() { |
|
File webInfPath = new File(String.join(File.separator, "superx", "WEB-INF")); |
|
SuperXManager.setWEB_INFPfad(webInfPath.getAbsolutePath()); |
|
} |
|
|
|
@Test |
|
public void test() throws ScriptException { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
assertNotNull("Root node not empty", root); |
|
} |
|
|
|
@Test |
|
public void testEtlSteps() { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
assertEquals("Root node has etl-step children", 5, root.size()); |
|
} |
|
|
|
@Test |
|
public void testUnloadSteps() { |
|
ContainerNode root = entityJobDescriptionSource.getUnloadJob("sos"); |
|
assertNotNull("Root node not empty", root); |
|
} |
|
|
|
@Test |
|
public void testInstallSteps() { |
|
ContainerNode root = entityJobDescriptionSource.getInstallUpgradeJob("cob"); |
|
assertNotNull("Root node not empty", root); |
|
} |
|
|
|
@Test |
|
public void writeToDb() throws ScriptException { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
dbAdapter.writeToDb(root); |
|
} |
|
|
|
@Test |
|
public void writeInstallToDb() { |
|
ContainerNode root = entityJobDescriptionSource.getInstallUpgradeJob("cob"); |
|
dbAdapter.writeToDb(root); |
|
} |
|
|
|
// @Test |
|
public void writeUnloadToDb() throws ScriptException { |
|
ContainerNode root = entityJobDescriptionSource.getUnloadJob("sos"); |
|
dbAdapter.writeToDb(root); |
|
} |
|
|
|
@Test |
|
public void transformXmlToJob() throws ScriptException, UnsupportedPythonVersionException { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
Job job = batchJobDecriptionAdapter.transformToBatchJob(root, "hisinone", new StepCounter(), null, new TaskletContext()); |
|
assertNotNull("Job not empty", job); |
|
assertTrue("Job contains steps", ((FlowJob) job).getStepNames().size() > 0); |
|
} |
|
|
|
@Test |
|
public void transformXmlToUnloadJob() throws UnsupportedPythonVersionException { |
|
ContainerNode root = entityJobDescriptionSource.getUnloadJob("sos"); |
|
Job job = batchJobDecriptionAdapter.transformToBatchJob(root, "hisinone", new StepCounter(), null, new TaskletContext()); |
|
assertNotNull("Job not empty", job); |
|
assertTrue("Job contains steps", ((FlowJob) job).getStepNames().size() > 0); |
|
} |
|
|
|
@Test |
|
public void transformDbToJob() throws ScriptException, UnsupportedPythonVersionException { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
dbAdapter.writeToDb(root); |
|
ContainerNode rootFromDb = dbAdapter.getJobById("sos_load_and_transform"); |
|
assertNotNull("Job not empty", rootFromDb); |
|
Job job = batchJobDecriptionAdapter.transformToBatchJob(rootFromDb, "hisinone", new StepCounter(), null, new TaskletContext()); |
|
assertNotNull("Batch job not empty", job); |
|
assertTrue("Job contains steps", ((FlowJob) job).getStepNames().size() > 1); |
|
|
|
} |
|
|
|
@Test |
|
public void transformDbToUnloadJob() throws ScriptException, UnsupportedPythonVersionException { |
|
ContainerNode root = entityJobDescriptionSource.getUnloadJob("sos"); |
|
dbAdapter.writeToDb(root); |
|
ContainerNode rootFromDb = dbAdapter.getJobById("sos_unload"); |
|
assertNotNull("Job not empty", rootFromDb); |
|
Job job = batchJobDecriptionAdapter.transformToBatchJob(rootFromDb, "hisinone", new StepCounter(), null, new TaskletContext()); |
|
assertNotNull("Batch job not empty", job); |
|
assertTrue("Job contains steps", ((FlowJob) job).getStepNames().size() > 1); |
|
|
|
} |
|
|
|
@Test |
|
public void writeAllToDb() throws ScriptException { |
|
List<String> modules = List.of("kern", "zul", "cob", "fin", "ivs", "sva", "bau", "prom", "res"); |
|
for (String module : modules) { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob(module); |
|
dbAdapter.writeToDb(root); |
|
ContainerNode rootUnl = entityJobDescriptionSource.getUnloadJob(module); |
|
dbAdapter.writeToDb(rootUnl); |
|
} |
|
} |
|
|
|
@Test |
|
public void overwriteNonCustomJob() throws ScriptException { |
|
ContainerNode root = entityJobDescriptionSource.getLoadAndTransformJob("sos"); |
|
int jobTidOrig = dbAdapter.writeToDb(root); |
|
int jobTidNew = dbAdapter.writeToDb(root); |
|
ContainerNode rootUnl = entityJobDescriptionSource.getUnloadJob("sos"); |
|
int jobUnlTidOrig = dbAdapter.writeToDb(rootUnl); |
|
int jobUnlTidNew = dbAdapter.writeToDb(rootUnl); |
|
assertTrue("Old and new job tid not equal", jobTidOrig != jobTidNew); |
|
assertTrue("Old and new etl job tid not equal", jobUnlTidOrig != jobUnlTidNew); |
|
} |
|
|
|
@Test |
|
public void getEtlStepByExistingId() throws ScriptException { |
|
String id = "sos_stu_realtime_unload_special"; |
|
ContainerNode root = entityJobDescriptionSource.getJobById(id); |
|
assertNotNull("Root node is not null", root); |
|
assertTrue("Container has children", root.size() > 0); |
|
} |
|
|
|
@Test |
|
public void getEtlStepByNonExistingId() throws ScriptException { |
|
ContainerNode root = entityJobDescriptionSource.getJobById("foobar"); |
|
assertTrue("Root node is null", root == null); |
|
} |
|
|
|
@Test |
|
public void getAllManualEtlSteps() throws ScriptException { |
|
List<ContainerNode> manualEtlSteps = entityJobDescriptionSource.getSpecialJobs("sos"); |
|
assertEquals("Manual etl step count for sos", 8, manualEtlSteps.size()); |
|
} |
|
|
|
@Test |
|
public void readXmlFromDbi() { |
|
String id = "load_student_weighting"; |
|
String name = "Erweiterte Studierendengewichtung Regeln laden"; |
|
File dbiFile = PathAndFileUtils.getDbiFileForManualEtlStep("sos", id, "pg"); |
|
File xslFile = PathAndFileUtils.getXslFile("dbi_ulr.xsl"); |
|
Source xslSource = new StreamSource(xslFile); |
|
StringWriter writer = new StringWriter(); |
|
Transformer transformer; |
|
String result = null; |
|
List<ContainerNode> nodes = null; |
|
try { |
|
transformer = TransformerFactory.newDefaultInstance().newTransformer(xslSource); |
|
transformer.setParameter("id", id); |
|
transformer.setParameter("name", name); |
|
transformer.setParameter("systemInfoId", Integer.valueOf(130)); |
|
transformer.transform(new StreamSource(dbiFile), new StreamResult(writer)); |
|
result = writer.getBuffer().toString(); |
|
Document doc = documentBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(result))); |
|
// System.out.println(result); |
|
nodes = ((EntityJobDescriptionSource) entityJobDescriptionSource).convertToContainers("sos", doc); |
|
} catch (TransformerException | SAXException | IOException | ParserConfigurationException e) { |
|
e.printStackTrace(); |
|
} |
|
assertNotNull("Transform dbi to xml", result); |
|
assertNotNull("Transform dbi to ContainerNodes", nodes); |
|
} |
|
}
|
|
|