package edu.isi.karma.mapreduce.driver; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.net.URISyntaxException; import java.util.LinkedList; import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mrunit.mapreduce.MapDriver; import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver; import org.apache.hadoop.mrunit.mapreduce.ReduceDriver; import org.apache.hadoop.mrunit.types.Pair; import org.junit.After; import org.junit.Before; import org.junit.Test; public class TestN3MapReduce extends TestRDFMapReduce { @Before public void setUp() throws Exception { Mapper<Writable, Text, Text, Text> mapper = new N3Mapper(); Reducer<Text,Text,Text,Text> reducer = new N3Reducer(); mapDriver = MapDriver.newMapDriver(mapper); reduceDriver = ReduceDriver.newReduceDriver(reducer); mapReduceDriver = MapReduceDriver.newMapReduceDriver(mapper, reducer); } @After public void tearDown() throws Exception { } @Test public void testMap() throws IOException, URISyntaxException { org.apache.hadoop.conf.Configuration conf = mapDriver.getConfiguration(); conf.set("model.uri", TestN3MapReduce.class.getClassLoader().getResource("people-model.ttl").toURI().toString()); mapDriver.withInput(new Text("people.json"), new Text(IOUtils.toString(TestN3MapReduce.class.getClassLoader().getResourceAsStream("data/json/people.json")))); List<Pair<Text,Text>> results = mapDriver.run(); assertTrue(results.size() > 1); } @Test public void testMapWithInputTypeSpecified() throws IOException, URISyntaxException { org.apache.hadoop.conf.Configuration conf = mapDriver.getConfiguration(); conf.set("model.uri", TestN3MapReduce.class.getClassLoader().getResource("people-model.ttl").toURI().toString()); conf.set("karma.input.type", "JSON"); mapDriver.withInput(new Text("people.somethingsomething"), new Text(IOUtils.toString(TestN3MapReduce.class.getClassLoader().getResourceAsStream("data/json/people.json")))); List<Pair<Text,Text>> results = mapDriver.run(); assertTrue(results.size() > 1); } @Test public void testMapWithBadInputTypeSpecified() throws IOException, URISyntaxException { org.apache.hadoop.conf.Configuration conf = mapDriver.getConfiguration(); conf.set("model.uri", TestN3MapReduce.class.getClassLoader().getResource("people-model.ttl").toURI().toString()); conf.set("karma.input.type", "XML"); mapDriver.withInput(new Text("people.somethingsomething"), new Text(IOUtils.toString(TestN3MapReduce.class.getClassLoader().getResourceAsStream("data/json/people.json")))); List<Pair<Text,Text>> results = mapDriver.run(); assertTrue(results.size() == 0); } @Test public void testReduce() throws IOException { List<Pair<Text,List<Text>>> inputs = new LinkedList<>(); List<Pair<Text,Text>> outputs = new LinkedList<>(); List<Text> jasonTriples = new LinkedList<>(); List<Text> sufjanTriples = new LinkedList<>(); jasonTriples.add(new Text("<http://ex.com/jason> foaf:firstName \"Jason\" .")); jasonTriples.add(new Text("<http://ex.com/jason> foaf:lastName \"Slepicka\" .")); jasonTriples.add(new Text("<http://ex.com/jason> foaf:lastName \"Slepicka\" .")); sufjanTriples.add(new Text("<http://ex.com/sufjan> foaf:firstName \"Sufjan\" .")); sufjanTriples.add(new Text("<http://ex.com/sufjan> foaf:firstName \"Sufjan\" .")); sufjanTriples.add(new Text("<http://ex.com/sufjan> foaf:lastName \"Slepicka\" .")); inputs.add(new Pair<>(new Text("<http://ex.com/jason>"), jasonTriples)); inputs.add(new Pair<>(new Text("<http://ex.com/sufjan>"), sufjanTriples)); reduceDriver.withAll(inputs); outputs.add(new Pair<>(new Text("<http://ex.com/jason>"), new Text("<http://ex.com/jason> foaf:lastName \"Slepicka\" .\n<http://ex.com/jason> foaf:firstName \"Jason\" .\n"))); outputs.add(new Pair<>(new Text("<http://ex.com/sufjan>"), new Text("<http://ex.com/sufjan> foaf:lastName \"Slepicka\" .\n<http://ex.com/sufjan> foaf:firstName \"Sufjan\" .\n"))); reduceDriver.addAllOutput(outputs); reduceDriver.runTest(); } @Test public void testMapReduce() throws IOException, URISyntaxException { org.apache.hadoop.conf.Configuration conf = mapReduceDriver.getConfiguration(); conf.set("model.uri", TestN3MapReduce.class.getClassLoader().getResource("people-model.ttl").toURI().toString()); mapReduceDriver.withInput(new Text("people.json"), new Text(IOUtils.toString(TestN3MapReduce.class.getClassLoader().getResourceAsStream("data/json/people.json")))); mapReduceDriver.addAllOutput(getPairsFromFile("output/people.output.ttl")); mapReduceDriver.runTest(false); } }