|
18 | 18 | package org.apache.rocketmq.client.java.impl.consumer; |
19 | 19 |
|
20 | 20 | import static org.junit.Assert.assertTrue; |
| 21 | +import static org.mockito.ArgumentMatchers.any; |
| 22 | +import static org.mockito.ArgumentMatchers.anyLong; |
21 | 23 | import static org.mockito.ArgumentMatchers.anyString; |
22 | 24 | import static org.mockito.Mockito.doReturn; |
23 | 25 | import static org.mockito.Mockito.spy; |
24 | 26 | import static org.mockito.Mockito.times; |
25 | 27 | import static org.mockito.Mockito.verify; |
26 | 28 |
|
| 29 | +import apache.rocketmq.v2.UpdateOffsetRequest; |
| 30 | +import apache.rocketmq.v2.UpdateOffsetResponse; |
27 | 31 | import java.time.Duration; |
28 | 32 | import java.util.ArrayList; |
29 | 33 | import java.util.List; |
|
38 | 42 | import org.apache.rocketmq.client.java.message.MessageViewImpl; |
39 | 43 | import org.apache.rocketmq.client.java.route.MessageQueueImpl; |
40 | 44 | import org.apache.rocketmq.client.java.route.TopicRouteData; |
| 45 | +import org.apache.rocketmq.client.java.rpc.RpcFuture; |
41 | 46 | import org.apache.rocketmq.client.java.tool.TestBase; |
42 | 47 | import org.junit.Assert; |
43 | 48 | import org.junit.Before; |
44 | 49 | import org.junit.Test; |
45 | 50 | import org.junit.runner.RunWith; |
46 | 51 | import org.mockito.junit.MockitoJUnitRunner; |
47 | 52 |
|
48 | | -@SuppressWarnings("resource") |
49 | 53 | @RunWith(MockitoJUnitRunner.class) |
50 | 54 | public class PullConsumerImplTest extends TestBase { |
51 | 55 |
|
@@ -252,4 +256,62 @@ public void onChanged(String topic, Set<MessageQueue> messageQueues) { |
252 | 256 | pullConsumer.registerMessageQueueChangeListenerByTopic(FAKE_TOPIC_0, listener); |
253 | 257 | verify(pullConsumer, times(1)).fetchMessageQueues(anyString()); |
254 | 258 | } |
| 259 | + |
| 260 | + @Test(expected = IllegalArgumentException.class) |
| 261 | + public void testSeekWithMessageQueueIsNotContained() { |
| 262 | + doReturn(true).when(pullConsumer).isRunning(); |
| 263 | + final MessageQueueImpl mq = fakeMessageQueueImpl(FAKE_TOPIC_0); |
| 264 | + pullConsumer.seek(mq, 1); |
| 265 | + } |
| 266 | + |
| 267 | + @Test |
| 268 | + public void testSeek() { |
| 269 | + doReturn(true).when(pullConsumer).isRunning(); |
| 270 | + MessageQueueImpl mq = fakeMessageQueueImpl(FAKE_TOPIC_0); |
| 271 | + List<MessageQueue> mqs = new ArrayList<>(); |
| 272 | + mqs.add(mq); |
| 273 | + pullConsumer.assign(mqs); |
| 274 | + pullConsumer.seek(mq, 1); |
| 275 | + verify(pullConsumer, times(1)).dropProcessQueue(any(MessageQueueImpl.class)); |
| 276 | + verify(pullConsumer, times(1)) |
| 277 | + .tryPullMessageByMessageQueueImmediately(any(MessageQueueImpl.class), any(FilterExpression.class), |
| 278 | + anyLong()); |
| 279 | + } |
| 280 | + |
| 281 | + @Test |
| 282 | + public void testSeekToBegin() throws ClientException { |
| 283 | + doReturn(true).when(pullConsumer).isRunning(); |
| 284 | + final MessageQueueImpl mq = fakeMessageQueueImpl(FAKE_TOPIC_0); |
| 285 | + List<MessageQueue> mqs = new ArrayList<>(); |
| 286 | + mqs.add(mq); |
| 287 | + pullConsumer.assign(mqs); |
| 288 | + doReturn(okQueryOffsetResponseFuture()).when(pullConsumer).queryOffset(any(MessageQueueImpl.class), |
| 289 | + any(OffsetPolicy.class)); |
| 290 | + pullConsumer.seekToBegin(mq); |
| 291 | + verify(pullConsumer, times(1)).queryOffset(any(MessageQueueImpl.class), |
| 292 | + any(OffsetPolicy.class)); |
| 293 | + } |
| 294 | + |
| 295 | + @Test |
| 296 | + public void testSeekToEnd() throws ClientException { |
| 297 | + doReturn(true).when(pullConsumer).isRunning(); |
| 298 | + final MessageQueueImpl mq = fakeMessageQueueImpl(FAKE_TOPIC_0); |
| 299 | + List<MessageQueue> mqs = new ArrayList<>(); |
| 300 | + mqs.add(mq); |
| 301 | + pullConsumer.assign(mqs); |
| 302 | + doReturn(okQueryOffsetResponseFuture()).when(pullConsumer).queryOffset(any(MessageQueueImpl.class), |
| 303 | + any(OffsetPolicy.class)); |
| 304 | + pullConsumer.seekToEnd(mq); |
| 305 | + verify(pullConsumer, times(1)).queryOffset(any(MessageQueueImpl.class), |
| 306 | + any(OffsetPolicy.class)); |
| 307 | + } |
| 308 | + |
| 309 | + @Test |
| 310 | + public void testCommit() throws ClientException { |
| 311 | + List<RpcFuture<UpdateOffsetRequest, UpdateOffsetResponse>> futures = new ArrayList<>(); |
| 312 | + final RpcFuture<UpdateOffsetRequest, UpdateOffsetResponse> future = okUpdateOffsetResponseFuture(); |
| 313 | + futures.add(future); |
| 314 | + doReturn(futures).when(pullConsumer).commit0(); |
| 315 | + pullConsumer.commit(); |
| 316 | + } |
255 | 317 | } |
0 commit comments