001: /*
002:
003: Derby - Class org.apache.derbyTesting.functionTests.store.BackupPathTests
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derbyTesting.functionTests.tests.store;
023:
024: import java.sql.Connection;
025: import java.sql.SQLException;
026: import java.sql.Statement;
027: import java.sql.CallableStatement;
028: import java.io.File;
029: import org.apache.derby.tools.ij;
030:
031: /*
032: * This class tests online backup with various types of paths.
033: * 1 ) backup path is same as a database directory. This should fail backup
034: * can not be made onto a database directory. (DERBY-304 bug).
035: * 2 ) backup path is a sub directory in the database.
036: * 3 ) Redo backup with same path as in second case.
037: * 4 ) backup path is absolute path.
038:
039: * If the path refers to some sub directory inside a database, backup
040: * will succeed because there is no easy way to catch this weird case,
041: * especially if the backup path refers to another database directory.
042: *
043: *
044: * @author <a href="mailto:suresh.thalamati@gmail.com">Suresh Thalamati</a>
045: * @version 1.0
046: */
047:
048: public class BackupPathTests {
049:
050: public static void main(String[] argv) throws Throwable {
051: try {
052:
053: ij.getPropertyArg(argv);
054: Connection conn = ij.startJBMS();
055: conn.setAutoCommit(true);
056:
057: Statement stmt = conn.createStatement();
058: //install a jar, so that there is a jar directory under the db.
059: stmt.execute("call sqlj.install_jar("
060: + "'extin/brtestjar.jar', 'math_routines', 0)");
061:
062: stmt.close();
063:
064: logMsg("Begin Backup Path Tests");
065: String derbyHome = System.getProperty("derby.system.home");
066: String dbHome = derbyHome + File.separator + "wombat";
067:
068: logMsg("case1 : try Backup with backup path as database dir");
069: try {
070: performBackup(conn, dbHome);
071: } catch (SQLException sqle) {
072: // expected to fail with following error code.
073: if (sqle.getSQLState() != null
074: && sqle.getSQLState().equals("XSRSC")) {
075: logMsg("Backup in to a database dir failed");
076: } else {
077: throw sqle;
078: }
079: }
080:
081: logMsg("End test case1");
082: logMsg("case2 : Backup with backup path as database jar dir");
083: String jarDir = dbHome + File.separator + "jar";
084: performBackup(conn, jarDir);
085: logMsg("End test case 2");
086:
087: logMsg("case 3: Backup again into the same db jar dir location");
088: performBackup(conn, jarDir);
089: logMsg("End test case 3");
090:
091: logMsg("case 4: Backup using an absolute path");
092: String absBackupPath = new File("extinout/backupPathTests")
093: .getAbsolutePath();
094: performBackup(conn, absBackupPath);
095: logMsg("End test case 4");
096: conn.close();
097: logMsg("End Backup Path Tests");
098:
099: } catch (SQLException sqle) {
100: org.apache.derby.tools.JDBCDisplayUtil.ShowSQLException(
101: System.out, sqle);
102: sqle.printStackTrace(System.out);
103: }
104: }
105:
106: private static void performBackup(Connection conn, String backupPath)
107: throws SQLException {
108: CallableStatement backupStmt = conn
109: .prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)");
110: backupStmt.setString(1, backupPath);
111: backupStmt.execute();
112: backupStmt.close();
113: }
114:
115: /**
116: * Write message to the standard output.
117: */
118: private static void logMsg(String str) {
119: System.out.println(str);
120: }
121:
122: }
|