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 fu...@apache.org on 2007/03/03 02:15:05 UTC

svn commit: r514040 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting: functionTests/master/ functionTests/master/DerbyNet/ functionTests/master/DerbyNet/jdk16/ functionTests/master/DerbyNetClient/ functionTests/master/DerbyNetClient/jdk16...

Author: fuzzylogic
Date: Fri Mar  2 17:15:04 2007
New Revision: 514040

URL: http://svn.apache.org/viewvc?view=rev&rev=514040
Log:
DERBY-2342: convert importExport.java to junit

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportTest.java   (with props)
Removed:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/importExport.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/jdk16/importExport.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/importExport.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk16/importExport.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/importExport.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/importExport.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/importExport_app.properties
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/importExport_sed.properties
Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/BaseTestCase.java

Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportTest.java?view=auto&rev=514040
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportTest.java (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportTest.java Fri Mar  2 17:15:04 2007
@@ -0,0 +1,285 @@
+/*
+
+   Derby - Class org.apache.derbyTesting.functionTests.tests.tools.ImportExportTest
+
+   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.tools;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.sql.SQLException;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.SupportFilesSetup;
+import org.apache.derbyTesting.junit.TestConfiguration;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Test import and export procedures 
+ */
+public class ImportExportTest extends BaseJDBCTestCase {
+
+	public ImportExportTest(String name) {
+		super(name);
+	}
+	
+	public static Test suite() {
+        TestSuite suite = new TestSuite("ImportExportTest");
+
+        //if (JDBC.vmSupportsJSR169())
+        //{
+        //	return new TestSuite();
+        //}
+        suite.addTest(baseSuite("ImportExportTest:embedded"));
+
+        suite.addTest(
+                TestConfiguration.clientServerDecorator(
+                        baseSuite("ImportExportTest:client")));    
+        return suite;
+	}
+	
+	public static Test baseSuite(String name) {
+		TestSuite suite = new TestSuite(ImportExportTest.class, name);
+		Test test = new SupportFilesSetup(suite, new String[] {"functionTests/testData/ImportExport/EndOfFile.txt"} );
+		return new CleanDatabaseTestSetup(test) {
+            protected void decorateSQL(Statement s) throws SQLException {
+
+                s.execute("CREATE TABLE T1 (COLUMN1 VARCHAR(5) , COLUMN2 VARCHAR(8) , " +
+						   "COLUMN3 SMALLINT , COLUMN4 CHAR(11) , COLUMN5 DATE , COLUMN6 DECIMAL(5,1) , " +
+						   "COLUMN7 DOUBLE PRECISION , COLUMN8 INT , COLUMN9 BIGINT , COLUMN10 NUMERIC , " +
+						   "COLUMN11 REAL , COLUMN12 SMALLINT , COLUMN13 TIME , COLUMN14 TIMESTAMP , "+
+						   "COLUMN15 SMALLINT , COLUMN16 VARCHAR(1))");
+                s.execute("CREATE TABLE T2 (COLUMN1 VARCHAR(5) , COLUMN2 VARCHAR(8) , " +
+						   "COLUMN3 SMALLINT, COLUMN4 CHAR(11) , COLUMN5 DATE , COLUMN6 DECIMAL(5,1) , " +
+						   "COLUMN7 DOUBLE PRECISION , COLUMN8 INT , COLUMN9 BIGINT , COLUMN10 NUMERIC , " +
+						   "COLUMN11 REAL , COLUMN12 SMALLINT , COLUMN13 TIME , COLUMN14 TIMESTAMP , "+
+						   "COLUMN15 SMALLINT , COLUMN16 VARCHAR(1))");
+                s.execute("create table T4 (   Account int,    Fname   char(30),"+
+                        "Lname   char(30), Company varchar(35), Address varchar(40), City    varchar(20),"+
+ 					   "State   char(5), Zip     char(10), Payment decimal(8,2), Balance decimal(8,2))");
+                
+            }
+        };
+	}
+	
+	public void testImportFromNonExistantFile() {
+		try {
+			Connection c = getConnection();
+			doImport(c, "Z" , "T1" , null , null , null, 0);
+		} catch (SQLException e) {
+            // DERBY-1440: JDBC 4 client driver doesn't include nested exception SQLStates
+			assertSQLState(JDBC.vmSupportsJDBC4() ? "38000" : "XIE04", e);
+		}
+	}
+	
+	public void testNullDataFile() {
+		try {
+			Connection c = getConnection();
+			doImport(c, null, "T1" , null , null, null, 0);
+		} catch (SQLException e) {
+            // DERBY-1440: JDBC 4 client driver doesn't include nested exception SQLStates
+			assertSQLState(JDBC.vmSupportsJDBC4() ? "38000" : "XIE05", e);
+		}
+	}
+	
+	public void testEmptyTable() throws SQLException {
+		Connection c = getConnection();
+		doImportAndExport(c, "T1", null, null , null);
+	}
+
+	public void testEmptyTableWithDelimitedFormat() throws SQLException {
+		Connection c = getConnection();
+		doImportAndExport(c, "T1", null, null , "8859_1");
+	}
+
+	public void testEmptyTableWithFieldCharDelimiters() throws SQLException {
+		Connection c = getConnection();
+		doImportAndExport(c, "T1", "\t", "|" , "8859_1");
+	}
+	
+	public void testWithDefaultOptions() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		doImportAndExport(c, "T1", null, null, null);
+	}
+	
+	public void testWithCodeset() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		doImportAndExport(c, "T1", null, null , "8859_1");
+	}
+
+	public void testDelimiterAndCodeset() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		doImportAndExport(c, "T1", "\t", "|", "8859_1");
+	}
+	
+	public void testSpecialDelimitersAndCodeset() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		doImportAndExport(c, "T1", "%", "&", "Cp1252");
+	}
+
+	public void testSpecialDelimitersAndUTF16() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		doImportAndExport(c, "T1", "%", "&", "UTF-16");
+	}
+	
+	public void testInvalidEncoding() throws Exception {
+		Connection c = getConnection();
+		resetTables();
+		try {
+		    doImportAndExport(c, "T1", "^", "#", "INAVALID ENCODING");
+		} catch (SQLException e) {
+			assertSQLState("XIE0I", e);
+		}
+	}
+	
+	public void testEarlyEndOfFile() throws Exception {
+		Connection c = getConnection();
+		try {
+			doImportFromFile(c, "extin/EndOfFile.txt" , "T4" , null , null , null, 0);
+		} catch (SQLException e) {
+			// DERBY-1440: JDBC 4 client driver doesn't include nested exception SQLStates
+			assertSQLState(JDBC.vmSupportsJDBC4() ? "38000" : "XIE0E", e);
+		}
+	}
+	
+	private void doImport(Connection c, String fromTable, String toTable, 
+			 String colDel, String charDel , 
+			 String codeset, int replace) throws SQLException 
+    {
+		String impsql = "call SYSCS_UTIL.SYSCS_IMPORT_TABLE (? , ? , ? , ?, ? , ?, ?)";
+		PreparedStatement ps = c.prepareStatement(impsql);
+		ps.setString(1 , "APP");
+		ps.setString(2, toTable);
+		ps.setString(3, (fromTable==null ?  fromTable : "extinout/" + fromTable + ".dat" ));
+		ps.setString(4 , colDel);
+		ps.setString(5 , charDel);
+		ps.setString(6 , codeset);
+		ps.setInt(7, replace);
+		ps.execute();
+		ps.close();
+    }
+	
+	private void doImportFromFile(Connection c, String fileName, String toTable, 
+			 String colDel, String charDel , 
+			 String codeset, int replace) throws Exception 
+    {
+		String impsql = "call SYSCS_UTIL.SYSCS_IMPORT_TABLE (? , ? , ? , ?, ? , ?, ?)";
+		PreparedStatement ps = c.prepareStatement(impsql);
+		ps.setString(1 , "APP");
+		ps.setString(2, toTable);
+		ps.setString(3, fileName);
+		ps.setString(4 , colDel);
+		ps.setString(5 , charDel);
+		ps.setString(6 , codeset);
+		ps.setInt(7, replace);
+		ps.execute();
+		ps.close();
+
+    }
+
+	private void doImportAndExport(Connection c, String fromTable, String colDel , 
+			  String charDel, 
+			  String codeset) throws SQLException 
+    {
+		doExport(c, fromTable , colDel , charDel , codeset);
+		doImportAndVerify(c, fromTable, colDel , charDel, codeset,  0);
+        // also test with replace
+		doImportAndVerify(c, fromTable, colDel , charDel, codeset,  1);
+    }
+	
+	private void doExport(Connection c, String fromTable, String colDel , 
+			 String charDel, 
+			 String codeset) throws SQLException 
+	{
+		 String expsql = "call SYSCS_UTIL.SYSCS_EXPORT_TABLE (? , ? , ? , ?, ? , ?)";
+		 PreparedStatement ps = c.prepareStatement(expsql);
+		 ps.setString(1 , "APP");
+		 ps.setString(2, fromTable);
+		 ps.setString(3, (fromTable==null ?  fromTable : "extinout/" + fromTable + ".dat" ));
+		 ps.setString(4 , colDel);
+		 ps.setString(5 , charDel);
+		 ps.setString(6 , codeset);
+		 ps.execute();
+		 ps.close();
+    }
+	
+	/**
+	 * doImportAndVerify checks that data which has been imported and
+	 * then exported is identical. It imports the requested data, 
+	 * which has been exported from T1. Row counts are compared, and
+	 * then the data in T2 is again exported. A bytewise comparison 
+	 * of the two files is then made to verify that the data has been
+	 * gone through the import/export process intact.
+	 */
+	private void doImportAndVerify(Connection c, String fromTable,  String colDel, 
+			  String charDel , String codeset, 
+			  int replace) throws SQLException 
+    {
+
+		doImport(c, fromTable , "T2" , colDel , charDel , codeset , replace);
+
+		Statement stmt = c.createStatement();
+		ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM " + fromTable);
+		rs.next();
+		int numberOfRowsInT1 = rs.getInt(1);
+		rs.close();
+		rs = stmt.executeQuery("SELECT COUNT(*) FROM t2");
+		rs.next();
+		int numberOfRowsInT2 = rs.getInt(1);
+		rs.close();
+		stmt.close();
+		assertEquals(numberOfRowsInT1, numberOfRowsInT2);
+
+		doExport(c, "T2" , colDel , charDel , codeset);
+
+        //check whether the  exported files from T1 and T2  are same now.
+		assertEquals(SupportFilesSetup.getReadWrite(fromTable + ".dat"),
+				     SupportFilesSetup.getReadWrite("T2.dat"));
+    }
+	
+	/**
+	 * Called from each fixture that verifies data in the table.
+	 * Ensures that the import and export operate on a consistent
+	 * set of data.
+	 */
+	private void resetTables() throws Exception {
+		runSQLCommands("delete from t1");
+		runSQLCommands("delete from t2");
+		runSQLCommands("INSERT INTO T1 VALUES (null,'aa',1,'a',DATE('1998-06-30'),"+
+		               "1,1,1,1,1,1,1,TIME('12:00:00'),TIMESTAMP('1998-06-30 12:00:00.0'),1,'a')");
+        runSQLCommands("INSERT INTO T1 VALUES (null,'bb',1,'b',DATE('1998-06-30'),"+
+					   "2,2,2,2,2,2,2,TIME('12:00:00'),TIMESTAMP('1998-06-30 12:00:00.0'),2,'b')");
+        runSQLCommands("INSERT INTO T1 VALUES (null,'cc',1,'c',DATE('1998-06-30'),"+
+					   "3,3,3,3,3,3,3,TIME('12:00:00'),TIMESTAMP('1998-06-30 12:00:00.0'),3,'c')");
+        runSQLCommands("INSERT INTO T1 VALUES (null,'dd',1,'d',DATE('1998-06-30'),"+
+					   "4,4,4,4,4,4,4,TIME('12:00:00'),TIMESTAMP('1998-06-30 12:00:00.0'),4,'d')");
+	}
+
+}

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

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/BaseTestCase.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/BaseTestCase.java?view=diff&rev=514040&r1=514039&r2=514040
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/BaseTestCase.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/BaseTestCase.java Fri Mar  2 17:15:04 2007
@@ -21,7 +21,10 @@
 
 import junit.framework.TestCase;
 
+import java.io.BufferedInputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
@@ -29,6 +32,7 @@
 import java.net.URL;
 import java.sql.SQLException;
 import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 import java.security.PrivilegedActionException;
 
@@ -338,4 +342,31 @@
         assertEquals("Detailed messages of the throwable's are different",
                      t1.getMessage(), t2.getMessage());
     }
+    
+    /**
+     * Assert that two files in the filesystem are identical.
+     * 
+     * @param file1 the first file to compare
+     * @param file2 the second file to compare
+     */
+	public static void assertEquals(final File file1, final File file2) {
+		AccessController.doPrivileged
+        (new PrivilegedAction() {
+        	public Object run() {
+        		try {
+					InputStream f1 = new BufferedInputStream(new FileInputStream(file1));
+					InputStream f2 = new BufferedInputStream(new FileInputStream(file2));
+
+					assertEquals(f1, f2);
+				} catch (FileNotFoundException e) {
+					fail("FileNotFoundException in assertEquals(File,File): " + e.getMessage());
+					e.printStackTrace();
+				} catch (IOException e) {
+					fail("IOException in assertEquals(File, File): " + e.getMessage());
+					e.printStackTrace();
+				}
+				return null;
+        	}
+        });
+	}
 } // End class BaseTestCase