|
18 | 18 |
|
19 | 19 | import static org.assertj.core.api.Assertions.assertThat; |
20 | 20 | import static org.mockito.ArgumentMatchers.any; |
| 21 | +import static org.mockito.ArgumentMatchers.eq; |
21 | 22 | import static org.mockito.BDDMockito.given; |
22 | 23 | import static org.mockito.BDDMockito.willAnswer; |
23 | 24 | import static org.mockito.Mockito.mock; |
| 25 | +import static org.mockito.Mockito.verify; |
24 | 26 |
|
25 | 27 | import java.util.Collections; |
26 | 28 | import java.util.concurrent.CountDownLatch; |
|
30 | 32 |
|
31 | 33 | import org.apache.kafka.clients.consumer.Consumer; |
32 | 34 | import org.apache.kafka.clients.consumer.ConsumerRecords; |
| 35 | +import org.apache.kafka.common.errors.GroupAuthorizationException; |
33 | 36 | import org.junit.jupiter.api.Test; |
34 | 37 |
|
35 | 38 | import org.springframework.kafka.core.ConsumerFactory; |
@@ -72,4 +75,33 @@ public void testCorrectContainerForConsumerError() throws InterruptedException { |
72 | 75 | container.stop(); |
73 | 76 | } |
74 | 77 |
|
| 78 | + @SuppressWarnings({ "rawtypes", "unchecked" }) |
| 79 | + @Test |
| 80 | + void testConsumerExitWhenNotAuthorized() throws InterruptedException { |
| 81 | + ConsumerFactory consumerFactory = mock(ConsumerFactory.class); |
| 82 | + final Consumer consumer = mock(Consumer.class); |
| 83 | + willAnswer(invocation -> { |
| 84 | + Thread.sleep(100); |
| 85 | + throw new GroupAuthorizationException("grp"); |
| 86 | + }).given(consumer).poll(any()); |
| 87 | + CountDownLatch latch = new CountDownLatch(1); |
| 88 | + willAnswer(invocation -> { |
| 89 | + latch.countDown(); |
| 90 | + return null; |
| 91 | + }).given(consumer).close(); |
| 92 | + given(consumerFactory.createConsumer(eq("grp"), eq(""), eq("-0"), any())) |
| 93 | + .willReturn(consumer); |
| 94 | + ContainerProperties containerProperties = new ContainerProperties("foo"); |
| 95 | + containerProperties.setGroupId("grp"); |
| 96 | + containerProperties.setMessageListener((MessageListener) record -> { }); |
| 97 | + containerProperties.setMissingTopicsFatal(false); |
| 98 | + containerProperties.setShutdownTimeout(10); |
| 99 | + ConcurrentMessageListenerContainer container = new ConcurrentMessageListenerContainer<>(consumerFactory, |
| 100 | + containerProperties); |
| 101 | + container.start(); |
| 102 | + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); |
| 103 | + verify(consumer).close(); |
| 104 | + container.stop(); |
| 105 | + } |
| 106 | + |
75 | 107 | } |
0 commit comments