Author: davsclaus Date: Tue Jun 2 10:02:11 2009 New Revision: 780991 URL: http://svn.apache.org/viewvc?rev=780991&view=rev Log: Added concurrency test.
Added: camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java (with props) Added: camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java?rev=780991&view=auto ============================================================================== --- camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java (added) +++ camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java Tue Jun 2 10:02:11 2009 @@ -0,0 +1,116 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.jdbc; + +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.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +/** + * @version $Revision$ + */ +public class JdbcProducerConcurrenctTest extends ContextTestSupport { + + protected DataSource ds; + private String driverClass = "org.hsqldb.jdbcDriver"; + private String url = "jdbc:hsqldb:mem:camel_jdbc"; + private String user = "sa"; + private String password = ""; + + public void testNoConcurrentProducers() throws Exception { + doSendMessages(1, 1); + } + + public void testConcurrentProducers() throws Exception { + doSendMessages(10, 5); + } + + 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 % 2; + return template.requestBody("direct:start", "select * from customer where id = " + id); + } + }); + responses.put(index, out); + } + + assertMockEndpointsSatisfied(); + + 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 % 2 == 0) { + assertEquals("jstrachan", columns.get("NAME")); + } else { + assertEquals("nsandhu", columns.get("NAME")); + } + } + } + + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry reg = super.createRegistry(); + reg.bind("testdb", ds); + return reg; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("direct:start").to("jdbc:testdb").to("mock:result"); + } + }; + } + + protected void setUp() throws Exception { + DriverManagerDataSource dataSource = new DriverManagerDataSource(url, user, password); + dataSource.setDriverClassName(driverClass); + ds = dataSource; + + JdbcTemplate jdbc = new JdbcTemplate(ds); + jdbc.execute("create table customer (id varchar(15), name varchar(10))"); + jdbc.execute("insert into customer values('0','jstrachan')"); + jdbc.execute("insert into customer values('1','nsandhu')"); + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + JdbcTemplate jdbc = new JdbcTemplate(ds); + jdbc.execute("drop table customer"); + } + +} Propchange: camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerConcurrenctTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date