Author: fhanik
Date: Thu Jul 24 13:17:46 2014
New Revision: 1613111

URL: http://svn.apache.org/r1613111
Log:
Make tests pass by properly using the mock objects and not rely on a pre 
existing table.

Modified:
    
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java
    
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestValidationQueryTimeout.java

Modified: 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java?rev=1613111&r1=1613110&r2=1613111&view=diff
==============================================================================
--- 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java
 (original)
+++ 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestSlowQueryReport.java
 Thu Jul 24 13:17:46 2014
@@ -19,17 +19,25 @@ package org.apache.tomcat.jdbc.test;
 import java.lang.management.ManagementFactory;
 import java.sql.CallableStatement;
 import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.DriverPropertyInfo;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.sql.SQLTimeoutException;
 import java.sql.Statement;
 import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.logging.Logger;
 
 import javax.management.AttributeChangeNotification;
 import javax.management.Notification;
 import javax.management.NotificationListener;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.tomcat.jdbc.pool.ConnectionPool;
@@ -37,18 +45,34 @@ import org.apache.tomcat.jdbc.pool.inter
 import org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx;
 
 public class TestSlowQueryReport extends DefaultTestCase {
+    public static final String superSlowSql = "select count(1) from test where 
val1 like 'ewq%eq' and val2 = 'ew%rre' and val3 = 'sda%da' and val4 = 
'dad%ada'";
+    public static final String failedSql = "select 1 from non_existent";
+    @Before
+    public void setUp() throws SQLException {
+        DriverManager.registerDriver(new MockDriver());
+
+        // use our mock driver
+        this.datasource.setDriverClassName(MockDriver.class.getName());
+        this.datasource.setUrl(MockDriver.url);
+
+        // Required to trigger validation query's execution
+        this.datasource.setInitialSize(1);
+        this.datasource.setTestOnBorrow(true);
+        this.datasource.setValidationInterval(-1);
+        this.datasource.setValidationQuery("SELECT 1");
+        this.datasource.setMaxActive(1);
+        
this.datasource.setJdbcInterceptors(SlowQueryReportJmx.class.getName()+"(threshold=50,notifyPool=false)");
+    }
 
     @Test
     public void testSlowSql() throws Exception {
         int count = 3;
-        this.init();
         this.datasource.setMaxActive(1);
         
this.datasource.setJdbcInterceptors(SlowQueryReport.class.getName()+"(threshold=50)");
         Connection con = this.datasource.getConnection();
-        String slowSql = "select count(1) from test where val1 like 'ewq%eq' 
and val2 = 'ew%rre' and val3 = 'sda%da' and val4 = 'dad%ada'";
         for (int i=0; i<count; i++) {
             Statement st = con.createStatement();
-            ResultSet rs = st.executeQuery(slowSql);
+            ResultSet rs = st.executeQuery(superSlowSql);
             rs.close();
             st.close();
         }
@@ -60,7 +84,7 @@ public class TestSlowQueryReport extends
         System.out.println("Stats:"+stats);
 
         for (int i=0; i<count; i++) {
-            PreparedStatement st = con.prepareStatement(slowSql);
+            PreparedStatement st = con.prepareStatement(superSlowSql);
             ResultSet rs = st.executeQuery();
             rs.close();
             st.close();
@@ -68,7 +92,7 @@ public class TestSlowQueryReport extends
         System.out.println("Stats:"+stats);
 
         for (int i=0; i<count; i++) {
-            CallableStatement st = con.prepareCall(slowSql);
+            CallableStatement st = con.prepareCall(superSlowSql);
             ResultSet rs = st.executeQuery();
             rs.close();
             st.close();
@@ -84,14 +108,10 @@ public class TestSlowQueryReport extends
     @Test
     public void testSlowSqlJmx() throws Exception {
         int count = 1;
-        this.init();
-        this.datasource.setMaxActive(1);
-        
this.datasource.setJdbcInterceptors(SlowQueryReportJmx.class.getName()+"(threshold=50,notifyPool=false)");
         Connection con = this.datasource.getConnection();
-        String slowSql = "select count(1) from test where val1 like 'ewq%eq'";
         for (int i=0; i<count; i++) {
             Statement st = con.createStatement();
-            ResultSet rs = st.executeQuery(slowSql);
+            ResultSet rs = st.executeQuery(superSlowSql);
             rs.close();
             st.close();
         }
@@ -110,7 +130,7 @@ public class TestSlowQueryReport extends
                 null);
 
         for (int i=0; i<count; i++) {
-            PreparedStatement st = con.prepareStatement(slowSql);
+            PreparedStatement st = con.prepareStatement(superSlowSql);
             ResultSet rs = st.executeQuery();
             rs.close();
             st.close();
@@ -118,7 +138,7 @@ public class TestSlowQueryReport extends
         System.out.println("Stats:"+stats);
 
         for (int i=0; i<count; i++) {
-            CallableStatement st = con.prepareCall(slowSql);
+            CallableStatement st = con.prepareCall(superSlowSql);
             ResultSet rs = st.executeQuery();
             rs.close();
             st.close();
@@ -134,9 +154,6 @@ public class TestSlowQueryReport extends
     @Test
     public void testFastSql() throws Exception {
         int count = 3;
-        this.init();
-        this.datasource.setMaxActive(1);
-        this.datasource.setJdbcInterceptors(SlowQueryReport.class.getName());
         Connection con = this.datasource.getConnection();
         String fastSql = this.datasource.getValidationQuery();
         for (int i=0; i<count; i++) {
@@ -157,21 +174,16 @@ public class TestSlowQueryReport extends
     @Test
     public void testFailedSql() throws Exception {
         int count = 3;
-        this.init();
-        this.datasource.setMaxActive(1);
-        this.datasource.setJdbcInterceptors(SlowQueryReport.class.getName());
         Connection con = this.datasource.getConnection();
-        String slowSql = "select 1 from non_existent";
         for (int i=0; i<count; i++) {
             Statement st = con.createStatement();
             try {
-                ResultSet rs = st.executeQuery(slowSql);
+                ResultSet rs = st.executeQuery(failedSql);
                 rs.close();
             }catch (Exception x) {
                 // NO-OP
             }
             st.close();
-
         }
         Map<String,SlowQueryReport.QueryStats> map = 
SlowQueryReport.getPoolStats(datasource.getPool().getName());
         Assert.assertNotNull(map);
@@ -208,5 +220,118 @@ public class TestSlowQueryReport extends
         }
     }
 
+    /**
+     * Mock Driver, Connection and Statement implementations use to verify 
setQueryTimeout was called.
+     */
+    public static class MockDriver implements java.sql.Driver {
+        public static final String url = "jdbc:tomcat:mock";
+
+        public MockDriver() {
+        }
+
+        @Override
+        public boolean acceptsURL(String url) throws SQLException {
+            return url!=null && url.equals(MockDriver.url);
+        }
+
+        @Override
+        public Connection connect(String url, Properties info) throws 
SQLException {
+            return new MockConnection(info);
+        }
+
+        @Override
+        public int getMajorVersion() {
+            return 0;
+        }
+
+        @Override
+        public int getMinorVersion() {
+            return 0;
+        }
+
+        @Override
+        public DriverPropertyInfo[] getPropertyInfo(String url, Properties 
info) throws SQLException {
+            return null;
+        }
+
+        @Override
+        public boolean jdbcCompliant() {
+            return false;
+        }
+
+        @Override
+        public Logger getParentLogger() throws SQLFeatureNotSupportedException 
{
+            return null;
+        }
+    }
+
+    public static class MockConnection extends 
org.apache.tomcat.jdbc.test.driver.Connection {
+        public MockConnection(Properties info) {
+            super(info);
+        }
+
+        @Override
+        public Statement createStatement() throws SQLException {
+            return new MockStatement(false);
+        }
+
+        @Override
+        public PreparedStatement prepareStatement(String sql) throws 
SQLException {
+            return new MockStatement(sql.equals(superSlowSql));
+        }
+
+        @Override
+        public CallableStatement prepareCall(String sql) throws SQLException {
+            return new MockStatement(sql.equals(superSlowSql));
+        }
+    }
+
+    public static class MockStatement extends 
org.apache.tomcat.jdbc.test.driver.Statement {
+        boolean slow = false;
+
+        public MockStatement(boolean slow) {
+            this.slow = slow;
+        }
+
+        @Override
+        public boolean execute(String sql) throws SQLException {
+            if (failedSql.equals(sql)) {
+                throw new SQLException("Invalid SQL:"+sql);
+            }
+            if (slow || superSlowSql.equals(sql)) {
+                try {
+                    Thread.sleep(200);
+                }catch (Exception x) {
+                }
+            }
+            return super.execute(sql);
+        }
+
+        @Override
+        public ResultSet executeQuery(String sql) throws SQLException {
+            if (failedSql.equals(sql)) {
+                throw new SQLException("Invalid SQL:"+sql);
+            }
+            if (slow || superSlowSql.equals(sql)) {
+                try {
+                    Thread.sleep(200);
+                }catch (Exception x) {
+                }
+            }
+            return super.executeQuery(sql);
+        }
+
+        @Override
+        public ResultSet executeQuery() throws SQLException {
+            if (slow) {
+                try {
+                    Thread.sleep(200);
+                }catch (Exception x) {
+                }
+            }
+            return super.executeQuery();
+        }
+    }
+
 
 }

Modified: 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestValidationQueryTimeout.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestValidationQueryTimeout.java?rev=1613111&r1=1613110&r2=1613111&view=diff
==============================================================================
--- 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestValidationQueryTimeout.java
 (original)
+++ 
tomcat/trunk/modules/jdbc-pool/src/test/java/org/apache/tomcat/jdbc/test/TestValidationQueryTimeout.java
 Thu Jul 24 13:17:46 2014
@@ -22,6 +22,7 @@ import java.sql.DriverPropertyInfo;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
+import java.sql.SQLTimeoutException;
 import java.sql.Statement;
 import java.util.Properties;
 import java.util.logging.Logger;
@@ -119,9 +120,6 @@ public class TestValidationQueryTimeout 
     @Test(expected=SQLException.class)
     public void testValidationQueryTimeoutOnConnection() throws Exception {
         // use our mock driver
-        this.datasource.setDriverClassName("org.h2.Driver");
-        
this.datasource.setUrl("jdbc:h2:~/.h2/test;QUERY_TIMEOUT=0;DB_CLOSE_ON_EXIT=FALSE");
-
         // Required to trigger validation query's execution
         this.datasource.setTestOnConnect(true);
         this.datasource.setValidationInterval(-1);
@@ -151,8 +149,6 @@ public class TestValidationQueryTimeout 
     @Test
     public void testLongValidationQueryTime() throws Exception {
         // use our mock driver
-        this.datasource.setDriverClassName("org.h2.Driver");
-        
this.datasource.setUrl("jdbc:h2:~/.h2/test;QUERY_TIMEOUT=0;DB_CLOSE_ON_EXIT=FALSE");
         Connection con = this.datasource.getConnection();
         Statement stmt = null;
         long start = 0, end = 0;
@@ -259,8 +255,20 @@ public class TestValidationQueryTimeout 
         @Override
         public void setQueryTimeout(int seconds) throws SQLException {
             super.setQueryTimeout(seconds);
-            Assert.assertEquals(TIMEOUT, seconds);
             isTimeoutSet = true;
         }
+
+        @Override
+        public boolean execute(String sql) throws SQLException {
+            if (longQuery.equals(sql)) {
+                try {
+                    Thread.sleep(getQueryTimeout() * 1000);
+                }catch (Exception x) {
+                }
+                throw new SQLTimeoutException();
+            } else {
+                return super.execute(sql);
+            }
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to