package com.taobao.metamorphosis.client.extension.spring; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import org.junit.Test; import com.taobao.metamorphosis.Message; import com.taobao.metamorphosis.MessageAccessor; import com.taobao.metamorphosis.exception.MetaClientException; public class DefaultMessageListenerUnitTest { private static class MyMessageListener extends DefaultMessageListener<String> { MetaqMessage<String> recvMsg; @Override public void onReceiveMessages(MetaqMessage<String> msg) { this.recvMsg = msg; } } @Test public void testOnReceiveMessagesWithConverter() throws Exception { MyMessageListener listener = new MyMessageListener(); JavaSerializationMessageBodyConverter messageBodyConverter = new JavaSerializationMessageBodyConverter(); listener.setMessageBodyConverter(messageBodyConverter); listener.afterPropertiesSet(); Message message = new Message("test", messageBodyConverter.toByteArray("hello world")); listener.recieveMessages(message); assertNotNull(listener.recvMsg); assertEquals("hello world", listener.recvMsg.getBody()); assertSame(message, listener.recvMsg.getRawMessage()); } @Test public void testConvertMessageBodyFailure() throws Exception { MyMessageListener listener = new MyMessageListener(); JavaSerializationMessageBodyConverter messageBodyConverter = new JavaSerializationMessageBodyConverter(); listener.setMessageBodyConverter(new MessageBodyConverter<String>() { @Override public byte[] toByteArray(String body) throws MetaClientException { throw new RuntimeException(); } @Override public String fromByteArray(byte[] bs) throws MetaClientException { throw new RuntimeException(); } }); listener.afterPropertiesSet(); Message message = new Message("test", messageBodyConverter.toByteArray("hello world")); listener.recieveMessages(message); assertNull(listener.recvMsg); assertTrue(MessageAccessor.isRollbackOnly(message)); } @Test public void testInitDestroy() throws Exception { MyMessageListener listener = new MyMessageListener(); listener.setProcessThreads(10); assertNull(listener.getExecutor()); listener.afterPropertiesSet(); assertNotNull(listener.getExecutor()); listener.destroy(); assertNull(listener.getExecutor()); } @Test public void testOnReceiveMessagesWithoutConverter() throws Exception { MyMessageListener listener = new MyMessageListener(); JavaSerializationMessageBodyConverter messageBodyConverter = new JavaSerializationMessageBodyConverter(); listener.afterPropertiesSet(); Message message = new Message("test", messageBodyConverter.toByteArray("hello world")); listener.recieveMessages(message); assertNotNull(listener.recvMsg); assertNull(listener.recvMsg.getBody()); assertSame(message, listener.recvMsg.getRawMessage()); } }