package com.thinkaurelius.faunus.mapreduce.sideeffect;
import com.thinkaurelius.faunus.BaseTest;
import com.thinkaurelius.faunus.FaunusVertex;
import com.thinkaurelius.faunus.Holder;
import com.thinkaurelius.faunus.Tokens;
import com.tinkerpop.blueprints.Direction;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static com.tinkerpop.blueprints.Direction.*;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class LinkMapReduceTest extends BaseTest {
MapReduceDriver<NullWritable, FaunusVertex, LongWritable, Holder, NullWritable, FaunusVertex> mapReduceDriver;
public void setUp() {
mapReduceDriver = new MapReduceDriver<NullWritable, FaunusVertex, LongWritable, Holder, NullWritable, FaunusVertex>();
mapReduceDriver.setMapper(new LinkMapReduce.Map());
mapReduceDriver.setCombiner(new LinkMapReduce.Combiner());
mapReduceDriver.setReducer(new LinkMapReduce.Reduce());
}
public void testKnowsCreatedTraversal() throws Exception {
Configuration config = LinkMapReduce.createConfiguration(Direction.IN, "knowsCreated", 0, null);
mapReduceDriver.withConfiguration(config);
Map<Long, FaunusVertex> graph = generateGraph(BaseTest.ExampleGraph.TINKERGRAPH, config);
for (FaunusVertex vertex : graph.values()) {
vertex.removeEdges(Tokens.Action.DROP, Direction.BOTH);
}
graph.get(3l).addPath((List) Arrays.asList(new FaunusVertex.MicroVertex(1l), new FaunusVertex.MicroVertex(3l)), false);
graph.get(5l).addPath((List) Arrays.asList(new FaunusVertex.MicroVertex(1l), new FaunusVertex.MicroVertex(5l)), false);
graph = runWithGraph(graph, mapReduceDriver);
assertEquals(asList(graph.get(1l).getEdges(OUT, "knowsCreated")).size(), 2);
assertEquals(asList(graph.get(1l).getEdges(BOTH)).size(), 2);
assertFalse(graph.get(2l).getEdges(BOTH).iterator().hasNext());
assertEquals(asList(graph.get(3l).getEdges(IN, "knowsCreated")).size(), 1);
assertEquals(asList(graph.get(3l).getEdges(BOTH)).size(), 1);
assertFalse(graph.get(4l).getEdges(BOTH).iterator().hasNext());
assertEquals(asList(graph.get(5l).getEdges(IN, "knowsCreated")).size(), 1);
assertEquals(asList(graph.get(5l).getEdges(BOTH)).size(), 1);
assertFalse(graph.get(6l).getEdges(BOTH).iterator().hasNext());
assertEquals(mapReduceDriver.getCounters().findCounter(LinkMapReduce.Counters.OUT_EDGES_CREATED).getValue(), 2);
assertEquals(mapReduceDriver.getCounters().findCounter(LinkMapReduce.Counters.IN_EDGES_CREATED).getValue(), 2);
}
public void testCreated2Traversal() throws Exception {
Configuration config = LinkMapReduce.createConfiguration(Direction.OUT, "created2", 0, null);
mapReduceDriver.withConfiguration(config);
Map<Long, FaunusVertex> graph = generateGraph(BaseTest.ExampleGraph.TINKERGRAPH, config);
for (FaunusVertex vertex : graph.values()) {
vertex.removeEdges(Tokens.Action.DROP, Direction.BOTH);
}
graph.get(3l).addPath((List) Arrays.asList(new FaunusVertex.MicroVertex(1l), new FaunusVertex.MicroVertex(3l)), false);
graph.get(5l).addPath((List) Arrays.asList(new FaunusVertex.MicroVertex(1l), new FaunusVertex.MicroVertex(5l)), false);
graph = runWithGraph(graph, mapReduceDriver);
assertEquals(asList(graph.get(1l).getEdges(IN, "created2")).size(), 2);
assertEquals(asList(graph.get(1l).getEdges(BOTH)).size(), 2);
assertFalse(graph.get(2l).getEdges(BOTH).iterator().hasNext());
assertEquals(asList(graph.get(3l).getEdges(OUT, "created2")).size(), 1);
assertEquals(asList(graph.get(3l).getEdges(BOTH)).size(), 1);
assertFalse(graph.get(4l).getEdges(BOTH).iterator().hasNext());
assertEquals(asList(graph.get(5l).getEdges(OUT, "created2")).size(), 1);
assertEquals(asList(graph.get(5l).getEdges(BOTH)).size(), 1);
assertFalse(graph.get(6l).getEdges(BOTH).iterator().hasNext());
assertEquals(mapReduceDriver.getCounters().findCounter(LinkMapReduce.Counters.OUT_EDGES_CREATED).getValue(), 2);
assertEquals(mapReduceDriver.getCounters().findCounter(LinkMapReduce.Counters.IN_EDGES_CREATED).getValue(), 2);
}
}