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));
     }