package tap.core;
import static org.junit.Assert.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.Date;
import java.util.StringTokenizer;
import org.joda.time.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import tap.CommandOptions;
import tap.Phase;
import tap.Pipe;
import tap.Tap;
import tap.TapMapper;
import tap.TapReducer;
import tap.formats.tapproto.Testmsg;
public class MapOnlyTest {
//@Test
public void MapOnlyTest1() {
String[] args = {"MaponlyTest1", "-i", "share/test_data.avro", "-o", "/tmp/out", "-f"};
CommandOptions o = new CommandOptions(args);
Tap tap = new Tap(o).named(o.program);
Phase phase1 = tap.createPhase().reads(o.input).map(MapperRecord1Record2.class);
int rc = tap.make();
Assert.assertEquals(0, rc);
File f = new File(o.output+"/part-00000.avro");
System.out.println(f.length());
Assert.assertTrue(f.exists());
//should compare against pre-defined output.
}
//@Test
public void MapOnlyTest2() {
String[] args = {"MaponlyTest2", "-i", "share/test_data.avro", "-o", "/tmp/out", "-f"};
CommandOptions o = new CommandOptions(args);
Tap tap = new Tap(o).named(o.program);
Phase phase1 = tap.createPhase().reads(o.input).map(MapperRecord1Record2.class);
Phase phase2 = tap.createPhase().reads(phase1).map(MapperRecord2Record2.class).reduce(ReducerRecord2String.class).groupBy("extra2").writes(o.output);
int rc = tap.make();
Assert.assertEquals(0, rc);
File f = new File(o.output+"/part-00000");
System.out.println(f.length());
Assert.assertTrue(f.exists());
//should compare against pre-defined output.
}
@Test
public void MapOnlyTest3() {
String[] args = {"MaponlyTest3", "-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().reads(o.input).map(MapperTestRecordTestRecord.class);
int rc = tap.make();
Assert.assertEquals(0, rc);
File f = new File(o.output+"/part-00000.tapproto");
System.out.println(f.length());
Assert.assertTrue(f.exists());
//should compare against pre-defined output.
}
@Test
public void MapOnlyTest4() {
String[] args = {"MaponlyTest4", "-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().reads(o.input).map(MapperTestRecordTestRecord.class);
Phase phase2 = tap.createPhase().reads(phase1).map(MapperTestRecordTestRecord.class).reduce(ReducerTestRecordTestRecord.class).sortBy("group, extra, subsort").writes(o.output);
int rc = tap.make();
Assert.assertEquals(0, rc);
File f = new File(o.output+"/part-00000.tapproto");
System.out.println(f.length());
Assert.assertTrue(f.exists());
//should compare against pre-defined output.
}
public static class Record1{
public String group;
public String extra;
public String subsort;
}
public static class Record2
{
public String group2;
public String extra2;
}
public static class MapperRecord1Record1 extends TapMapper<Record1, Record1>
{
static Record1 outrec = new Record1();
public void map(Record1 in, Pipe<Record1> out) {
outrec.group = in.group;
outrec.extra = in.extra;
outrec.subsort = in.subsort;
out.put(outrec);
}
}
public static class MapperRecord2Record2 extends TapMapper<Record2, Record2>
{
static Record2 outrec = new Record2();
public void map(Record2 in, Pipe<Record2> out) {
outrec.group2 = in.group2;
outrec.extra2 = in.extra2;
out.put(outrec);
}
}
public static class MapperRecord1Record2 extends TapMapper<Record1, Record2>
{
static Record2 outrec= new Record2();
public void map(Record1 in, Pipe<Record2> out)
{
outrec.group2 = in.group;
outrec.extra2 = in.extra;
out.put(outrec);
}
}
public static class ReducerRecord1Record1 extends TapReducer<Record1, Record1>
{
static Record1 outrec = new Record1();
public void reduce(Pipe<Record1> in, Pipe<Record1> out) {
for (Record1 rec : in) {
outrec.group = rec.group;
outrec.extra = rec.extra;
outrec.subsort = rec.subsort;
out.put(outrec);
}
}
}
public static class ReducerRecord1Record2 extends TapReducer<Record1, Record2>
{
static Record2 outrec = new Record2();
public void reduce(Pipe<Record1> in, Pipe<Record2> out) {
for (Record1 rec : in) {
outrec.group2 = rec.group;
outrec.extra2 = rec.extra;
out.put(outrec);
}
}
}
public static class ReducerRecord2Record2 extends TapReducer<Record2, Record2>
{
static Record2 outrec = new Record2();
public void reduce(Pipe<Record2> in, Pipe<Record2> out) {
for (Record2 rec : in) {
outrec.group2 = rec.group2;
outrec.extra2 = rec.extra2;
out.put(outrec);
}
}
}
public static class ReducerRecord2String extends TapReducer<Record2,String>
{
private String s;
@Override
public void reduce(Pipe<Record2> in, Pipe<String> out) {
for (Record2 rec : in) {
s = new String(rec.group2 + " " + rec.extra2);
out.put(s);
}
}
}
public static class MapperTestRecordTestRecord extends TapMapper<Testmsg.TestRecord, Testmsg.TestRecord>
{
public void map(Testmsg.TestRecord msg, Pipe<Testmsg.TestRecord> out)
{
out.put(msg);
}
}
public static class ReducerTestRecordTestRecord extends TapReducer<Testmsg.TestRecord, Testmsg.TestRecord>
{
public void reduce(Pipe<Testmsg.TestRecord> in, Pipe<Testmsg.TestRecord> out)
{
for(Testmsg.TestRecord msg : in)
{
out.put(msg);
}
}
}
}