package com.scaleunlimited.cascading; import static org.junit.Assert.*; import java.util.List; import org.apache.hadoop.mapred.JobConf; import org.junit.Test; import cascading.flow.Flow; import cascading.flow.FlowConnector; import cascading.flow.FlowDef; import cascading.flow.FlowStep; import cascading.operation.Debug; import cascading.pipe.Each; import cascading.pipe.GroupBy; import cascading.pipe.Pipe; import cascading.tap.SinkMode; import cascading.tuple.Fields; import com.scaleunlimited.cascading.hadoop.HadoopPlatform; import com.scaleunlimited.cascading.local.LocalPlatform; public class FlowUtilsTest { private static final String FLOW_NAME = "FlowUtilsTest"; @Test public void testNamingStepsForMapOnlyJob() throws Exception { String stepName = "Debug (1/1) /path/to/dest"; JobConf conf = (JobConf)testNamingStepsForMapOnlyJob(new HadoopPlatform(this.getClass()), stepName); assertEquals(FLOW_NAME + "/" + stepName, conf.getJobName()); testNamingStepsForMapOnlyJob(new LocalPlatform(this.getClass()), "Debug local"); } private Object testNamingStepsForMapOnlyJob(BasePlatform platform, String expectedStepName) throws Exception { Pipe p = new Pipe("map-only"); p = new Each(p, new Debug()); return makeAndNameFlow(platform, expectedStepName, p); } @Test public void testNamingStepsForGroupingJob() throws Exception { String stepName = "grouping (1/1) /path/to/dest"; JobConf conf = (JobConf)testNamingStepsForGroupingJob(new HadoopPlatform(this.getClass()), stepName); assertEquals(FLOW_NAME + "/" + stepName, conf.getJobName()); testNamingStepsForGroupingJob(new LocalPlatform(this.getClass()), "grouping local"); } private Object testNamingStepsForGroupingJob(BasePlatform platform, String expectedStepName) throws Exception { Pipe p = new Pipe("grouping"); p = new GroupBy("grouping", p, new Fields("key")); return makeAndNameFlow(platform, expectedStepName, p); } private Object makeAndNameFlow(BasePlatform platform, String expectedStepName, Pipe p) throws Exception { FlowDef flowDef = new FlowDef() .setName(FLOW_NAME) .addSource(p, platform.makeTap(platform.makeBinaryScheme(new Fields("key")), platform.makePath("/path/to/source"))) .addTailSink(p, platform.makeTap(platform.makeBinaryScheme(new Fields("key")), platform.makePath("/path/to/dest"), SinkMode.REPLACE)); Flow f = platform.makeFlowConnector().connect(flowDef); FlowUtils.nameFlowSteps(f); List<FlowStep> steps = f.getFlowSteps(); assertEquals(1, steps.size()); FlowStep fs = steps.get(0); assertEquals(expectedStepName, fs.getName()); return fs.getConfig(); } }