package org.openflamingo.mapreduce.etl.groupby;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;
import org.junit.Before;
import org.junit.Test;
/**
* GroupBy Mapper와 Reducer에 대한 단위 테스트 케이스.
*
* @author Edward KIM
* @author Seo Ji Hye
* @since 1.0
*/
public class GroupByMapReduceTest {
private Mapper mapper;
private Reducer reducer;
private MapReduceDriver driver;
@Before
public void setUp() {
mapper = new GroupByMapper();
reducer = new GroupByReducer();
driver = new MapReduceDriver(mapper, reducer);
}
@Test
public void test1() {
Configuration conf = new Configuration();
conf.set("inputDelimiter", ",");
conf.set("keyValueDelimiter", ",");
conf.set("valueDelimiter", ",");
conf.set("allowDuplicate", "false");
conf.set("allowSort", "false");
conf.set("groupByKey", "0");
driver.setConfiguration(conf);
driver.withInput(new LongWritable(1), new Text("지혜,a,b"));
driver.withInput(new LongWritable(2), new Text("지혜,b"));
driver.withOutput(NullWritable.get(), new Text("지혜,a,b"));
driver.runTest();
}
@Test
public void testWithDuplicationTrue() {
Configuration conf = new Configuration();
conf.set("inputDelimiter", ",");
conf.set("keyValueDelimiter", ",");
conf.set("valueDelimiter", ",");
conf.set("allowDuplicate", "true");
conf.set("allowSort", "false");
conf.set("groupByKey", "0");
driver.setConfiguration(conf);
driver.withInput(new LongWritable(1), new Text("지혜,a,b"));
driver.withInput(new LongWritable(2), new Text("지혜,b"));
driver.withOutput(NullWritable.get(), new Text("지혜,a,b,b"));
driver.runTest();
}
@Test
public void testWithSort() {
Configuration conf = new Configuration();
conf.set("inputDelimiter", ",");
conf.set("keyValueDelimiter", ",");
conf.set("valueDelimiter", ",");
conf.set("allowDuplicate", "true");
conf.set("allowSort", "true");
conf.set("groupByKey", "0");
driver.setConfiguration(conf);
driver.withInput(new LongWritable(1), new Text("지혜,1,c,b"));
driver.withInput(new LongWritable(2), new Text("지혜,2,a,b"));
driver.withOutput(NullWritable.get(), new Text("지혜,1,2,a,b,b,c"));
driver.runTest();
}
@Test
public void test2() {
Configuration conf = new Configuration();
conf.set("inputDelimiter", ",");
conf.set("keyValueDelimiter", "\t");
conf.set("valueDelimiter", ",");
conf.set("allowDuplicate", "false");
conf.set("allowSort", "false");
conf.set("groupByKey", "1");
driver.setConfiguration(conf);
driver.withInput(new LongWritable(1), new Text("1,지혜,a"));
driver.withInput(new LongWritable(2), new Text("2,지혜,b"));
driver.withOutput(NullWritable.get(), new Text("지혜\t1,a,2,b"));
driver.runTest();
}
}