package eu.dnetlib.iis.wf.referenceextraction.project; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.google.common.io.Files; import eu.dnetlib.iis.common.schemas.ReportEntry; import eu.dnetlib.iis.common.utils.AvroAssertTestUtil; import eu.dnetlib.iis.common.utils.AvroTestUtils; import eu.dnetlib.iis.common.utils.JsonAvroTestUtils; import eu.dnetlib.iis.importer.schemas.Project; import eu.dnetlib.iis.referenceextraction.project.schemas.DocumentToProject; import pl.edu.icm.sparkutils.test.SparkJob; import pl.edu.icm.sparkutils.test.SparkJobBuilder; import pl.edu.icm.sparkutils.test.SparkJobExecutor; /** * * @author mhorst * */ public class ProjectFunderReportJobTest { private SparkJobExecutor executor = new SparkJobExecutor(); private File workingDir; private String inputProjectDirPath; private String inputDocumentToProjectDirPath; private String outputReportDirPath; @Before public void before() { workingDir = Files.createTempDir(); inputProjectDirPath = workingDir + "/spark_project_referenceextraction_report/input_project"; inputDocumentToProjectDirPath = workingDir + "/spark_project_referenceextraction_report/input_document_to_project"; outputReportDirPath = workingDir + "/spark_project_referenceextraction_report/output_report"; } @After public void after() throws IOException { FileUtils.deleteDirectory(workingDir); } //------------------------ TESTS -------------------------- @Test public void generateReport() throws IOException { // given String jsonInputProjectFile = "src/test/resources/eu/dnetlib/iis/wf/referenceextraction/project/funder_report/data/input_project.json"; String jsonInputDocumentToProjectFile = "src/test/resources/eu/dnetlib/iis/wf/referenceextraction/project/funder_report/data/input_document_to_project.json"; String jsonOutputReportFile = "src/test/resources/eu/dnetlib/iis/wf/referenceextraction/project/funder_report/data/output_report.json"; AvroTestUtils.createLocalAvroDataStore( JsonAvroTestUtils.readJsonDataStore(jsonInputProjectFile, Project.class), inputProjectDirPath); AvroTestUtils.createLocalAvroDataStore( JsonAvroTestUtils.readJsonDataStore(jsonInputDocumentToProjectFile, DocumentToProject.class), inputDocumentToProjectDirPath); // execute executor.execute(buildProjectFunderReportJob(inputProjectDirPath, inputDocumentToProjectDirPath, outputReportDirPath)); // assert AvroAssertTestUtil.assertEqualsWithJsonIgnoreOrder(outputReportDirPath, jsonOutputReportFile, ReportEntry.class); } //------------------------ PRIVATE -------------------------- private SparkJob buildProjectFunderReportJob(String inputProjectDirPath, String inputDocumentToProjectDirPath, String outputReportDirPath) { SparkJob sparkJob = SparkJobBuilder .create() .setAppName("Spark Report Generator") .setMainClass(ProjectFunderReportJob.class) .addArg("-inputProjectAvroPath", inputProjectDirPath) .addArg("-inputDocumentToProjectAvroPath", inputDocumentToProjectDirPath) .addArg("-outputReportPath", outputReportDirPath) .addArg("-reportKeyTemplate", "processing.referenceExtraction.project.reference.byfunder.#{funder}") .addJobProperty("spark.driver.host", "localhost") .build(); return sparkJob; } }