You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by my...@apache.org on 2012/02/21 22:11:42 UTC

svn commit: r1292027 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests: master/ suites/ tests/store/

Author: myrnavl
Date: Tue Feb 21 21:11:42 2012
New Revision: 1292027

URL: http://svn.apache.org/viewvc?rev=1292027&view=rev
Log:
DERBY-5382; Convert existing harness recovery tests to JUnit tests
  patch constributed by Siddharth Srivastava (akssps011 at gmail dot com)

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java   (with props)
Removed:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/oc_rec1.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/oc_rec2.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/oc_rec3.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/oc_rec4.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec1.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec1_sed.properties
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec2.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec2_sed.properties
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec3.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec3_sed.properties
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec4.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/oc_rec4_sed.properties
Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/storerecovery.runall
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/_Suite.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/storerecovery.runall
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/storerecovery.runall?rev=1292027&r1=1292026&r2=1292027&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/storerecovery.runall (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/storerecovery.runall Tue Feb 21 21:11:42 2012
@@ -5,9 +5,5 @@ store/MaxLogNumber.java
 store/MaxLogNumberRecovery.java
 store/RecoveryAfterBackupSetup.java
 store/RecoveryAfterBackup.java
-store/oc_rec1.java
-store/oc_rec2.java
-store/oc_rec3.java
-store/oc_rec4.java
 store/dropcrash.java
 store/dropcrash2.java

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java?rev=1292027&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java Tue Feb 21 21:11:42 2012
@@ -0,0 +1,239 @@
+/*
+ *
+ * Derby - Class org.apache.derbyTesting.functionTests.tests.store.OCRecoveryTest
+ *
+ * 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.derbyTesting.functionTests.tests.store;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.BaseTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+public class OCRecoveryTest extends BaseJDBCTestCase {
+
+    private static final String tableName = "RECTEST1";
+    
+    public OCRecoveryTest(String name) {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite("OCRecoveryTest");
+        //DERBY-4647 exec does not work on weme
+        if (BaseTestCase.isJ9Platform())
+            return suite;
+        suite.addTest(decorateTest());
+        return suite;
+    }
+
+    private static Test decorateTest()
+    {
+        Test test = TestConfiguration.embeddedSuite(
+                        OCRecoveryTest.class);
+        return new CleanDatabaseTestSetup(test);
+    }
+
+    public void testOCRecovery_1() throws Exception
+    {
+        setAutoCommit(false);
+        Statement st = createStatement();
+
+        createAndLoadTable(tableName, true, 5000, 0);
+        st.executeUpdate("DELETE FROM " + tableName);
+        commit();
+        callCompress(tableName, true, true, true, true);
+        TestConfiguration.getCurrent().shutdownDatabase();
+        st.close();
+        assertLaunchedJUnitTestMethod("org.apache.derbyTesting." +
+                "functionTests.tests.store.OCRecoveryTest.launchOCRecovery_2");
+        assertLaunchedJUnitTestMethod("org.apache.derbyTesting." +
+                "functionTests.tests.store.OCRecoveryTest.launchOCRecovery_3");
+        assertLaunchedJUnitTestMethod("org.apache.derbyTesting." +
+                "functionTests.tests.store.OCRecoveryTest.launchOCRecovery_4");
+    }
+
+    public void launchOCRecovery_2() throws Exception
+    {
+        setAutoCommit(false);
+        assertCheckTable(tableName);
+        createAndLoadTable(tableName, false, 6000, 0);
+        assertCheckTable(tableName);
+        String table_name =  tableName + "_2";
+        createAndLoadTable(table_name, true, 2000, 0);
+        Statement st = createStatement();
+        st.executeUpdate("DELETE FROM " + tableName);
+        commit();
+        callCompress(tableName, true, true, true, true);
+        TestConfiguration.getCurrent().shutdownDatabase();
+
+        st.close();
+    }
+
+    public void launchOCRecovery_3() throws SQLException
+    {
+        setAutoCommit(false);
+        String table_name =  tableName + "_2";
+        assertCheckTable(table_name);
+        // make sure we can add data to the existing table after redo
+        // recovery.
+        createAndLoadTable(tableName, false, 2000, 0);
+        assertCheckTable(tableName);
+
+        // setup to test redo recovery on: 
+        // add more rows, delete rows, compress, add more, no commit
+        createAndLoadTable(table_name, false, 4000, 2000);
+        Statement st = createStatement();
+        st.executeUpdate("DELETE FROM " + table_name);
+        commit();
+        callCompress(table_name, true, true, true, false);
+        TestConfiguration.getCurrent().shutdownDatabase();
+        st.close();
+    }
+    
+    public void launchOCRecovery_4() throws SQLException
+    {
+        setAutoCommit(false);
+        String table_name =  tableName + "_2";
+        assertCheckTable(table_name);
+        createAndLoadTable(table_name, false, 6000, 0);
+        assertCheckTable(table_name);
+        TestConfiguration.getCurrent().shutdownDatabase();
+    }
+    
+    /**
+     * Create and load a table.
+     * <p>
+     * If create_table is set creates a test data table with indexes.
+     * Loads num_rows into the table.  This table defaults to 32k page size.
+     * This schema fits 25 rows per page
+     * <p>
+     *
+     * @param create_table  If true, create new table - otherwise load into
+     *                      existing table.
+     * @param tblname       table to use.
+     * @param num_rows      number of rows to add to the table.
+     *
+     * @exception  SQLException  Standard exception policy.
+     **/
+    private void createAndLoadTable(
+    String      tblname,
+    boolean     create_table,
+    int         num_rows,
+    int         start_value)
+        throws SQLException
+    {
+        if (create_table)
+        {
+            Statement s = createStatement();
+
+            s.execute(
+                "CREATE TABLE " + tblname + 
+                    "(keycol int, indcol1 int, indcol2 int, indcol3 int, " +
+                    "data1 varchar(2000), data2 varchar(2000))");
+            s.close();
+            println("table created: " + tblname);
+        }
+
+        PreparedStatement insert_stmt = 
+                prepareStatement(
+                    "INSERT INTO " + tblname + " VALUES(?, ?, ?, ?, ?, ?)");
+
+        char[]  data1_data = new char[500];
+        char[]  data2_data = new char[500];
+
+        for (int i = 0; i < data1_data.length; i++)
+        {
+            data1_data[i] = 'a';
+            data2_data[i] = 'b';
+        }
+
+        String  data1_str = new String(data1_data);
+        String  data2_str = new String(data2_data);
+
+        int row_count = 0;
+            for (int i = start_value; row_count < num_rows; row_count++, i++)
+            {
+                insert_stmt.setInt(1, i);               // keycol
+                insert_stmt.setInt(2, i * 10);          // indcol1
+                insert_stmt.setInt(3, i * 100);         // indcol2
+                insert_stmt.setInt(4, -i);              // indcol3
+                insert_stmt.setString(5, data1_str);    // data1_data
+                insert_stmt.setString(6, data2_str);    // data2_data
+
+                insert_stmt.execute();
+            }
+
+        if (create_table)
+        {
+            Statement s = createStatement();
+
+            s.execute(
+                "create index " + tblname + "_idx_keycol on " + tblname +
+                    "(keycol)");
+            s.execute(
+                "create index " + tblname + "_idx_indcol1 on " + tblname +
+                    "(indcol1)");
+            s.execute(
+                "create index " + tblname + "_idx_indcol2 on " + tblname +
+                    "(indcol2)");
+            s.execute(
+                "create unique index " + tblname + "_idx_indcol3 on " + 
+                    tblname + "(indcol3)");
+            s.close();
+        }
+        commit();
+    }
+    
+    /**
+     * call SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE() system procedure.
+     **/
+    private void callCompress(
+    String      tableName,
+    boolean     purgeRows,
+    boolean     defragmentRows,
+    boolean     truncateEnd,
+    boolean     commit_operation)
+        throws SQLException
+    {
+        CallableStatement cstmt = 
+                prepareCall(
+                "call SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE(?, ?, ?, ?, ?)");
+        cstmt.setString(1, getTestConfiguration().getUserName());
+        cstmt.setString(2, tableName);
+        cstmt.setInt   (3, purgeRows      ? 1 : 0);
+        cstmt.setInt   (4, defragmentRows ? 1 : 0);
+        cstmt.setInt   (5, truncateEnd    ? 1 : 0);
+        cstmt.execute();
+        if (commit_operation) {
+            commit();
+        }
+    }
+
+}

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/OCRecoveryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/_Suite.java?rev=1292027&r1=1292026&r2=1292027&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/_Suite.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/_Suite.java Tue Feb 21 21:11:42 2012
@@ -78,6 +78,7 @@ public class _Suite extends BaseTestCase
         suite.addTest(LongColumnTest.suite());
         suite.addTest(RowLockBasicTest.suite());
         suite.addTest(RecoveryTest.suite());
+        suite.addTest(OCRecoveryTest.suite());
         suite.addTest(TableLockBasicTest.suite());
         suite.addTest(ServicePropertiesFileTest.suite());