package com.thinkaurelius.faunus.mapreduce.sideeffect; import com.thinkaurelius.faunus.BaseTest; import com.thinkaurelius.faunus.FaunusVertex; import com.tinkerpop.blueprints.Vertex; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver; import java.util.Map; /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ public class SideEffectMapTest extends BaseTest { MapReduceDriver<NullWritable, FaunusVertex, NullWritable, FaunusVertex, NullWritable, FaunusVertex> mapReduceDriver; public void setUp() { mapReduceDriver = new MapReduceDriver<NullWritable, FaunusVertex, NullWritable, FaunusVertex, NullWritable, FaunusVertex>(); mapReduceDriver.setMapper(new SideEffectMap.Map()); mapReduceDriver.setReducer(new Reducer<NullWritable, FaunusVertex, NullWritable, FaunusVertex>()); } /* // TODO: Assumptions around breadth- vs. depth-first traversal public void testVertexSideEffect() throws Exception { Configuration config = new Configuration(); config.setClass(SideEffectMap.CLASS, Vertex.class, Element.class); config.set(SideEffectMap.CLOSURE, "{it -> if(it.count) {it.count++} else {it.count=1}}"); config.setBoolean(FaunusCompiler.PATH_ENABLED, false); mapReduceDriver.withConfiguration(config); Map<Long, FaunusVertex> graph = runWithGraph(startPath(generateGraph(BaseTest.ExampleGraph.TINKERGRAPH, config), Vertex.class, 1, 1, 1, 2, 3, 3), mapReduceDriver); assertEquals(graph.size(), 6); assertEquals(graph.get(1l).getProperty("count"), 3); assertEquals(graph.get(2l).getProperty("count"), 1); assertEquals(graph.get(3l).getProperty("count"), 2); assertNull(graph.get(4l).getProperty("count")); assertNull(graph.get(5l).getProperty("count")); assertNull(graph.get(6l).getProperty("count")); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.VERTICES_PROCESSED).getValue(), 3); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.OUT_EDGES_PROCESSED).getValue(), 0); }*/ public void testVertexSideEffectOutDegree() throws Exception { Configuration config = SideEffectMap.createConfiguration(Vertex.class, "{it -> it.degree = it.outE().count()}"); mapReduceDriver.withConfiguration(config); Map<Long, FaunusVertex> results = runWithGraph(startPath(generateGraph(BaseTest.ExampleGraph.TINKERGRAPH, config), Vertex.class), mapReduceDriver); assertEquals(results.size(), 6); assertEquals(results.get(1l).getProperty("degree"), 3l); assertEquals(results.get(2l).getProperty("degree"), 0l); assertEquals(results.get(3l).getProperty("degree"), 0l); assertEquals(results.get(4l).getProperty("degree"), 2l); assertEquals(results.get(5l).getProperty("degree"), 0l); assertEquals(results.get(6l).getProperty("degree"), 1l); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.VERTICES_PROCESSED).getValue(), 6); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.OUT_EDGES_PROCESSED).getValue(), 0); } public void testVertexSideEffectInDegree() throws Exception { Configuration config = SideEffectMap.createConfiguration(Vertex.class, "{it -> it.degree = it.inE.count()}"); mapReduceDriver.withConfiguration(config); Map<Long, FaunusVertex> results = runWithGraph(startPath(generateGraph(BaseTest.ExampleGraph.TINKERGRAPH, config), Vertex.class), mapReduceDriver); assertEquals(results.size(), 6); assertEquals(results.get(1l).getProperty("degree"), 0l); assertEquals(results.get(2l).getProperty("degree"), 1l); assertEquals(results.get(3l).getProperty("degree"), 3l); assertEquals(results.get(4l).getProperty("degree"), 1l); assertEquals(results.get(5l).getProperty("degree"), 1l); assertEquals(results.get(6l).getProperty("degree"), 0l); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.VERTICES_PROCESSED).getValue(), 6); assertEquals(mapReduceDriver.getCounters().findCounter(SideEffectMap.Counters.OUT_EDGES_PROCESSED).getValue(), 0); } }