You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by hs...@apache.org on 2014/10/31 21:46:15 UTC

git commit: SQOOP-1640. Sqoop2: Pull DatabaseProvider into sqoop-common-test module

Repository: sqoop
Updated Branches:
  refs/heads/sqoop2 21d4a9518 -> 184f02464


SQOOP-1640. Sqoop2: Pull DatabaseProvider into sqoop-common-test module

(Abraham Elmahrek via Hari Shreedharan)


Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/184f0246
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/184f0246
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/184f0246

Branch: refs/heads/sqoop2
Commit: 184f024648cbd532337e53e732ff9f1ce5f761f5
Parents: 21d4a95
Author: Hari Shreedharan <hs...@apache.org>
Authored: Fri Oct 31 13:45:21 2014 -0700
Committer: Hari Shreedharan <hs...@apache.org>
Committed: Fri Oct 31 13:45:21 2014 -0700

----------------------------------------------------------------------
 pom.xml                                         |   6 +
 test/pom.xml                                    |   5 +
 .../sqoop/test/asserts/ProviderAsserts.java     |  74 ----
 .../java/org/apache/sqoop/test/data/Cities.java |   2 +-
 .../org/apache/sqoop/test/data/DataSet.java     |   2 +-
 .../apache/sqoop/test/data/UbuntuReleases.java  |   2 +-
 .../apache/sqoop/test/db/DatabaseProvider.java  | 406 -------------------
 .../sqoop/test/db/DatabaseProviderFactory.java  |  39 --
 .../org/apache/sqoop/test/db/DerbyProvider.java | 107 -----
 .../org/apache/sqoop/test/db/MySQLProvider.java |  83 ----
 .../apache/sqoop/test/db/NetezzaProvider.java   |  83 ----
 .../apache/sqoop/test/db/OracleProvider.java    |  83 ----
 .../sqoop/test/db/PostgreSQLProvider.java       |  88 ----
 .../apache/sqoop/test/db/SqlServerProvider.java |  88 ----
 .../apache/sqoop/test/db/TeradataProvider.java  |  79 ----
 .../sqoop/test/testcases/ConnectorTestCase.java |   6 +-
 16 files changed, 17 insertions(+), 1136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index b2259cf..3449a6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -259,6 +259,11 @@ limitations under the License.
       </dependency>
       <dependency>
         <groupId>org.apache.sqoop</groupId>
+        <artifactId>sqoop-common-test</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.sqoop</groupId>
         <artifactId>sqoop-core</artifactId>
         <version>${project.version}</version>
       </dependency>
@@ -470,6 +475,7 @@ limitations under the License.
 
   <modules>
     <module>common</module>
+    <module>common-test</module>
     <module>spi</module>
     <module>core</module>
     <module>repository</module>

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/pom.xml
----------------------------------------------------------------------
diff --git a/test/pom.xml b/test/pom.xml
index 7a80710..956aeb7 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -37,6 +37,11 @@ limitations under the License.
 
     <dependency>
       <groupId>org.apache.sqoop</groupId>
+      <artifactId>sqoop-common-test</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.sqoop</groupId>
       <artifactId>sqoop-core</artifactId>
     </dependency>
 

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/asserts/ProviderAsserts.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/asserts/ProviderAsserts.java b/test/src/main/java/org/apache/sqoop/test/asserts/ProviderAsserts.java
deleted file mode 100644
index 364f86d..0000000
--- a/test/src/main/java/org/apache/sqoop/test/asserts/ProviderAsserts.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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.sqoop.test.asserts;
-
-import org.apache.sqoop.test.db.DatabaseProvider;
-import org.apache.log4j.Logger;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- * Database provider related asserts.
- */
-public class ProviderAsserts {
-
-  private static final Logger LOG = Logger.getLogger(ProviderAsserts.class);
-
-  /**
-   * Assert row in the table.
-   *
-   * @param provider Provider that should be used to query the database
-   * @param tableName Table name
-   * @param conditions Conditions for identifying the row
-   * @param values Values that should be present in the table
-   */
-  public static void assertRow(DatabaseProvider provider, String tableName,  Object []conditions, Object ...values) {
-    ResultSet rs = null;
-    try {
-      rs = provider.getRows(tableName, conditions);
-
-      if(! rs.next()) {
-        fail("No rows found.");
-      }
-
-      int i = 1;
-      for(Object expectedValue : values) {
-        Object actualValue = rs.getObject(i);
-        assertEquals("Columns do not match on position: " + i, expectedValue, actualValue);
-        i++;
-      }
-
-      if(rs.next()) {
-        fail("Found more than one row.");
-      }
-    } catch (SQLException e) {
-      LOG.error("Unexpected SQLException", e);
-      fail("Unexpected SQLException: " + e);
-    } finally {
-      provider.closeResultSetWithStatement(rs);
-    }
-  }
-
-  private ProviderAsserts() {
-    // Instantiation is prohibited
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/data/Cities.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/data/Cities.java b/test/src/main/java/org/apache/sqoop/test/data/Cities.java
index fb9be13..1e90c59 100644
--- a/test/src/main/java/org/apache/sqoop/test/data/Cities.java
+++ b/test/src/main/java/org/apache/sqoop/test/data/Cities.java
@@ -17,7 +17,7 @@
  */
 package org.apache.sqoop.test.data;
 
-import org.apache.sqoop.test.db.DatabaseProvider;
+import org.apache.sqoop.common.test.db.DatabaseProvider;
 
 /**
  * Simple listing of few world's cities to do basic sanity tests.

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/data/DataSet.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/data/DataSet.java b/test/src/main/java/org/apache/sqoop/test/data/DataSet.java
index 6999408..06f386e 100644
--- a/test/src/main/java/org/apache/sqoop/test/data/DataSet.java
+++ b/test/src/main/java/org/apache/sqoop/test/data/DataSet.java
@@ -17,7 +17,7 @@
  */
 package org.apache.sqoop.test.data;
 
-import org.apache.sqoop.test.db.DatabaseProvider;
+import org.apache.sqoop.common.test.db.DatabaseProvider;
 
 /**
  * Abstract class for basic testing data sets.

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/data/UbuntuReleases.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/data/UbuntuReleases.java b/test/src/main/java/org/apache/sqoop/test/data/UbuntuReleases.java
index a4730c2..7979686 100644
--- a/test/src/main/java/org/apache/sqoop/test/data/UbuntuReleases.java
+++ b/test/src/main/java/org/apache/sqoop/test/data/UbuntuReleases.java
@@ -17,7 +17,7 @@
  */
 package org.apache.sqoop.test.data;
 
-import org.apache.sqoop.test.db.DatabaseProvider;
+import org.apache.sqoop.common.test.db.DatabaseProvider;
 
 /**
  * Releases of Ubuntu Linux.

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/DatabaseProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/DatabaseProvider.java b/test/src/main/java/org/apache/sqoop/test/db/DatabaseProvider.java
deleted file mode 100644
index 3ebdd5e..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/DatabaseProvider.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Database provider for testing purpose.
- *
- * Provider contains all methods needed to bootstrap and run the tests on remote
- * databases. This is abstract implementation that is database agnostic. Each
- * supported database server have it's own concrete implementation that fills
- * the gaps in database differences.
- */
-abstract public class DatabaseProvider {
-
-  private static final Logger LOG = Logger.getLogger(DatabaseProvider.class);
-
-  /**
-   * Internal connection to the database.
-   */
-  private Connection databaseConnection;
-
-  /**
-   * JDBC Url to the remote database system.
-   *
-   * This will be passed to the Sqoop2 server during tests.
-   *
-   * @return String
-   */
-  abstract public String getConnectionUrl();
-
-  /**
-   * Connection username.
-   *
-   * This will be passed to the Sqoop2 server during tests.
-   *
-   * @return String
-   */
-  abstract public String getConnectionUsername();
-
-  /**
-   * Connection password.
-   *
-   * This will be passed to the Sqoop2 server during tests.
-   *
-   * @return String
-   */
-  abstract public String getConnectionPassword();
-
-  /**
-   * Escape column name based on specific database requirements.
-   *
-   * @param columnName Column name
-   * @return Escaped column name
-   */
-  abstract public String escapeColumnName(String columnName);
-
-  /**
-   * Escape table name based on specific database requirements.
-   *
-   * @param tableName Table name
-   * @return Escaped table name
-   */
-  abstract public String escapeTableName(String tableName);
-
-  /**
-   * Escape string value that can be safely used in the queries.
-   *
-   * @param value String value
-   * @return Escaped string value
-   */
-  abstract public String escapeValueString(String value);
-
-  /**
-   * String constant that can be used to denote null (unknown) value.
-   *
-   * @return String encoding null value
-   */
-  public String nullConstant() {
-    return "NULL";
-  }
-
-  /**
-   * True if the underlying database supports custom schemes (namespaces).
-   *
-   * @return
-   */
-  public boolean isSupportingScheme() {
-    return false;
-  }
-
-  public String getJdbcDriver() {
-    return null;
-  }
-
-  /**
-   * Start the handler.
-   */
-  public void start() {
-    if(getJdbcDriver() != null) {
-      loadClass(getJdbcDriver());
-    }
-
-    // Create connection to the database server
-    try {
-      setConnection(DriverManager.getConnection(getConnectionUrl(), getConnectionUsername(), getConnectionPassword()));
-    } catch (SQLException e) {
-      LOG.error("Can't create connection", e);
-      throw new RuntimeException("Can't create connection", e);
-    }
-  }
-
-  /**
-   * Stop the handler.
-   */
-  public void stop() {
-   // Close connection to the database server
-   if(databaseConnection != null) {
-     try {
-       databaseConnection.close();
-     } catch (SQLException e) {
-       LOG.info("Ignored exception on closing connection", e);
-     }
-   }
-  }
-
-  /**
-   * Return connection to the database.
-   *
-   * @return
-   */
-  public Connection getConnection() {
-    return databaseConnection;
-  }
-
-  /**
-   * Set connection to a new object.
-   *
-   * @param connection New connection object
-   */
-  protected void setConnection(Connection connection) {
-    databaseConnection = connection;
-  }
-
-  /**
-   * Execute DDL or DML query.
-   *
-   * This method will throw RuntimeException on failure.
-   *
-   * @param query DDL or DML query.
-   */
-  public void executeUpdate(String query) {
-    LOG.info("Executing query: " + query);
-    Statement stmt = null;
-
-    try {
-      stmt = databaseConnection.createStatement();
-      stmt.executeUpdate(query);
-    } catch (SQLException e) {
-      LOG.error("Error in executing query", e);
-      throw new RuntimeException("Error in executing query", e);
-    } finally {
-      try {
-        if(stmt != null) {
-          stmt.close();
-        }
-      } catch (SQLException e) {
-        LOG.info("Cant' close statement", e);
-      }
-    }
-  }
-
-  /**
-   * Execute given query in a new statement object and return corresponding
-   * result set. Caller is responsible for closing both ResultSet and Statement
-   * object!
-   *
-   * @param query Query to execute
-   * @return Generated ResultSet
-   */
-  public ResultSet executeQuery(String query) {
-    LOG.info("Executing query: " + query);
-    Statement stmt = null;
-
-    try {
-      stmt = databaseConnection.createStatement();
-      return stmt.executeQuery(query);
-    } catch (SQLException e) {
-      LOG.error("Error in executing query", e);
-      throw new RuntimeException("Error in executing query", e);
-    }
-  }
-
-  /**
-   * Create new table.
-   *
-   * @param name Table name
-   * @param primaryKey Primary key column(0) or null if table should not have any
-   * @param columns List of double values column name and value for example ... "id", "varchar(50)"...
-   */
-  public void createTable(String name, String primaryKey, String ...columns) {
-    // Columns are in form of two strings - name and type
-    if(columns.length == 0  || columns.length % 2 != 0) {
-      throw new RuntimeException("Incorrect number of parameters.");
-    }
-
-    // Drop the table in case that it already exists
-    dropTable(name);
-
-    StringBuilder sb = new StringBuilder("CREATE TABLE ");
-    sb.append(escapeTableName(name)).append("(");
-
-    // Column list
-    List<String> columnList = new LinkedList<String>();
-    for(int i = 0; i < columns.length; i += 2) {
-      String column = escapeColumnName(columns[i]) + " " + columns[i + 1];
-      columnList.add(column);
-    }
-    sb.append(StringUtils.join(columnList, ", "));
-
-    if(primaryKey != null) {
-      sb.append(", PRIMARY KEY(").append(escapeColumnName(primaryKey)).append(")");
-    }
-
-    sb.append(")");
-
-    executeUpdate(sb.toString());
-  }
-
-  /**
-   * Insert new row into the table.
-   *
-   * @param tableName Table name
-   * @param values List of objects that should be inserted
-   */
-  public void insertRow(String tableName, Object ...values) {
-    StringBuilder sb = new StringBuilder("INSERT INTO ");
-    sb.append(escapeTableName(tableName));
-    sb.append(" VALUES (");
-
-    List<String> valueList = new LinkedList<String>();
-    for(Object value : values) {
-      valueList.add(convertObjectToQueryString(value));
-    }
-
-    sb.append(StringUtils.join(valueList, ", "));
-    sb.append(")");
-
-    executeUpdate(sb.toString());
-  }
-
-  /**
-   * Return rows that match given conditions.
-   *
-   * @param tableName Table name
-   * @param conditions Conditions in form of double values - column name and value, for example: "id", 1 or "last_update_date", null
-   * @return ResultSet with given criteria
-   */
-  public ResultSet getRows(String tableName, Object []conditions) {
-    // Columns are in form of two strings - name and value
-    if(conditions.length % 2 != 0) {
-      throw new RuntimeException("Incorrect number of parameters.");
-    }
-
-    StringBuilder sb = new StringBuilder("SELECT * FROM ");
-    sb.append(escapeTableName(tableName));
-
-    List<String> conditionList = new LinkedList<String>();
-    for(int i = 0; i < conditions.length; i += 2) {
-      Object columnName = conditions[i];
-      Object value = conditions[i + 1];
-
-      if( !(columnName instanceof String)) {
-        throw new RuntimeException("Each odd item should be a string with column name.");
-      }
-
-      if(value == null) {
-        conditionList.add(escapeColumnName((String) columnName) + " IS NULL");
-      } else {
-        conditionList.add(escapeColumnName((String) columnName) + " = " + convertObjectToQueryString(value));
-      }
-    }
-
-    if(conditionList.size() != 0) {
-      sb.append(" WHERE ").append(StringUtils.join(conditionList, " AND "));
-    }
-
-    return executeQuery(sb.toString());
-  }
-
-  /**
-   * Convert given object to it's representation that can be safely used inside
-   * query.
-   *
-   * @param value Value to convert
-   * @return Query safe string representation
-   */
-  public String convertObjectToQueryString(Object value) {
-    if(value == null) {
-      return nullConstant();
-    } else if(value.getClass() == String.class) {
-      return escapeValueString((String)value);
-    } else {
-      return value.toString();
-    }
-  }
-
-  /**
-   * Drop table.
-   *
-   * Any exceptions will be ignored.
-   *
-   * @param tableName
-   */
-  public void dropTable(String tableName) {
-    StringBuilder sb = new StringBuilder("DROP TABLE ");
-    sb.append(escapeTableName(tableName));
-
-    try {
-      executeUpdate(sb.toString());
-    } catch(RuntimeException e) {
-      LOG.info("Ignoring exception: " + e);
-    }
-  }
-
-  /**
-   * Return number of rows from given table.
-   *
-   * @param tableName Table name
-   * @return Number of rows
-   */
-  public long rowCount(String tableName) {
-    StringBuilder sb = new StringBuilder("SELECT COUNT(*) FROM ");
-    sb.append(escapeTableName(tableName));
-
-    ResultSet rs = null;
-    try {
-      rs = executeQuery(sb.toString());
-      if(!rs.next()) {
-        throw new RuntimeException("Row count query did not returned any rows.");
-      }
-
-      return rs.getLong(1);
-    } catch (SQLException e) {
-      LOG.error("Can't get number of rows: ", e);
-      throw new RuntimeException("Can't get number of rows: ", e);
-    } finally {
-      closeResultSetWithStatement(rs);
-    }
-  }
-
-  /**
-   * Close given result set (if not null) and associated statement.
-   *
-   * @param rs ResultSet to close.
-   */
-  public void closeResultSetWithStatement(ResultSet rs) {
-    if(rs != null) {
-      try {
-        Statement stmt = rs.getStatement();
-        rs.close();
-        stmt.close();
-      } catch (SQLException e) {
-        LOG.info("Ignoring exception: ", e);
-      }
-    }
-  }
-
-  /**
-   * Load class.
-   *
-   * @param className Class name
-   */
-  public void loadClass(String className) {
-    try {
-      Class.forName(className);
-    } catch (ClassNotFoundException e) {
-      throw new RuntimeException("Class not found: " + className, e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/DatabaseProviderFactory.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/DatabaseProviderFactory.java b/test/src/main/java/org/apache/sqoop/test/db/DatabaseProviderFactory.java
deleted file mode 100644
index 330863a..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/DatabaseProviderFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-import java.util.Properties;
-
-/**
- * Create database provider.
- */
-public class DatabaseProviderFactory {
-
-  public static final String PROVIDER_PROPERTY = "sqoop.provider.class";
-
-  public static DatabaseProvider getProvider(Properties properties) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
-    String className = properties.getProperty(PROVIDER_PROPERTY);
-    if(className == null) {
-      return new DerbyProvider();
-    }
-
-    Class<?> klass = Class.forName(className);
-    return (DatabaseProvider)klass.newInstance();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/DerbyProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/DerbyProvider.java b/test/src/main/java/org/apache/sqoop/test/db/DerbyProvider.java
deleted file mode 100644
index 98e83ce..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/DerbyProvider.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-import org.apache.log4j.Logger;
-import org.apache.derby.drda.NetworkServerControl;
-
-import java.net.InetAddress;
-
-/**
- * Implementation of database provider that is based on embedded derby server.
- *
- * This provider will work out of the box without any extra configuration.
- */
-public class DerbyProvider extends DatabaseProvider {
-
-  private static final Logger LOG = Logger.getLogger(DerbyProvider.class);
-
-  public static final String DRIVER = "org.apache.derby.jdbc.ClientDriver";
-
-  NetworkServerControl server = null;
-
-  @Override
-  public void start() {
-    // Start embedded server
-    try {
-      server = new NetworkServerControl(InetAddress.getByName("localhost"), 1527);
-      server.start(null);
-    } catch (Exception e) {
-      LOG.error("Can't start Derby network server", e);
-      throw new RuntimeException("Can't derby server", e);
-    }
-
-    super.start();
-  }
-
-  @Override
-  public void stop() {
-    super.stop();
-
-    // Shutdown embedded server
-    try {
-      server.shutdown();
-    } catch (Exception e) {
-      LOG.info("Can't shut down embedded server", e);
-    }
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escape(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escape(tableName);
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public boolean isSupportingScheme() {
-    return true;
-  }
-
-  public String escape(String entity) {
-    return "\"" + entity + "\"";
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-
-  @Override
-  public String getConnectionUrl() {
-    return "jdbc:derby://localhost:1527/memory:sqoop;create=true";
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return null;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/MySQLProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/MySQLProvider.java b/test/src/main/java/org/apache/sqoop/test/db/MySQLProvider.java
deleted file mode 100644
index 4f21935..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/MySQLProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * MySQL Provider that will connect to remote MySQL server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class MySQLProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "com.mysql.jdbc.Driver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.mysql.jdbc",
-    "jdbc:mysql://localhost/test"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.mysql.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.mysql.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escape(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escape(tableName);
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "\"" + value + "\"";
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-
-  public String escape(String entity) {
-    return "`" + entity + "`";
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/NetezzaProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/NetezzaProvider.java b/test/src/main/java/org/apache/sqoop/test/db/NetezzaProvider.java
deleted file mode 100644
index 4e5bb0d..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/NetezzaProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * Netezza Provider that will connect to remote Netezza server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class NetezzaProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "org.netezza.Driver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.netezza.jdbc",
-    "jdbc:netezza://localhost/test"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.netezza.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.netezza.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escapeObjectName(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escapeObjectName(tableName);
-  }
-
-  public String escapeObjectName(String name) {
-    return '"' + name + '"';
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/OracleProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/OracleProvider.java b/test/src/main/java/org/apache/sqoop/test/db/OracleProvider.java
deleted file mode 100644
index 5a55c85..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/OracleProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * Oracle Provider that will connect to remote Oracle server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class OracleProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "oracle.jdbc.OracleDriver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.oracle.jdbc",
-    "jdbc:oracle:thin:@//localhost/xe"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.oracle.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.oracle.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escape(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escape(tableName);
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-
-  public String escape(String entity) {
-    return "\"" + entity + "\"";
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/PostgreSQLProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/PostgreSQLProvider.java b/test/src/main/java/org/apache/sqoop/test/db/PostgreSQLProvider.java
deleted file mode 100644
index 06156c4..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/PostgreSQLProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * PostgreSQL Provider that will connect to remote PostgreSQL server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class PostgreSQLProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "org.postgresql.Driver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.postgresql.jdbc",
-    "jdbc:postgresql://localhost/test"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.postgresql.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.postgresql.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escape(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escape(tableName);
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public boolean isSupportingScheme() {
-    return true;
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-
-  public String escape(String entity) {
-    return "\"" + entity + "\"";
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/SqlServerProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/SqlServerProvider.java b/test/src/main/java/org/apache/sqoop/test/db/SqlServerProvider.java
deleted file mode 100644
index 327c05e..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/SqlServerProvider.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * Oracle Provider that will connect to remote Oracle server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class SqlServerProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.sqlserver.jdbc",
-    "jdbc:sqlserver://localhost"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.sqlserver.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.sqlserver.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return escape(columnName);
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return escape(tableName);
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public boolean isSupportingScheme() {
-    return true;
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-
-  public String escape(String entity) {
-    return "[" + entity + "]";
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/db/TeradataProvider.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/db/TeradataProvider.java b/test/src/main/java/org/apache/sqoop/test/db/TeradataProvider.java
deleted file mode 100644
index a66823e..0000000
--- a/test/src/main/java/org/apache/sqoop/test/db/TeradataProvider.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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.sqoop.test.db;
-
-/**
- * Teradata Provider that will connect to remote Teradata server.
- *
- * JDBC can be configured via system properties. Default value is server running
- * on the same box (localhost) that is access via sqoop/sqoop credentials.
- */
-public class TeradataProvider extends DatabaseProvider {
-
-  public static final String DRIVER = "com.teradata.jdbc.TeraDriver";
-
-  private static final String CONNECTION = System.getProperties().getProperty(
-    "sqoop.provider.teradata.jdbc",
-    "jdbc:teradata://localhost/test"
-  );
-
-  private static final String USERNAME = System.getProperties().getProperty(
-    "sqoop.provider.teradata.username",
-    "sqoop"
-  );
-
-  private static final String PASSWORD = System.getProperties().getProperty(
-    "sqoop.provider.teradata.password",
-    "sqoop"
-  );
-
-  @Override
-  public String getConnectionUrl() {
-    return CONNECTION;
-  }
-
-  @Override
-  public String getConnectionUsername() {
-    return USERNAME;
-  }
-
-  @Override
-  public String getConnectionPassword() {
-    return PASSWORD;
-  }
-
-  @Override
-  public String escapeColumnName(String columnName) {
-    return columnName;
-  }
-
-  @Override
-  public String escapeTableName(String tableName) {
-    return tableName;
-  }
-
-  @Override
-  public String escapeValueString(String value) {
-    return "'" + value + "'";
-  }
-
-  @Override
-  public String getJdbcDriver() {
-    return DRIVER;
-  }
-}

http://git-wip-us.apache.org/repos/asf/sqoop/blob/184f0246/test/src/main/java/org/apache/sqoop/test/testcases/ConnectorTestCase.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/sqoop/test/testcases/ConnectorTestCase.java b/test/src/main/java/org/apache/sqoop/test/testcases/ConnectorTestCase.java
index af31769..06462a3 100644
--- a/test/src/main/java/org/apache/sqoop/test/testcases/ConnectorTestCase.java
+++ b/test/src/main/java/org/apache/sqoop/test/testcases/ConnectorTestCase.java
@@ -25,17 +25,17 @@ import org.apache.hadoop.mapred.JobConf;
 import org.apache.log4j.Logger;
 import org.apache.sqoop.client.SubmissionCallback;
 import org.apache.sqoop.common.Direction;
+import org.apache.sqoop.common.test.asserts.ProviderAsserts;
+import org.apache.sqoop.common.test.db.DatabaseProvider;
+import org.apache.sqoop.common.test.db.DatabaseProviderFactory;
 import org.apache.sqoop.connector.hdfs.configuration.ToFormat;
 import org.apache.sqoop.model.MConfigList;
 import org.apache.sqoop.model.MJob;
 import org.apache.sqoop.model.MLink;
 import org.apache.sqoop.model.MPersistableEntity;
 import org.apache.sqoop.model.MSubmission;
-import org.apache.sqoop.test.asserts.ProviderAsserts;
 import org.apache.sqoop.test.data.Cities;
 import org.apache.sqoop.test.data.UbuntuReleases;
-import org.apache.sqoop.test.db.DatabaseProvider;
-import org.apache.sqoop.test.db.DatabaseProviderFactory;
 import org.apache.sqoop.test.hadoop.HadoopMiniClusterRunner;
 import org.apache.sqoop.test.hadoop.HadoopRunnerFactory;
 import org.apache.sqoop.validation.Status;