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 mi...@apache.org on 2006/04/26 01:09:07 UTC

svn commit: r397014 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests: master/LogDeviceTest.out tests/store/LogDeviceTest.java tests/store/LogDeviceTest_app.properties

Author: mikem
Date: Tue Apr 25 16:09:04 2006
New Revision: 397014

URL: http://svn.apache.org/viewcvs?rev=397014&view=rev
Log:
DERBY-1039, committed on behalf of Suresh Thalamati

New tests that should have been part of previous checkin for DERBY-1039 fix.


Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out   (with props)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest.java   (with props)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest_app.properties   (with props)

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out?rev=397014&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out Tue Apr 25 16:09:04 2006
@@ -0,0 +1,5 @@
+Begin Log Device Test
+database shutdown properly
+Failed with Expected error:XSLAT
+database shutdown properly
+End log device Test

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/LogDeviceTest.out
------------------------------------------------------------------------------
    eol-style = native

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest.java?rev=397014&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest.java Tue Apr 25 16:09:04 2006
@@ -0,0 +1,228 @@
+/*
+
+   Derby - Class org.apache.derbyTesting.functionTests.store.LogDeviceTest
+
+   Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+   Licensed 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.Connection;
+import java.sql.Statement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import org.apache.derby.tools.ij;
+import org.apache.derbyTesting.functionTests.util.TestUtil;
+import java.io.File;
+import java.io.IOException;
+
+/*
+ * This class tests create database with transaction 
+ * log at non-default location specified as absolute path.
+ * @author <a href="mailto:suresh.thalamati@gmail.com">Suresh Thalamati</a>
+ * @version 1.0
+ */
+
+public class LogDeviceTest {
+
+	private static final String TEST_DATABASE_NAME = "wombat" ;
+    private static final String TEST_DATABASE_NAME1 = "wombat1" ;
+	private static final String TEST_TABLE_NAME   =    "emp";
+    private static final String LOG_PATH = "extinout/logDeviceTest_c1";
+    private static final String LOG_PATH1 = "extinout/logDeviceTest_c2";
+
+	public static void main(String[] argv) throws Throwable {
+		
+        LogDeviceTest test = new LogDeviceTest();
+   		ij.getPropertyArg(argv); 
+
+        try {
+            test.runTest();
+        }
+        catch (SQLException sqle) {
+			dumpSQLException(sqle);
+		} 
+    }
+
+    /*
+     * Returns the absolute path of the given path.
+     */
+    private String getFullPath(String path) throws IOException{
+        File f = new File(path);
+        return f.getCanonicalPath();
+    }
+
+
+    /*
+     * create a directory.
+     */
+    private boolean createDir(String path) {
+        File f = new File(path);
+        return f.mkdirs();
+    }
+
+
+
+	/*
+	 * Test database creation with log in non-default location.
+	 */
+	private void runTest() throws Exception {
+		logMessage("Begin Log Device Test");
+
+        // case 1: test logDevice property with absolute path
+
+        Connection conn;
+        String connAttr = "create=true;" + "logDevice=" + 
+                           getFullPath(LOG_PATH);
+        conn = TestUtil.getConnection(TEST_DATABASE_NAME, connAttr);
+        conn.setAutoCommit(false);
+        createTable(conn, TEST_TABLE_NAME);
+        conn.commit();
+        // just insert few rows and rollback and commit 
+        // to make sure  tranaction log is working fine. 
+        insert(conn, TEST_TABLE_NAME, 100);
+        conn.commit();
+        insert(conn, TEST_TABLE_NAME, 100);
+        conn.rollback();
+		// shutdown the test db 
+		shutdown(TEST_DATABASE_NAME);
+        
+        // case 2: database creation on non-empty 
+        // log dir location should fail.  
+
+        
+        try {
+            // this database creation is specifying the same log 
+            // location as the one above; so it should fail. 
+            conn = TestUtil.getConnection(TEST_DATABASE_NAME1, 
+                                          connAttr);
+        }catch (SQLException se) {
+            SQLException nse = se.getNextException();
+            if (nse != null) {
+                // expect to fail with log dir exists error.
+                if (nse.getSQLState().equals("XSLAT"))
+                    System.out.println("Failed with Expected error:" + 
+                                       nse.getSQLState());
+                else 
+                    dumpSQLException(se);
+            } else {
+                dumpSQLException(se);
+            }
+        }
+            
+        // case 3: database creation on an empty log dir should pass. 
+
+        // create a dummy log dir 
+        createDir(getFullPath(LOG_PATH1) + 
+                  File.separator + "log"); 
+        connAttr = "create=true;" + "logDevice=" + 
+                   getFullPath(LOG_PATH1);
+        conn = TestUtil.getConnection(TEST_DATABASE_NAME1, 
+                                      connAttr);
+        // just insert few rows and rollback and commit 
+        // to make sure  tranaction log is working fine. 
+        conn.setAutoCommit(false);
+        createTable(conn, TEST_TABLE_NAME);
+        conn.commit();
+        insert(conn, TEST_TABLE_NAME, 100);
+		// shutdown the test db 
+		shutdown(TEST_DATABASE_NAME1);
+        
+        // reconnect to the same database.
+        conn = TestUtil.getConnection(TEST_DATABASE_NAME1, null);
+        
+		logMessage("End log device Test");
+	}
+
+		
+	/**
+	 * Shutdown the datbase
+	 * @param  dbName  Name of the database to shutdown.
+	 */
+	private void shutdown(String dbName) {
+
+		try{
+			//shutdown
+			TestUtil.getConnection(dbName, "shutdown=true");
+		}catch(SQLException se){
+			if (se.getSQLState() != null && se.getSQLState().equals("08006"))
+				System.out.println("database shutdown properly");
+			else
+				dumpSQLException(se);
+		}
+	}
+
+	/**
+	 * Write message to the standard output.
+	 */
+	private void logMessage(String   str)	{
+			System.out.println(str);
+	}
+
+	
+	/**
+	 * dump the SQLException to the standard output.
+	 */
+	static private void dumpSQLException(SQLException sqle) {
+		
+		org.apache.derby.tools.JDBCDisplayUtil.	ShowSQLException(System.out, sqle);
+		sqle.printStackTrace(System.out);
+	}
+
+    /**
+     * Insert some rows into the specified table.
+     * @param  conn   connection to the database.    
+     * @param  tableName  name of the table that rows are inserted.
+     * @param  rowCount   Number of rows to Insert.
+     * @exception SQLException if any database exception occurs.
+     */
+    private void insert(Connection conn, 
+                        String tableName, 
+                        int rowCount) throws SQLException {
+
+        PreparedStatement ps = conn.prepareStatement("INSERT INTO " + 
+                                                     tableName + 
+                                                     " VALUES(?,?,?)");
+        for (int i = 0; i < rowCount; i++) {
+			
+            ps.setInt(1, i); // ID
+            ps.setString(2 , "skywalker" + i);
+            ps.setFloat(3, (float)(i * 2000)); 
+            ps.executeUpdate();
+		}
+        ps.close();
+    }
+
+
+    /* 
+     * create the tables that are used by this test.
+     * @param  conn   connection to the database.
+     * @param  tableName  Name of the table to create.
+     * @exception SQLException if any database exception occurs.
+     */
+    private	void createTable(Connection conn, 
+                             String tableName) throws SQLException {
+
+        Statement s = conn.createStatement();
+        s.executeUpdate("CREATE TABLE " + tableName + 
+                        "(id INT," +
+                        "name CHAR(200),"+ 
+                        "salary float)");
+        s.executeUpdate("create index " + tableName + "_id_idx on " + 
+                        tableName + "(id)");
+        s.close();
+    }
+}

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

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest_app.properties
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest_app.properties?rev=397014&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest_app.properties (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/LogDeviceTest_app.properties Tue Apr 25 16:09:04 2006
@@ -0,0 +1,15 @@
+#
+# *** DO NOT PUT PROPERTIES FOR THE DERBY SYSTEM IN THIS FILE.  THEY BELONG
+# *** IN the _derby.properties file.
+#
+# It will get handed to the test on the command line in a -p <filename>
+# argument.
+#
+# This causes ij (or the GUI on ij) to load the driver and make an
+# initial connection to the database.
+#
+#
+
+usedefaults=true
+useextdirs=true
+

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