package com.zendesk.maxwell.producer; import com.codahale.metrics.Counter; import com.codahale.metrics.Meter; import com.codahale.metrics.Timer; import com.zendesk.maxwell.MaxwellConfig; import com.zendesk.maxwell.MaxwellContext; import com.zendesk.maxwell.replication.BinlogPosition; import com.zendesk.maxwell.replication.Position; import org.apache.kafka.clients.producer.RecordMetadata; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.errors.NotEnoughReplicasException; import org.junit.Test; import static org.mockito.Mockito.*; public class KafkaCallbackTest { @Test public void shouldIgnoreProducerErrorByDefault() { MaxwellContext context = mock(MaxwellContext.class); MaxwellConfig config = new MaxwellConfig(); when(context.getConfig()).thenReturn(config); AbstractAsyncProducer.CallbackCompleter cc = mock(AbstractAsyncProducer.CallbackCompleter.class); KafkaCallback callback = new KafkaCallback(cc, new Position(new BinlogPosition(1, "binlog-1"), 0L), "key", "value", new Timer(), new Counter(), new Counter(), new Meter(), new Meter(), context); NotEnoughReplicasException error = new NotEnoughReplicasException("blah"); callback.onCompletion(new RecordMetadata(new TopicPartition("topic", 1), 1, 1), error); verify(cc).markCompleted(); } @Test public void shouldTerminateWhenNotIgnoreProducerError() { MaxwellContext context = mock(MaxwellContext.class); MaxwellConfig config = new MaxwellConfig(); config.ignoreProducerError = false; when(context.getConfig()).thenReturn(config); AbstractAsyncProducer.CallbackCompleter cc = mock(AbstractAsyncProducer.CallbackCompleter.class); KafkaCallback callback = new KafkaCallback(cc, new Position(new BinlogPosition(1, "binlog-1"), 0L), "key", "value", new Timer(), new Counter(), new Counter(), new Meter(), new Meter(), context); NotEnoughReplicasException error = new NotEnoughReplicasException("blah"); callback.onCompletion(new RecordMetadata(new TopicPartition("topic", 1), 1, 1), error); verify(context).terminate(error); verifyZeroInteractions(cc); } }