You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/06/02 12:26:21 UTC
svn commit: r780999 -
/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java
Author: davsclaus
Date: Tue Jun 2 10:26:21 2009
New Revision: 780999
URL: http://svn.apache.org/viewvc?rev=780999&view=rev
Log:
Added concurrency test.
Added:
camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java
- copied, changed from r780964, camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteTest.java
Copied: camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java (from r780964, camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java?p2=camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java&p1=camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteTest.java&r1=780964&r2=780999&rev=780999&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteTest.java (original)
+++ camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaProducerConcurrentTest.java Tue Jun 2 10:26:21 2009
@@ -17,11 +17,16 @@
package org.apache.camel.processor.jpa;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.examples.SendEmail;
import org.apache.camel.spring.SpringCamelContext;
import org.apache.camel.spring.SpringRouteBuilder;
@@ -37,20 +42,48 @@
/**
* @version $Revision$
*/
-public class JpaRouteTest extends ContextTestSupport {
+public class JpaProducerConcurrentTest extends ContextTestSupport {
protected static final String SELECT_ALL_STRING = "select x from " + SendEmail.class.getName() + " x";
protected ApplicationContext applicationContext;
protected JpaTemplate jpaTemplate;
- public void testRouteJpa() throws Exception {
- MockEndpoint mock = getMockEndpoint("mock:result");
- mock.expectedMessageCount(1);
+ public void testNoConcurrentProducers() throws Exception {
+ doSendMessages(1, 1);
+ }
+
+ public void testConcurrentProducers() throws Exception {
+ doSendMessages(10, 5);
+ }
- template.sendBody("direct:start", new SendEmail("someone@somewhere.org"));
+ private void doSendMessages(int files, int poolSize) throws Exception {
+ getMockEndpoint("mock:result").expectedMessageCount(files);
+ getMockEndpoint("mock:result").assertNoDuplicates(body());
+
+ ExecutorService executor = Executors.newFixedThreadPool(poolSize);
+ Map<Integer, Future> responses = new ConcurrentHashMap();
+ for (int i = 0; i < files; i++) {
+ final int index = i;
+ Future out = executor.submit(new Callable<Object>() {
+ public Object call() throws Exception {
+ template.sendBody("direct:start", new SendEmail("user" + index + "@somewhere.org"));
+ return null;
+ }
+ });
+ responses.put(index, out);
+ }
assertMockEndpointsSatisfied();
- assertEntityInDB();
+
+ assertEquals(files, responses.size());
+
+ // get them so they are complete
+ for (Future future : responses.values()) {
+ future.get();
+ }
+
+ // assert in the database
+ assertEntityInDB(files);
}
@Override
@@ -69,12 +102,12 @@
};
}
- private void assertEntityInDB() throws Exception {
+ private void assertEntityInDB(int number) throws Exception {
jpaTemplate = (JpaTemplate)applicationContext.getBean("jpaTemplate", JpaTemplate.class);
List list = jpaTemplate.find(SELECT_ALL_STRING);
- assertEquals(1, list.size());
-
+ assertEquals(number, list.size());
+
assertIsInstanceOf(SendEmail.class, list.get(0));
}