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 11:56:56 UTC

svn commit: r780990 - /camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java

Author: davsclaus
Date: Tue Jun  2 09:56:56 2009
New Revision: 780990

URL: http://svn.apache.org/viewvc?rev=780990&view=rev
Log:
Added concurrency test.

Added:
    camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java   (contents, props changed)
      - copied, changed from r780964, camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java

Copied: camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java (from r780964, camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java?p2=camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java&p1=camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java&r1=780964&r2=780990&rev=780990&view=diff
==============================================================================
--- camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java (original)
+++ camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java Tue Jun  2 09:56:56 2009
@@ -16,25 +16,24 @@
  */
 package org.apache.camel.component.sql;
 
-import java.util.ArrayList;
 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 javax.sql.DataSource;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.springframework.dao.DataAccessException;
-import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.SingleConnectionDataSource;
 
 /**
  * @version $Revision$
  */
-public class SqlRouteTest extends ContextTestSupport {
+public class SqlProducerConcurrentTest extends ContextTestSupport {
     protected String driverClass = "org.hsqldb.jdbcDriver";
     protected String url = "jdbc:hsqldb:mem:camel_jdbc";
     protected String user = "sa";
@@ -42,105 +41,47 @@
     private DataSource ds;
     private JdbcTemplate jdbcTemplate;
 
-    public void testSimpleBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        template.sendBody("direct:simple", "GPL");
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Linux", row.get("PROJECT"));
-    }
-
-    public void testListBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        body.add("Camel");
-        template.sendBody("direct:list", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals(1, row.get("ID"));
-    }
-
-    public void testLowNumberOfParameter() throws Exception {
-        try {
-            template.sendBody("direct:list", "ASF");
-            fail();
-        } catch (RuntimeCamelException e) {
-            // should have DataAccessException thrown
-            assertTrue("Exception thrown is wrong", e.getCause() instanceof DataAccessException);
-        }
+    public void testNoConcurrentProducers() throws Exception {
+        doSendMessages(1, 1);
     }
 
-    public void testHighNumberOfParameter() throws Exception {
-        try {
-            template.sendBody("direct:simple", new Object[] {"ASF", "Foo"});
-            fail();
-        } catch (RuntimeCamelException e) {
-            // should have DataAccessException thrown
-            assertTrue("Exception thrown is wrong", e.getCause() instanceof DataAccessException);
-        }
+    public void testConcurrentProducers() throws Exception {
+        doSendMessages(10, 5);
     }
-    
-    public void testListResult() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedHeaderReceived(SqlConstants.SQL_ROW_COUNT, "2");
-        mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        template.sendBody("direct:simple", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        assertEquals(2, received.size());
-        Map row1 = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row1.get("PROJECT"));
-        Map row2 = assertIsInstanceOf(Map.class, received.get(1));
-        assertEquals("AMQ", row2.get("PROJECT"));
-    }
-
-    public void testListLimitedResult() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        template.sendBody("direct:simpleLimited", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        assertEquals(1, received.size());
-        Map row1 = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row1.get("PROJECT"));
-    }
-
-    public void testInsert() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
-        template.sendBody("direct:insert", new Object[] {10, "test", "test"});
-        mock.assertIsSatisfied();
-        try {
-            String projectName = (String)jdbcTemplate.queryForObject("select project from projects where id = 10", String.class);
-            assertEquals("test", projectName);
-        } catch (EmptyResultDataAccessException e) {
-            fail("no row inserted");
+
+    private void doSendMessages(int files, int poolSize) throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(files);
+
+        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 {
+                    int id = index % 3;
+                    return template.requestBody("direct:simple", "" + id);
+                }
+            });
+            responses.put(index, out);
         }
 
-        Integer actualUpdateCount = mock.getExchanges().get(0).getIn().getHeader(SqlConstants.SQL_UPDATE_COUNT, Integer.class);
-        assertEquals((Integer) 1, actualUpdateCount);
-    }
+        assertMockEndpointsSatisfied();
 
-    public void testNoBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        template.sendBody("direct:no-param", null);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row.get("PROJECT"));
+        assertEquals(files, responses.size());
+
+        for (int i = 0; i < files; i++) {
+            List rows = (List) responses.get(i).get();
+            Map columns = (Map) rows.get(0);
+            if (i % 3 == 0) {
+                assertEquals("Camel", columns.get("PROJECT"));
+            } else if (i % 3 == 1) {
+                assertEquals("AMQ", columns.get("PROJECT"));
+            } else {
+                assertEquals("Linux", columns.get("PROJECT"));
+            }
+        }
     }
-    
+
     protected void setUp() throws Exception {
         Class.forName(driverClass);
         super.setUp();
@@ -148,9 +89,9 @@
         jdbcTemplate = new JdbcTemplate(ds);
         jdbcTemplate.execute("create table projects (id integer primary key,"
                              + "project varchar(10), license varchar(5))");
-        jdbcTemplate.execute("insert into projects values (1, 'Camel', 'ASF')");
-        jdbcTemplate.execute("insert into projects values (2, 'AMQ', 'ASF')");
-        jdbcTemplate.execute("insert into projects values (3, 'Linux', 'GPL')");
+        jdbcTemplate.execute("insert into projects values (0, 'Camel', 'ASF')");
+        jdbcTemplate.execute("insert into projects values (1, 'AMQ', 'ASF')");
+        jdbcTemplate.execute("insert into projects values (2, 'Linux', 'GPL')");
     }
 
     protected void tearDown() throws Exception {
@@ -164,27 +105,11 @@
         return new RouteBuilder() {
             public void configure() {
                 ds = new SingleConnectionDataSource(url, user, password, true);
-
                 getContext().getComponent("sql", SqlComponent.class).setDataSource(ds);
 
-                errorHandler(noErrorHandler());
-                
-                from("direct:simple").to("sql:select * from projects where license = # order by id")
-                    .to("mock:result");
-
-                from("direct:list")
-                    .to("sql:select * from projects where license = # and project = # order by id")
-                    .to("mock:result");
-
-                from("direct:simpleLimited")
-                    .to("sql:select * from projects where license = # order by id?template.maxRows=1")
-                    .to("mock:result");
-
-                from("direct:insert").to("sql:insert into projects values (#, #, #)").to("mock:result");
-                
-                from("direct:no-param").to("sql:select * from projects order by id").to("mock:result");
+                from("direct:simple").to("sql:select * from projects where id = # order by id").to("mock:result");
             }
         };
     }
 
-}
+}
\ No newline at end of file

Propchange: camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerConcurrentTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date