package tap.core; import java.io.File; import java.io.IOException; import org.junit.Assert; import org.junit.Test; import tap.*; import tap.core.MapOnlyTest.Record1; import tap.formats.tapproto.Testmsg; public class GroupingAndSortingTests { @Test public void Test1() { String[] args = {"GroupingAndSortingTest1", "-i", "share/test_data2.avro", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Record.class).reads(o.input).sortBy("group, extra, subsort").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.avro"); File f2 = new File("share/results/sortby_group_extra_subsort.avro"); Assert.assertTrue(f1.exists()); //file compare doesn't work for avro files...date? // Assert.assertTrue(f2.exists()); // Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test2() { String[] args = {"GroupingAndSortingTest2", "-i", "share/test_data2.avro", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Record.class).reads(o.input).groupBy("group").sortBy("extra, subsort").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.avro"); File f2 = new File("share/results/sortby_group_extra_subsort.avro"); Assert.assertTrue(f1.exists()); //file compare doesn't work for avro files...date? // Assert.assertTrue(f2.exists()); // Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test3() { String[] args = {"GroupingAndSortingTest3", "-i", "share/test_data2.avro", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Record.class).reads(o.input).reduce(Reducer.class).groupBy("group, extra, subsort").groupBy("group").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.avro"); File f2 = new File("share/results/summation_on_group.avro"); Assert.assertTrue(f1.exists()); // file compare doesn't work for avro files...date? // Assert.assertTrue(f2.exists()); // Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test4() { String[] args = {"GroupingAndSortingTest4", "-i", "share/test_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Testmsg.TestRecord.class).reads(o.input).reduce(Reducer2.class).groupBy("group, extra").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/groupby_group_extra.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test5() { String[] args = {"GroupingAndSortingTest5", "-i", "share/securities_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Testmsg.SecuritiesRecord.class).reads(o.input).reduce(Reducer3.class).sortBy("timestamp desc").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/sortby_timestamp_desc.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test6() { String[] args = {"GroupingAndSortingTest6", "-i", "share/securities_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Testmsg.SecuritiesRecord.class).reads(o.input).reduce(Reducer3.class).groupBy("exchange").sortBy("id, timestamp").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/groupby_exchange_sortby_id_timestamp.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test7() { String[] args = {"GroupingAndSortingTest7", "-i", "share/securities_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().of(Testmsg.SecuritiesRecord.class).reads(o.input).reduce(Reducer3.class).sortBy("exchange desc, strike").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/sortby_exchange_desc_strike.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } @Test public void Test8() { String[] args = {"GroupingAndSortingTest8", "-i", "share/securities_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); Phase phase1 = tap.createPhase().map(Mapper.class).reads(o.input).reduce(Reducer3.class).groupBy("id").sortBy("expiry").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/groupby_id_sortby_expiry.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } //no mapper, no reducer. We read type from tapproto file. @Test public void Test9() throws IOException { String[] args = {"GroupingAndSortingTest9", "-i", "share/test_data.tapproto", "-o", "/tmp/out", "-f"}; CommandOptions o = new CommandOptions(args); Tap tap = new Tap(o).named(o.program); tap.createPhase().reads(o.input).groupBy("group, extra").writes(o.output); int rc = tap.make(); Assert.assertEquals(0, rc); File f1 = new File(o.output+"/part-00000.tapproto"); File f2 = new File("share/results/groupby_group_extra.tapproto"); Assert.assertTrue(f1.exists()); Assert.assertTrue(f2.exists()); Assert.assertTrue(Utilities.fileContentsEquals(f1, f2)); } public static class Record { public String group; public String extra; public String subsort; public int value; } public static class SummaryRecord { public String group; public int total; } public static class Reducer extends TapReducer<Record, SummaryRecord> { static SummaryRecord outrec = new SummaryRecord(); public void reduce(Pipe<Record> in, Pipe<SummaryRecord> out) { outrec.total = 0; for(Record rec : in) { outrec.group = rec.group; outrec.total++; } out.put(outrec); // System.out.println(outrec.group + " " + outrec.total); } } public static class Reducer2 extends TapReducer<Testmsg.TestRecord, Testmsg.TestRecord> { public void reduce(Pipe<Testmsg.TestRecord> in, Pipe<Testmsg.TestRecord> out) { //System.out.println("**************"); for(Testmsg.TestRecord rec : in) { //System.out.println(rec.getGroup() + " " + rec.getExtra() + " " + rec.getSubsort()); out.put(rec); } } } public static class Reducer3 extends TapReducer<Testmsg.SecuritiesRecord, Testmsg.SecuritiesRecord> { public void reduce(Pipe<Testmsg.SecuritiesRecord> in, Pipe<Testmsg.SecuritiesRecord> out) { //System.out.println("************************"); for(Testmsg.SecuritiesRecord rec : in) { //System.out.println(rec.getTimestamp() + " " + rec.getExchange() + " " + rec.getId() + " " + rec.getDesc() + " " + rec.getStrike() + " " + //rec.getExpiry()); out.put(rec); } } } public static class Mapper extends TapMapper<Testmsg.SecuritiesRecord, Testmsg.SecuritiesRecord> { public void map(Testmsg.SecuritiesRecord msg, Pipe<Testmsg.SecuritiesRecord> out) { out.put(msg); } } }