/**
* DataCleaner (community edition)
* Copyright (C) 2014 Neopost - Customer Information Management
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.datacleaner.spark;
import static org.junit.Assert.*;
import java.io.File;
import java.net.URI;
import org.apache.metamodel.util.Resource;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.datacleaner.job.AnalysisJob;
import org.datacleaner.spark.utils.ResultFilePathUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
/**
* This class tests the path of the result specified in the job properties file
* or otherwise.
*/
public class JobResultPathTest {
@Rule
public TestName name = new TestName();
@Test
public void testResultPathAbolutePathSpecified() throws Exception {
final SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("DCTest - " + name.getMethodName());
try (JavaSparkContext sparkContext = new JavaSparkContext(sparkConf)) {
final SparkJobContext sparkJobContext = new SparkJobContext(URI.create("src/test/resources/conf_local.xml"),
URI.create("src/test/resources/vanilla-job.analysis.xml"),
URI.create("src/test/resources/jobProperties/jobAbsolutePath.properties"), sparkContext);
final AnalysisJob job = sparkJobContext.getAnalysisJob();
assertNotNull(job);
assertEquals("file:///target/results/myresult.analysis.result.dat",
sparkJobContext.getResultPath().toString());
assertEquals("vanilla-job", sparkJobContext.getJobName());
assertTrue(ResultFilePathUtils.getResultResource(sparkContext, sparkJobContext).getQualifiedPath()
.endsWith("results" + File.separator + "myresult.analysis.result.dat"));
}
}
@Test
public void testResultPathSpecifiedEmptyPath() throws Exception {
final SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("DCTest - " + name.getMethodName());
try (JavaSparkContext sparkContext = new JavaSparkContext(sparkConf)) {
final SparkJobContext sparkJobContext = new SparkJobContext(URI.create("src/test/resources/conf_local.xml"),
URI.create("src/test/resources/vanilla-job.analysis.xml"),
URI.create("src/test/resources/jobProperties/jobEmptyPath.properties"), sparkContext);
final AnalysisJob job = sparkJobContext.getAnalysisJob();
assertNotNull(job);
assertEquals(null, sparkJobContext.getResultPath());
final String analysisJobName = sparkJobContext.getJobName();
assertEquals("vanilla-job", analysisJobName);
final Resource resultResource = ResultFilePathUtils.getResultResource(sparkContext, sparkJobContext);
assertTrue(resultResource.getQualifiedPath().contains(analysisJobName));
}
}
@Test
public void testResultPathNameJustFolderSpecified() throws Exception {
final SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("DCTest - " + name.getMethodName());
try (JavaSparkContext sparkContext = new JavaSparkContext(sparkConf)) {
final SparkJobContext sparkJobContext = new SparkJobContext(URI.create("src/test/resources/conf_local.xml"),
URI.create("src/test/resources/vanilla-job.analysis.xml"),
URI.create("src/test/resources/jobProperties/jobRelativePath.properties"), sparkContext);
final AnalysisJob job = sparkJobContext.getAnalysisJob();
assertNotNull(job);
assertEquals("target", sparkJobContext.getResultPath().toString());
final String analysisJobName = sparkJobContext.getJobName();
assertEquals("vanilla-job", analysisJobName);
final Resource resultResource = ResultFilePathUtils.getResultResource(sparkContext, sparkJobContext);
assertTrue(resultResource.getQualifiedPath().contains(analysisJobName));
}
}
@Test
public void testResultPathNameNoVariableSpecified() throws Exception {
final SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("DCTest - " + name.getMethodName());
try (JavaSparkContext sparkContext = new JavaSparkContext(sparkConf)) {
final SparkJobContext sparkJobContext = new SparkJobContext(URI.create("src/test/resources/conf_local.xml"),
URI.create("src/test/resources/vanilla-job.analysis.xml"), null, sparkContext);
final AnalysisJob job = sparkJobContext.getAnalysisJob();
assertNotNull(job);
assertNull(sparkJobContext.getResultPath());
final String analysisJobName = sparkJobContext.getJobName();
assertEquals("vanilla-job", analysisJobName);
final Resource resultResource = ResultFilePathUtils.getResultResource(sparkContext, sparkJobContext);
final int lastIndexOfDash = resultResource.getQualifiedPath().lastIndexOf("-");
assertTrue(resultResource.getQualifiedPath().contains(analysisJobName));
assertTrue(resultResource.getQualifiedPath().substring(0, lastIndexOfDash)
.endsWith("datacleaner" + File.separator + "results" + File.separator + "vanilla-job"));
}
}
}