@Test
public void subscriberLosesPartitionAssignment() {
KafkaSubscriber<String> subscriber = new KafkaSubscriber<>(new MessageCallback(),
"topic", "groupId", false,
KafkaSubscriber.OffsetReset.Earliest, 1, 1, 1,
5000, 5000, KafkaSubscriber.QueueType.OffsetBlocking, 1000);
KafkaTopicInfo message1 = new KafkaTopicInfo("topic", 0, 1, null);
KafkaTopicInfo message2 = new KafkaTopicInfo("topic", 0, 2, null);
KafkaTopicInfo message3 = new KafkaTopicInfo("topic", 1, 1, null);
KafkaTopicInfo message4 = new KafkaTopicInfo("topic", 1, 2, null);
subscriber.consume(message1);
subscriber.consume(message2);
subscriber.consume(message3);
subscriber.consume(message4);
KafkaConsumer realConsumer = mock(KafkaConsumer.class);
class ArgMatcher implements ArgumentMatcher<Map<TopicPartition, OffsetAndMetadata>> {
@Override
public boolean matches(Map<TopicPartition, OffsetAndMetadata> arg) {
OffsetAndMetadata oam = arg.values().iterator().next();
return oam.offset() == 3;
}
}
doThrow(new CommitFailedException()).when(realConsumer).commitSync(argThat(new ArgMatcher()));
subscriber.realConsumer = realConsumer;
subscriber.offsetCommitter = new OffsetCommitter(realConsumer, Clock.systemUTC());
subscriber.consumeMessages();
}