package com.linkedin.camus.etl.kafka.mapred; import java.io.IOException; import org.apache.hadoop.mapreduce.InputSplit; import org.apache.hadoop.mapreduce.TaskAttemptContext; import org.easymock.EasyMock; import com.linkedin.camus.coders.CamusWrapper; import com.linkedin.camus.coders.MessageDecoder; import com.linkedin.camus.etl.kafka.coders.MessageDecoderFactory; import com.linkedin.camus.schemaregistry.SchemaNotFoundException; public class EtlRecordReaderForUnitTest extends EtlRecordReader { public static enum DecoderType { REGULAR, SCHEMA_NOT_FOUND_30_PERCENT, OTHER_30_PERCENT; } public static DecoderType decoderType = DecoderType.REGULAR; public EtlRecordReaderForUnitTest(EtlInputFormatForUnitTest etlInputFormatForUnitTest, InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException { super(etlInputFormatForUnitTest, split, context); } @Override protected MessageDecoder createDecoder(String topic) { switch (decoderType) { case REGULAR: return MessageDecoderFactory.createMessageDecoder(context, topic); case SCHEMA_NOT_FOUND_30_PERCENT: return createMockDecoder30PercentSchemaNotFound(); case OTHER_30_PERCENT: return createMockDecoder30PercentOther(); default: throw new RuntimeException("decoder type undefined"); } } public static MessageDecoder createMockDecoder30PercentSchemaNotFound() { MessageDecoder mockDecoder = EasyMock.createNiceMock(MessageDecoder.class); EasyMock.expect(mockDecoder.decode(EasyMock.anyObject())).andThrow(new SchemaNotFoundException()).times(3); EasyMock.expect(mockDecoder.decode(EasyMock.anyObject())).andReturn(new CamusWrapper<String>("dummy")).times(7); EasyMock.replay(mockDecoder); return mockDecoder; } public static MessageDecoder createMockDecoder30PercentOther() { MessageDecoder mockDecoder = EasyMock.createNiceMock(MessageDecoder.class); EasyMock.expect(mockDecoder.decode(EasyMock.anyObject())).andThrow(new RuntimeException()).times(3); EasyMock.expect(mockDecoder.decode(EasyMock.anyObject())).andReturn(new CamusWrapper<String>("dummy")).times(7); EasyMock.replay(mockDecoder); return mockDecoder; } public static void reset() { decoderType = DecoderType.REGULAR; } }