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