@Test public void testReceiveMessageWithJmsTemplate() { JmsMessageReceiver receiver = new JmsMessageReceiver(); receiver.setJmsTemplate(jmsTemplate); Map<String, Object> controlHeaders = new HashMap<String, Object>(); final Message<String> controlMessage = MessageBuilder.withPayload("<TestRequest><Message>Hello World!</Message></TestRequest>") .copyHeaders(controlHeaders) .build(); reset(jmsTemplate, connectionFactory, destination); jmsTemplate.setReceiveTimeout(5000L); expectLastCall().once(); expect(jmsTemplate.getDefaultDestination()).andReturn(destination).atLeastOnce(); expect(jmsTemplate.receiveAndConvert()).andReturn(controlMessage); replay(jmsTemplate, connectionFactory, destination); Message<?> receivedMessage = receiver.receive(); Assert.assertTrue(receivedMessage.equals(controlMessage)); verify(jmsTemplate, connectionFactory, destination); }
@Test public void testReceiveMessageTimeout() throws JMSException { JmsMessageReceiver receiver = new JmsMessageReceiver(); receiver.setConnectionFactory(connectionFactory); receiver.setDestination(destination); reset(jmsTemplate, connectionFactory, destination, connection, session, messageConsumer); expect(connectionFactory.createConnection()).andReturn(connection).once(); expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session).once(); expect(session.getTransacted()).andReturn(false).once(); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE).once(); expect(session.createConsumer(destination, null)).andReturn(messageConsumer).once(); expect(messageConsumer.receive(5000L)).andReturn(null).once(); connection.start(); expectLastCall().once(); replay(jmsTemplate, connectionFactory, destination, connection, session, messageConsumer); try { receiver.receive(); } catch (ActionTimeoutException e) { Assert.assertTrue( e.getMessage().startsWith("Action timed out while receiving JMS message on")); return; } Assert.fail( "Missing " + CitrusRuntimeException.class + " because of receiveing message timeout"); }
public void testWithMessageHeaders() throws JMSException { JmsMessageReceiver receiver = new JmsMessageReceiver(); receiver.setConnectionFactory(connectionFactory); receiver.setDestination(destination); Map<String, Object> controlHeaders = new HashMap<String, Object>(); controlHeaders.put("Operation", "sayHello"); final Message<String> controlMessage = MessageBuilder.withPayload("<TestRequest><Message>Hello World!</Message></TestRequest>") .copyHeaders(controlHeaders) .build(); Map<String, String> headers = new HashMap<String, String>(); headers.put("Operation", "sayHello"); reset(jmsTemplate, connectionFactory, destination, connection, session, messageConsumer); expect(connectionFactory.createConnection()).andReturn(connection).once(); expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session).once(); expect(session.getTransacted()).andReturn(false).once(); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE).once(); expect(session.createConsumer(destination, null)).andReturn(messageConsumer).once(); connection.start(); expectLastCall().once(); expect(messageConsumer.receive(5000L)) .andReturn( new TextMessageImpl( "<TestRequest><Message>Hello World!</Message></TestRequest>", headers)) .once(); replay(jmsTemplate, connectionFactory, destination, connection, session, messageConsumer); Message<?> receivedMessage = receiver.receive(); Assert.assertEquals(receivedMessage.getPayload(), controlMessage.getPayload()); Assert.assertTrue(receivedMessage.getHeaders().containsKey("Operation")); Assert.assertTrue(receivedMessage.getHeaders().get("Operation").equals("sayHello")); verify(jmsTemplate, connectionFactory, destination, connection, session, messageConsumer); }