[jboss-svn-commits] JBL Code SVN: r5780 - in labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb: listeners util
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 11 12:54:28 EDT 2006
Author: tfennelly
Date: 2006-08-11 12:54:24 -0400 (Fri, 11 Aug 2006)
New Revision: 5780
Added:
labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/DbUtils.java
Modified:
labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerConfig1.xml
labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerTest.java
labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/ListenerUtils.java
Log:
Added the SQL Table Poller tests and te DbUtils.
Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerConfig1.xml
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerConfig1.xml 2006-08-11 16:43:04 UTC (rev 5779)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerConfig1.xml 2006-08-11 16:54:24 UTC (rev 5780)
@@ -8,19 +8,20 @@
>
<PollSqlTableExample
- listenerClass="org.jboss.soa.esb.listeners.SqlTablePoller"
- actionClass="org.jboss.soa.esb.actions.DummySqlRowAction"
- pollLatencySecs="2"
- maxThreads="2"
+ listenerClass="org.jboss.soa.esb.listeners.SqlTablePoller"
+ actionClass="org.jboss.soa.esb.actions.DummySqlRowAction"
+ pollLatencySecs="2"
+ maxThreads="2"
connection-url="@db.url@"
driver-class="@db.driver@"
user-name="@db.user@"
password="@db.password@"
- tableName="test_notif_table"
- selectFields="oid,ref,msg"
- keyFields="oid,ref"
- inProcessField="status"
- whereCondition="src='pepe'"
+
+ tableName="test_poll_table"
+ selectFields="ref,msg,val2"
+ keyFields="ref"
+ inProcessField="status"
+ whereCondition="src='pepe'"
>
<NotificationList type="OK">
<target class="NotifyFiles">
Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerTest.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerTest.java 2006-08-11 16:43:04 UTC (rev 5779)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/SQLTablePollerTest.java 2006-08-11 16:54:24 UTC (rev 5780)
@@ -22,9 +22,12 @@
package org.jboss.soa.esb.listeners;
import java.io.File;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import org.jboss.soa.esb.helpers.KeyValuePair;
import org.jboss.soa.esb.util.ClassUtils;
+import org.jboss.soa.esb.util.DbUtils;
import org.jboss.soa.esb.util.FileUtils;
import org.jboss.soa.esb.util.JMSClientUtil;
import org.jboss.soa.esb.util.ListenerUtils;
@@ -44,13 +47,21 @@
protected void setUp() throws Exception {
// Create the directories required by the test...
notifyDir = FileUtils.createTestDir("notifyDir");
+
+ createTable();
// Start the listener...
listenersMgr = ListenerUtils.startListeners(ClassUtils.toResourcePath(getClass().getPackage()) + "/SQLTablePollerConfig1.xml");
}
- public void test() throws InterruptedException {
+ public void test() throws InterruptedException, SQLException {
+ // Insert the row into the table and wait for the status to go to "P" (Pending) to "D" (Done)...
+ int insertCount = DbUtils.executeUpdate("insert into test_poll_table values ('SSSS','ref1','An arbitrary message', '1111111111','2222222222','P')");
+
+ assertEquals("Failed to create row in table.", 1, insertCount);
+ DbUtils.assertNonEmptyResultSet("select * from test_poll_table where src='SSSS' and ref='ref1' and status='D'", 10000);
+
// There should have been no exceptions...
listenersMgr.assertNotInException();
@@ -60,7 +71,16 @@
}
protected void tearDown() throws Exception {
+ dropTable();
+
// Remove the directories required by the test...
FileUtils.assertCanDelete(notifyDir, 10000);
}
+
+ private void createTable() {
+ DbUtils.execute("CREATE TABLE test_poll_table (src text, ref text, msg text, val1 text, val2 text, status text)");
+ }
+ private void dropTable() {
+ DbUtils.execute("DROP TABLE test_poll_table");
+ }
}
Added: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/DbUtils.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/DbUtils.java 2006-08-11 16:43:04 UTC (rev 5779)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/DbUtils.java 2006-08-11 16:54:24 UTC (rev 5780)
@@ -0,0 +1,258 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.soa.esb.util;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+import org.jboss.soa.esb.connection.ConnectionPool;
+import org.jboss.soa.esb.connection.ConnectionPoolFactory;
+import org.jboss.soa.esb.connection.ConnectionProperties;
+
+/**
+ * Database Utilitise.
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public abstract class DbUtils {
+
+ private static Logger logger = Logger.getLogger(DbUtils.class);
+
+ private static String DB_DRIVER = "org.jboss.esb.db.driver";
+ private static String DB_URL = "org.jboss.esb.db.url";
+ private static String DB_USER = "org.jboss.esb.db.user";
+ private static String DB_PASSWORD = "org.jboss.esb.db.password";
+
+ public static String dbDriver = System.getProperty(DB_DRIVER);
+ public static String dbUrl = System.getProperty(DB_URL);
+ public static String dbUser = System.getProperty(DB_USER);
+ public static String dbPassword = System.getProperty(DB_PASSWORD);
+
+ private static Properties properties = new Properties();
+
+ static {
+ properties.put(ConnectionProperties.DRIVER_CLASSNAME, dbDriver);
+ properties.put(ConnectionProperties.CONNECTION_URL, dbUrl);
+ properties.put(ConnectionProperties.USERNAME, dbUser);
+ properties.put(ConnectionProperties.PASSWORD, dbPassword);
+ }
+
+ /**
+ * Execute an SQL statement.
+ * <p/>
+ * Calls {@link Statement#execute(java.lang.String)}. Manages getting and cleaning up of all
+ * DB resources needed to execute the SQL.
+ *
+ * @param sql SQL to Execute.
+ * @return The return value from {@link Statement#execute(java.lang.String)}.
+ */
+ public static boolean execute(String sql) {
+ DbResources dbResources = null;
+
+ try {
+ dbResources = new DbResources();
+ return dbResources.stat.execute(sql);
+ } catch (SQLException e) {
+ TestCaseUtils.logAndFail("SQL execution failed: " + sql, logger, e);
+ } finally {
+ dbResources.close();
+ }
+
+ return false;
+ }
+
+ /**
+ * Execute an SQL statement.
+ * <p/>
+ * Calls {@link Statement#executeQuery(java.lang.String)}. Manages getting and cleaning up of all
+ * DB resources needed to execute the SQL.
+ *
+ * @param query SQL to Execute.
+ * @return Returns a Proxied {@link ResultSet} object which manages closing of all associated DB resources
+ * on the call to {@link ResultSet#close()} to the returned {@link ResultSet} object.
+ */
+ public static ResultSet executeQuery(String query) {
+ DbResources dbResources = null;
+ ResultSet resultSet = null;
+
+ try {
+ dbResources = new DbResources();
+ resultSet = dbResources.stat.executeQuery(query);
+
+ // Proxy the calls to the ResultSet object so we can close the DbResources
+ // when the call to close the resultset is made.
+ return (ResultSet) Proxy.newProxyInstance(ResultSet.class.getClassLoader(),
+ new Class[] { ResultSet.class },
+ new ResultSetInvocationHandler(resultSet, dbResources));
+ } catch (SQLException e) {
+ // Close the ResultSet and DbResources objects...
+ closeResultSet(resultSet);
+ dbResources.close();
+ TestCaseUtils.logAndFail("SQL execution failed: " + query, logger, e);
+ }
+
+ return null;
+ }
+
+ /**
+ * Execute an SQL statement.
+ * <p/>
+ * Calls {@link Statement#executeUpdate(java.lang.String)}. Manages getting and cleaning up of all
+ * DB resources needed to execute the SQL.
+ *
+ * @param sql SQL to Execute.
+ * @return The return value from {@link Statement#executeUpdate(java.lang.String)}.
+ */
+ public static int executeUpdate(String sql) {
+ DbResources dbResources = null;
+
+ try {
+ dbResources = new DbResources();
+ return dbResources.stat.executeUpdate(sql);
+ } catch (SQLException e) {
+ // Close the DbResources objects...
+ dbResources.close();
+ TestCaseUtils.logAndFail("SQL execution failed: " + sql, logger, e);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Convienience method for closing a DB ResultSet.
+ * <p/>
+ * Handles Exceptions etc.
+ * @param resultSet The ResultSet to close.
+ */
+ public static void closeResultSet(ResultSet resultSet) {
+ if(resultSet != null) {
+ try {
+ resultSet.close();
+ } catch (SQLException e) {
+ TestCaseUtils.logAndFail("Failed to close resultset.", logger, e);
+ }
+ }
+ }
+
+ /**
+ * Assert that the specified query does not return an empty resultset.
+ * @param query The query to execute.
+ * @param maxWait The maximum length of time (ms) to wait for the query to return a non-empty resultset.
+ */
+ public static void assertNonEmptyResultSet(String query, int maxWait) {
+ long endTime = System.currentTimeMillis() + maxWait;
+
+ while(System.currentTimeMillis() < endTime) {
+ ResultSet resSet = executeQuery(query);
+
+ try {
+ if(resSet.next()) {
+ // There were rows in the resultset...
+ return;
+ }
+ Thread.sleep(500);
+ } catch (Exception e) {
+ TestCaseUtils.logAndFail("Error while executing SQL query [" + query + "].", logger, e);
+ } finally {
+ closeResultSet(resSet);
+ }
+ }
+ TestCaseUtils.logAndFail("SQL query [" + query + "] failed to return a non-empty resultset. Waited for " + maxWait + "ms.", logger, null);
+ }
+
+ /**
+ * ResultSet Proxying InvocationHandler.
+ * <p/>
+ * This class is used simply to "catch" the close method call on the ResultSet so
+ * we can also close the underlying DbResources.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+ private static class ResultSetInvocationHandler implements InvocationHandler {
+ private ResultSet resultSet;
+ private DbResources dbResources;
+
+ private ResultSetInvocationHandler(ResultSet resultSet, DbResources dbResources) {
+ this.resultSet = resultSet;
+ this.dbResources = dbResources;
+ }
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ if(method.getName().equals("close")) {
+ // Caught the call to close the resultset - close the associated DbResources too!
+ Object returnObj = method.invoke(resultSet, args);
+ dbResources.close();
+ return returnObj;
+ } else {
+ return method.invoke(resultSet, args);
+ }
+ }
+ }
+
+ /**
+ * Container Object for a "standard" set of DB resources.
+ * <p/>
+ * Provides convienience methods closing the resources etc.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+ private static class DbResources {
+ private Connection con = null;
+ private Statement stat = null;
+
+ private DbResources() {
+ try {
+ // Register the driver..
+ Class.forName(dbDriver).newInstance();
+ con = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
+ stat = con.createStatement();
+ } catch (Exception e) {
+ TestCaseUtils.logAndFail("Failed to connect to database. Connection Properties: " + properties, logger, e);
+ }
+ }
+
+ private void close() {
+ try {
+ // Commit on the connection!.
+ con.commit();
+ } catch (SQLException e) {
+ TestCaseUtils.logAndFail("Failed to commit to database: " + properties, logger, e);
+ } finally {
+ try {
+ if (stat != null) {
+ stat.close();
+ }
+ if (con != null) {
+ con.close();
+ }
+ } catch (SQLException e) {
+ TestCaseUtils.logAndFail("Failed to close database resources. Connection Properties: " + properties, logger, e);
+ }
+ }
+ }
+ }
+}
Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/ListenerUtils.java
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/ListenerUtils.java 2006-08-11 16:43:04 UTC (rev 5779)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/util/ListenerUtils.java 2006-08-11 16:54:24 UTC (rev 5780)
@@ -28,7 +28,6 @@
import junit.framework.TestCase;
import org.apache.log4j.Logger;
-import org.jboss.soa.esb.common.SystemProperties;
import org.jboss.soa.esb.listeners.GpListener;
import org.jboss.soa.esb.parameters.ParamFileRepository;
import org.jboss.soa.esb.parameters.ParamRepositoryException;
@@ -43,16 +42,6 @@
private static final String CONFIG_TMP_EXT = ".conftmp";
private static Logger logger = Logger.getLogger(ListenerUtils.class);
- private static String DB_DRIVER = "org.jboss.esb.db.driver";
- private static String DB_URL = "org.jboss.esb.db.url";
- private static String DB_USER = "org.jboss.esb.db.user";
- private static String DB_PASSWORD = "org.jboss.esb.db.password";
-
- private static String dbDriver = System.getProperty(DB_DRIVER);
- private static String dbUrl = System.getProperty(DB_URL);
- private static String dbUser = System.getProperty(DB_USER);
- private static String dbPassword = System.getProperty(DB_PASSWORD);
-
/**
* Start a list of Listeners based on the supplied configuration.
* <p/>
@@ -98,10 +87,10 @@
// Replace all the "@qa.build@" tokens with the qa "build" dirs file URI, and write to file...
configXml = configXml.replaceAll("@qa.build@", FileUtils.getEnvBuildDir().toURI().toString());
// Replace all the "@db.*@" tokens with the settings from the deployment.properties...
- configXml = configXml.replaceAll("@db.driver@", dbDriver);
- configXml = configXml.replaceAll("@db.url@", dbUrl);
- configXml = configXml.replaceAll("@db.user@", dbUser);
- configXml = configXml.replaceAll("@db.password@", dbPassword);
+ configXml = configXml.replaceAll("@db.driver@", DbUtils.dbDriver);
+ configXml = configXml.replaceAll("@db.url@", DbUtils.dbUrl);
+ configXml = configXml.replaceAll("@db.user@", DbUtils.dbUser);
+ configXml = configXml.replaceAll("@db.password@", DbUtils.dbPassword);
// Write the fixed up config ro a new file - this new file will be used as the listener config!
fixedUpFileStream.write(configXml.getBytes());
More information about the jboss-svn-commits
mailing list