|
20 | 20 | import java.lang.reflect.Method; |
21 | 21 | import java.lang.reflect.ParameterizedType; |
22 | 22 |
|
| 23 | +import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; |
| 24 | +import org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl; |
| 25 | +import org.apache.rocketmq.client.impl.factory.MQClientInstance; |
| 26 | +import org.apache.rocketmq.client.producer.DefaultMQProducer; |
| 27 | +import org.apache.rocketmq.client.producer.SendCallback; |
23 | 28 | import org.apache.rocketmq.common.message.Message; |
| 29 | +import org.apache.rocketmq.common.message.MessageAccessor; |
| 30 | +import org.apache.rocketmq.common.message.MessageConst; |
24 | 31 | import org.apache.rocketmq.common.message.MessageExt; |
25 | | -import org.apache.rocketmq.remoting.protocol.RemotingSerializable; |
26 | 32 | import org.apache.rocketmq.spring.core.RocketMQListener; |
27 | 33 | import org.apache.rocketmq.spring.core.RocketMQReplyListener; |
28 | 34 | import org.junit.Test; |
|
34 | 40 | import java.util.ArrayList; |
35 | 41 | import java.util.Arrays; |
36 | 42 | import java.util.Date; |
37 | | -import org.springframework.messaging.support.MessageBuilder; |
38 | 43 |
|
39 | 44 | import static org.assertj.core.api.Assertions.assertThat; |
| 45 | +import static org.mockito.ArgumentMatchers.any; |
| 46 | +import static org.mockito.Mockito.doNothing; |
| 47 | +import static org.mockito.Mockito.mock; |
| 48 | +import static org.mockito.Mockito.when; |
40 | 49 |
|
41 | 50 | public class DefaultRocketMQListenerContainerTest { |
42 | 51 | @Test |
@@ -184,6 +193,45 @@ public String onMessage(ArrayList<Date> message) { |
184 | 193 | assertThat(methodParameter.getParameterType() == ArrayList.class); |
185 | 194 | } |
186 | 195 |
|
| 196 | + @Test |
| 197 | + public void testHandleMessage() throws Exception { |
| 198 | + DefaultRocketMQListenerContainer listenerContainer = new DefaultRocketMQListenerContainer(); |
| 199 | + Method handleMessage = DefaultRocketMQListenerContainer.class.getDeclaredMethod("handleMessage", MessageExt.class); |
| 200 | + handleMessage.setAccessible(true); |
| 201 | + listenerContainer.setRocketMQListener(new RocketMQListener<String>() { |
| 202 | + @Override |
| 203 | + public void onMessage(String message) { |
| 204 | + } |
| 205 | + }); |
| 206 | + Field messageType = DefaultRocketMQListenerContainer.class.getDeclaredField("messageType"); |
| 207 | + messageType.setAccessible(true); |
| 208 | + messageType.set(listenerContainer, String.class); |
| 209 | + MessageExt messageExt = new MessageExt(0, System.currentTimeMillis(), null, System.currentTimeMillis(), null, null); |
| 210 | + MessageAccessor.putProperty(messageExt, MessageConst.PROPERTY_CLUSTER, "defaultCluster"); |
| 211 | + messageExt.setBody("hello".getBytes()); |
| 212 | + handleMessage.invoke(listenerContainer, messageExt); |
| 213 | + |
| 214 | + // reply message |
| 215 | + listenerContainer.setRocketMQListener(null); |
| 216 | + DefaultMQPushConsumer consumer = mock(DefaultMQPushConsumer.class); |
| 217 | + DefaultMQPushConsumerImpl pushConsumer = mock(DefaultMQPushConsumerImpl.class); |
| 218 | + MQClientInstance mqClientInstance = mock(MQClientInstance.class); |
| 219 | + DefaultMQProducer producer = mock(DefaultMQProducer.class); |
| 220 | + when(consumer.getDefaultMQPushConsumerImpl()).thenReturn(pushConsumer); |
| 221 | + when(pushConsumer.getmQClientFactory()).thenReturn(mqClientInstance); |
| 222 | + when(mqClientInstance.getDefaultMQProducer()).thenReturn(producer); |
| 223 | + listenerContainer.setConsumer(consumer); |
| 224 | + listenerContainer.setMessageConverter(new CompositeMessageConverter(Arrays.asList(new StringMessageConverter(), new MappingJackson2MessageConverter()))); |
| 225 | + doNothing().when(producer).send(any(MessageExt.class), any(SendCallback.class)); |
| 226 | + listenerContainer.setRocketMQReplyListener(new RocketMQReplyListener<String, String>() { |
| 227 | + @Override |
| 228 | + public String onMessage(String message) { |
| 229 | + return "test"; |
| 230 | + } |
| 231 | + }); |
| 232 | + handleMessage.invoke(listenerContainer, messageExt); |
| 233 | + } |
| 234 | + |
187 | 235 | class User { |
188 | 236 | private String userName; |
189 | 237 | private int userAge; |
|
0 commit comments