package com.thinkaurelius.faunus.formats; 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 com.tinkerpop.blueprints.Vertex; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver; import java.util.Map; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class EdgeCopyMapReduceTest extends BaseTest { MapReduceDriver<NullWritable, FaunusVertex, LongWritable, Holder<FaunusVertex>, NullWritable, FaunusVertex> mapReduceDriver; public void setUp() { mapReduceDriver = new MapReduceDriver<NullWritable, FaunusVertex, LongWritable, Holder<FaunusVertex>, NullWritable, FaunusVertex>(); mapReduceDriver.setMapper(new EdgeCopyMapReduce.Map()); mapReduceDriver.setReducer(new EdgeCopyMapReduce.Reduce()); } public void testInversionWithTinkerGraphOutEdges() throws Exception { mapReduceDriver.setConfiguration(EdgeCopyMapReduce.createConfiguration(Direction.OUT)); Map<Long, FaunusVertex> halfGraph = BaseTest.generateGraph(ExampleGraph.TINKERGRAPH); for (FaunusVertex vertex : halfGraph.values()) { vertex.removeEdges(Tokens.Action.DROP, Direction.IN); } Map<Long, FaunusVertex> graph = runWithGraph(startPath(halfGraph, Vertex.class), mapReduceDriver); BaseTest.identicalStructure(graph, ExampleGraph.TINKERGRAPH); assertEquals(mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_COPIED).getValue(), mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_ADDED).getValue()); } public void testInversionWithTinkerGraphInEdges() throws Exception { mapReduceDriver.setConfiguration(EdgeCopyMapReduce.createConfiguration(Direction.IN)); Map<Long, FaunusVertex> halfGraph = BaseTest.generateGraph(ExampleGraph.TINKERGRAPH); for (FaunusVertex vertex : halfGraph.values()) { vertex.removeEdges(Tokens.Action.DROP, Direction.OUT); } Map<Long, FaunusVertex> graph = runWithGraph(startPath(halfGraph, Vertex.class), mapReduceDriver); BaseTest.identicalStructure(graph, ExampleGraph.TINKERGRAPH); assertEquals(mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_COPIED).getValue(), mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_ADDED).getValue()); } public void testInversionWithGraphOfTheGodsOutEdges() throws Exception { mapReduceDriver.setConfiguration(EdgeCopyMapReduce.createConfiguration(Direction.OUT)); Map<Long, FaunusVertex> halfGraph = BaseTest.generateGraph(ExampleGraph.GRAPH_OF_THE_GODS); for (FaunusVertex vertex : halfGraph.values()) { vertex.removeEdges(Tokens.Action.DROP, Direction.IN); } Map<Long, FaunusVertex> graph = runWithGraph(startPath(halfGraph, Vertex.class), mapReduceDriver); BaseTest.identicalStructure(graph, ExampleGraph.GRAPH_OF_THE_GODS); assertEquals(mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_COPIED).getValue(), mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_ADDED).getValue()); } public void testInversionWithGraphOfTheGodsInEdges() throws Exception { mapReduceDriver.setConfiguration(EdgeCopyMapReduce.createConfiguration(Direction.IN)); Map<Long, FaunusVertex> halfGraph = BaseTest.generateGraph(ExampleGraph.GRAPH_OF_THE_GODS); for (FaunusVertex vertex : halfGraph.values()) { vertex.removeEdges(Tokens.Action.DROP, Direction.OUT); } Map<Long, FaunusVertex> graph = runWithGraph(startPath(halfGraph, Vertex.class), mapReduceDriver); BaseTest.identicalStructure(graph, ExampleGraph.GRAPH_OF_THE_GODS); assertEquals(mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_COPIED).getValue(), mapReduceDriver.getCounters().findCounter(EdgeCopyMapReduce.Counters.EDGES_ADDED).getValue()); } }