package com.skp.experiment.cf.als.hadoop;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;
import com.skp.experiment.cf.evaluate.hadoop.EvaluatorUtil;
import com.skp.experiment.common.MahoutTestCase;
/**
* This test cases is for integration test on Conv2IndexJob
* Conv2IndexJob consists of multiple jobs that has been already unit-tested.
* @author doyoungYoon
*
*/
public class Conv2IndexJobTest extends MahoutTestCase {
private File inputFile;
private File outputDir;
private File tempDir;
private int testSize = 10;
@Before
public void setUp() throws IOException {
inputFile = getTestTempFile("conv2IndexJob_in");
outputDir = getTestTempDir("conv2IndexJob_out");
tempDir = getTestTempDir("conv2IndexJob_tmp");
}
private void writeTestCase(File testFile) throws IOException {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < testSize; i++) {
if (i != 0) {
sb.append("\n");
}
sb.append((char)('a' + i)).append(",").append((char)('A' + i));
}
writeLines(testFile, sb.toString());
}
@Test
public void testMapsideJob() throws Exception {
writeTestCase(inputFile);
outputDir.delete();
Conv2IndexJob job = new Conv2IndexJob();
job.setConf(new Configuration());
job.run(new String[]{
"-i", inputFile.toString(), "-o", outputDir.toString(),
"--columnIndexs", "0,1", "--mapOnlyColumnIndexs", "0,1",
"--tempDir", tempDir.toString()
});
testColumnIndex(0);
testColumnIndex(1);
testResult();
}
//check column index
private void testColumnIndex(int index) throws IOException {
Path indexOutput = new Path(outputDir.toString() + "_index_new");
Map<String, String> lines =
ALSMatrixUtil.fetchTextFiles(new Path(indexOutput + "/" + index), ",", Arrays.asList(0), Arrays.asList(1));
assertTrue(lines.size() == testSize);
for (int i = 0; i < testSize; i++) {
char targetChar = index == 0 ? 'a' : 'A';
String expectedValue = String.valueOf((char)(targetChar + i));
assertTrue(lines.containsKey(String.valueOf(i)));
assertTrue(lines.get(String.valueOf(i)).equals(expectedValue));
}
}
// check output
private void testResult() throws IOException {
Map<String, String> lines =
ALSMatrixUtil.fetchTextFiles(new Path(outputDir.toString()), ",", Arrays.asList(0), Arrays.asList(1));
assertTrue(lines.size() == testSize);
for (int i = 0; i < testSize; i++) {
assertTrue(lines.containsKey(String.valueOf(i)));
assertTrue(lines.get(String.valueOf(i)).equals(String.valueOf(i)));
}
}
}