package com.linkedin.camus.etl.kafka.coders;
import com.linkedin.camus.schemaregistry.SchemaRegistry;
import org.apache.avro.Schema;
import org.apache.avro.SchemaBuilder;
import org.junit.Test;
import java.nio.BufferUnderflowException;
import static org.junit.Assert.assertEquals;
import static org.easymock.EasyMock.*;
public class MessageDecoderHelperTest {
@Test
public void testWithSchema() {
SchemaRegistry schemaRegistry = createMock(SchemaRegistry.class);
Schema schema = SchemaBuilder.record("testRecord").namespace("my.name.space")
.fields().name("field").type().stringType().noDefault().endRecord();
expect(schemaRegistry.getSchemaByID("myTopic", "1751217253")).andReturn(schema);
replay(schemaRegistry);
KafkaAvroMessageDecoder kafkaAvroMessageDecoder = new KafkaAvroMessageDecoder();
final byte[] bytes = "whatever".getBytes();
bytes[0] = 0x0; // Magic byte
KafkaAvroMessageDecoder.MessageDecoderHelper messageDecoderHelper = kafkaAvroMessageDecoder.new MessageDecoderHelper(schemaRegistry, "myTopic", bytes);
KafkaAvroMessageDecoder.MessageDecoderHelper actualResult = messageDecoderHelper.invoke();
verify(schemaRegistry);
assertEquals("my.name.space", actualResult.getSchema().getNamespace());
assertEquals(5, actualResult.getStart());
assertEquals(bytes, actualResult.getBuffer().array());
assertEquals(3, actualResult.getLength());
}
@Test(expected = BufferUnderflowException.class)
public void testNoIdNoBody() {
SchemaRegistry schemaRegistry = createMock(SchemaRegistry.class);
replay(schemaRegistry);
KafkaAvroMessageDecoder kafkaAvroMessageDecoder = new KafkaAvroMessageDecoder();
final byte[] bytes = new byte[1];
bytes[0] = 0x0; // Magic byte
KafkaAvroMessageDecoder.MessageDecoderHelper messageDecoderHelper = kafkaAvroMessageDecoder.new MessageDecoderHelper(schemaRegistry, "myTopic", bytes);
messageDecoderHelper.invoke();
verify(schemaRegistry);
}
@Test(expected = IllegalArgumentException.class)
public void testWithNoMagicByte() {
SchemaRegistry schemaRegistry = createMock(SchemaRegistry.class);
KafkaAvroMessageDecoder kafkaAvroMessageDecoder = new KafkaAvroMessageDecoder();
KafkaAvroMessageDecoder.MessageDecoderHelper messageDecoderHelper = kafkaAvroMessageDecoder.new MessageDecoderHelper(schemaRegistry, "myTopic", "whatever".getBytes());
messageDecoderHelper.invoke();
}
@Test(expected = IllegalStateException.class)
public void testUnknownSchemaId() {
SchemaRegistry schemaRegistry = createMock(SchemaRegistry.class);
final byte[] bytes = "whatever".getBytes();
bytes[0] = 0x0; // Magic byte
KafkaAvroMessageDecoder kafkaAvroMessageDecoder = new KafkaAvroMessageDecoder();
KafkaAvroMessageDecoder.MessageDecoderHelper messageDecoderHelper = kafkaAvroMessageDecoder.new MessageDecoderHelper(schemaRegistry, "myTopic", bytes);
messageDecoderHelper.invoke();
}
}