package com.tddinaction.j2ee.jms;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueReceiver;
import org.junit.Before;
import org.junit.Test;
public class TestActiveMq extends AbstractJmsTestCase implements
MessageListener, SearchService {
private String[] searchKeywords = new String[] { "needle" };
private String[] resultsFromSearchService = new String[] { "one",
"two" };
private String[] submittedSearchResults;
private CountDownLatch resultsReceived;
@Before
public void createSynchronizers() throws Exception {
resultsReceived = new CountDownLatch(1);
}
public void onMessage(Message message) {
try {
submittedSearchResults = (String[]) ((ObjectMessage) message)
.getObject();
} catch (JMSException e) {
throw new RuntimeException(e);
}
resultsReceived.countDown();
}
public String[] search(String[] keywords) {
List<String> expected = Arrays.asList(searchKeywords);
List<String> actual = Arrays.asList(keywords);
assertEquals("Wrong search keywords.", expected, actual);
return resultsFromSearchService;
}
@Test
public void testSearchResultsAreSubmittedToResultsQueue()
throws Exception {
Queue resultsQueue = queueSession.createQueue("Results");
QueueReceiver receiver = queueSession
.createReceiver(resultsQueue);
receiver.setMessageListener(this);
SearchListenerBean bean = new SearchListenerBean();
bean.connectionFactory = queueConnectionFactory;
bean.resultsQueue = resultsQueue;
bean.searchService = this;
bean.onMessage(queueSession
.createObjectMessage(searchKeywords));
resultsReceived.await(1, TimeUnit.SECONDS);
assertEquals(Arrays.asList(resultsFromSearchService), Arrays
.asList(submittedSearchResults));
}
@Test
public void test2() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test3() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test4() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test5() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test6() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test7() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test8() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test9() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
@Test
public void test10() throws Exception {
testSearchResultsAreSubmittedToResultsQueue();
}
}