Hello all,
I am trying to unit test the following method, which is essentially the
Sending to multiple JMS destinations from one endpoint example from the
camel website. Since the Exchange object is a param and contains the
result, I'm having trouble Mocking it. The below test fails at the ***
line. actualTopicName is null :( . Essentially all the publish method is
doing, is adding headers to the In Msg of the Exchange object.
Appreciate the advice.
Geoff
@Test
public void testSingleTopicPublish(){
MarketData md = createMarketData();
Exchange exchange = mock(Exchange.class);
Message inMsg = mock(Message.class);
when(exchange.getIn()).thenReturn(inMsg);
when(inMsg.getBody(Publishable.class)).thenReturn(md);
String singleTopic = "TEST.TOPIC";
destinationResolver = new
JMSDestinationResolver(singleTopic,PublishType.SINGLE_DESTINATION);
destinationResolver.publish(exchange);
Message actualInMsg = exchange.getIn();
String actualTopicName = (String)
actualInMsg.getHeader(JmsConstants.JMS_DESTINATION_NAME);
assertEquals(singleTopic, actualTopicName);
************************************
}
/**
* Send exchange to a JMS Destination determined at Runtime
* @param exchange
*/
public void publish(Exchange exchange){
Publishable publishable=
exchange.getIn().getBody(Publishable.class);
Map<String,String> origMsgHeaders =
publishable.getPublishProperties();
Map<String,Object> msgHeaders = new HashMap<String,
Object>(origMsgHeaders);
String destinationName = null;
//If we are publishing on muiltiple topics and there is
no destinationPrefix can't publish this msg
if(publishType == PublishType.MULTIPLE_DESTINATIONS){
if(!StringUtils.isEmpty(publishable.getPublishTopicName())){
destinationName = String.format("%s.%s",
destinationPrefix, publishable.getPublishTopicName());
}else{
log.error("Empty topicName for msg: " +
publishable);
}
}
else{
//The we are publishing on 1 topic, grab it from
config
destinationName = destinationPrefix;
}
if(log.isDebugEnabled()){
log.debug("Destination is " + destinationName);
}
msgHeaders.put(JmsConstants.JMS_DESTINATION_NAME,
destinationName);
exchange.getIn().setHeaders(msgHeaders);
}
===============================================================================
Please access the attached hyperlink for an important electronic communications
disclaimer:
http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
===============================================================================