/** * */ package org.jentrata.spa.jms; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; import java.util.Properties; import junit.framework.Assert; import hk.hku.cecid.piazza.commons.message.Message; import hk.hku.cecid.piazza.commons.message.MessageHandler; import hk.hku.cecid.piazza.commons.module.Module; import hk.hku.cecid.piazza.commons.test.PluginTest; import org.apache.camel.Exchange; import org.jentrata.spa.jms.module.JMSComponent; import org.junit.Test; /** * @author aaronwalker * */ public class JMSComponentTest extends PluginTest { @Override protected void configure() { System.setProperty("jentrata.activemq.broker.uri","broker:(vm://localhost?broker.persistent=false&useJmx=false)?persistent=false&useJmx=false"); } @Test public void testJMSComponentMessageHandler() throws Exception { Module m = new Module("modules/jms-test-module.xml"); assertThat(m.getComponent("jmsTest"), is(instanceOf(JMSComponent.class))); JMSComponent jms = (JMSComponent) m.getComponent("jmsTest"); MessageHandler handler = mock(MessageHandler.class); Properties props = new Properties(); props.setProperty("errorUri", "jmsTest:queue:testDLQ"); jms.registerHandler("jmsTest:queue:testQueue", handler,props); jms.getProducer().sendBody("jmsTest:queue:testQueue", "test".getBytes()); Thread.sleep(100); verify(handler).onMessage((Message) any()); } @Test public void testJMSComponentMessageHandlerError() throws Exception { Module m = new Module("modules/jms-test-module.xml"); assertThat(m.getComponent("jmsTest"), is(instanceOf(JMSComponent.class))); JMSComponent jms = (JMSComponent) m.getComponent("jmsTest"); MessageHandler handler = mock(MessageHandler.class); doThrow(new RuntimeException("bad message")).when(handler).onMessage((Message) any()); Properties props = new Properties(); props.setProperty("errorUri", "jmsTest:queue:testDLQ"); jms.registerHandler("jmsTest:queue:testQueue2", handler,props); jms.getProducer().sendBody("jmsTest:queue:testQueue2", "test".getBytes()); Thread.sleep(100); verify(handler).onMessage((Message) any()); Exchange ex = jms.getConsumer().receive("jmsTest:queue:testDLQ",1000); assertThat(ex,notNullValue()); } @Test(expected=Exception.class) public void testJMSComponentMessageHandlerRegisterFailure() throws Exception { Module m = new Module("modules/jms-test-module.xml"); assertThat(m.getComponent("jmsTest"), is(instanceOf(JMSComponent.class))); JMSComponent jms = (JMSComponent) m.getComponent("jmsTest"); MessageHandler handler = mock(MessageHandler.class); jms.registerHandler("blash:queue:testQueue", handler,new Properties()); //Shouldn't get here Assert.fail(); } @Test public void testJMSComponentWith2MessageHandlers() throws Exception { Module m = new Module("modules/jms-test-module.xml"); assertThat(m.getComponent("jmsTest"), is(instanceOf(JMSComponent.class))); JMSComponent jms = (JMSComponent) m.getComponent("jmsTest"); MessageHandler handler1 = mock(MessageHandler.class); MessageHandler handler2 = mock(MessageHandler.class); jms.registerHandler("jmsTest:queue:testQueue3", handler1,new Properties()); jms.registerHandler("jmsTest:queue:testQueue4", handler2,new Properties()); jms.getProducer().sendBody("jmsTest:queue:testQueue3", "test".getBytes()); jms.getProducer().sendBody("jmsTest:queue:testQueue4", "test2".getBytes()); Thread.sleep(100); verify(handler1).onMessage((Message) any()); verify(handler2).onMessage((Message) any()); } }