http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java index f603cc1..29da340 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/DerbyTestCase.java @@ -18,6 +18,7 @@ package org.apache.sqoop.repository.derby; import junit.framework.TestCase; +import org.apache.sqoop.common.Direction; import org.apache.sqoop.framework.FrameworkManager; import org.apache.sqoop.model.MConnection; import org.apache.sqoop.model.MConnectionForms; @@ -47,443 +48,648 @@ import static org.apache.sqoop.repository.derby.DerbySchemaQuery.*; */ abstract public class DerbyTestCase extends TestCase { -// public static final String DERBY_DRIVER = -// "org.apache.derby.jdbc.EmbeddedDriver"; -// -// public static final String JDBC_URL = -// "jdbc:derby:memory:myDB"; -// -// private Connection connection; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// // Create connection to the database -// Class.forName(DERBY_DRIVER).newInstance(); -// connection = DriverManager.getConnection(getStartJdbcUrl()); -// } -// -// @Override -// public void tearDown() throws Exception { -// // Close active connection -// if(connection != null) { -// connection.close(); -// } -// -// try { -// // Drop in memory database -// DriverManager.getConnection(getStopJdbcUrl()); -// } catch (SQLException ex) { -// // Dropping Derby database leads always to exception -// } -// -// // Call parent tear down -// super.tearDown(); -// } -// -// /** -// * Create derby schema. -// * -// * @throws Exception -// */ -// protected void createSchema() throws Exception { -// runQuery(QUERY_CREATE_SCHEMA_SQOOP); -// runQuery(QUERY_CREATE_TABLE_SQ_CONNECTOR); -// runQuery(QUERY_CREATE_TABLE_SQ_FORM); -// runQuery(QUERY_CREATE_TABLE_SQ_INPUT); -// runQuery(QUERY_CREATE_TABLE_SQ_CONNECTION); -// runQuery(QUERY_CREATE_TABLE_SQ_JOB); -// runQuery(QUERY_CREATE_TABLE_SQ_CONNECTION_INPUT); -// runQuery(QUERY_CREATE_TABLE_SQ_JOB_INPUT); -// runQuery(QUERY_CREATE_TABLE_SQ_SUBMISSION); -// runQuery(QUERY_CREATE_TABLE_SQ_COUNTER_GROUP); -// runQuery(QUERY_CREATE_TABLE_SQ_COUNTER); -// runQuery(QUERY_CREATE_TABLE_SQ_COUNTER_SUBMISSION); -// runQuery(QUERY_CREATE_TABLE_SQ_SYSTEM); -// runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED); -// runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED); -// runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_CREATION_USER); -// runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_UPDATE_USER); -// runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_CREATION_USER); -// runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_UPDATE_USER); -// runQuery(QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_CREATION_USER); -// runQuery(QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_UPDATE_USER); -// runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '3')"); -// runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) " + -// "VALUES('framework.version', '1')"); -// } -// -// /** -// * Run arbitrary query on derby memory repository. -// * -// * @param query Query to execute -// * @throws Exception -// */ -// protected void runQuery(String query) throws Exception { -// Statement stmt = null; -// try { -// stmt = getDerbyConnection().createStatement(); -// -// stmt.execute(query); -// } finally { -// if (stmt != null) { -// stmt.close(); -// } -// } -// } -// -// protected Connection getDerbyConnection() { -// return connection; -// } -// -// protected String getJdbcUrl() { -// return JDBC_URL; -// } -// -// protected String getStartJdbcUrl() { -// return JDBC_URL + ";create=true"; -// } -// -// protected String getStopJdbcUrl() { -// return JDBC_URL + ";drop=true"; -// } -// -// /** -// * Load testing connector and framework metadata into repository. -// * -// * @throws Exception -// */ -// protected void loadConnectorAndFramework() throws Exception { -// // Connector entry -// runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" -// + "VALUES('A', 'org.apache.sqoop.test.A', '1.0-test')"); -// -// for(String connector : new String[] {"1", "NULL"}) { -// // Form entries -// for(String operation : new String[] {"null", "'IMPORT'", "'EXPORT'"}) { -// -// String type; -// if(operation.equals("null")) { -// type = "CONNECTION"; -// } else { -// type = "JOB"; -// } -// -// runQuery("INSERT INTO SQOOP.SQ_FORM" -// + "(SQF_CONNECTOR, SQF_OPERATION, SQF_NAME, SQF_TYPE, SQF_INDEX) " -// + "VALUES(" -// + connector + ", " -// + operation -// + ", 'F1', '" -// + type -// + "', 0)"); -// runQuery("INSERT INTO SQOOP.SQ_FORM" -// + "(SQF_CONNECTOR, SQF_OPERATION, SQF_NAME, SQF_TYPE, SQF_INDEX) " -// + "VALUES(" -// + connector + ", " -// + operation -// + ", 'F2', '" -// + type -// + "', 1)"); -// } -// } -// -// // Input entries -// for(int x = 0; x < 2; x++ ) { -// for(int i = 0; i < 3; i++) { -// // First form -// runQuery("INSERT INTO SQOOP.SQ_INPUT" -// +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" -// + " VALUES('I1', " + (x * 6 + i * 2 + 1) + ", 0, 'STRING', false, 30)"); -// runQuery("INSERT INTO SQOOP.SQ_INPUT" -// +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" -// + " VALUES('I2', " + (x * 6 + i * 2 + 1) + ", 1, 'MAP', false, 30)"); -// -// // Second form -// runQuery("INSERT INTO SQOOP.SQ_INPUT" -// +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" -// + " VALUES('I3', " + (x * 6 + i * 2 + 2) + ", 0, 'STRING', false, 30)"); -// runQuery("INSERT INTO SQOOP.SQ_INPUT" -// +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" -// + " VALUES('I4', " + (x * 6 + i * 2 + 2) + ", 1, 'MAP', false, 30)"); -// } -// } -// } -// -// /** -// * Load testing connection objects into metadata repository. -// * -// * @throws Exception -// */ -// public void loadConnections() throws Exception { -// // Insert two connections - CA and CB -// runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " -// + "VALUES('CA', 1)"); -// runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " -// + "VALUES('CB', 1)"); -// -// for(String ci : new String[] {"1", "2"}) { -// for(String i : new String[] {"1", "3", "13", "15"}) { -// runQuery("INSERT INTO SQOOP.SQ_CONNECTION_INPUT" -// + "(SQNI_CONNECTION, SQNI_INPUT, SQNI_VALUE) " -// + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); -// } -// } -// } -// -// /** -// * Load testing job objects into metadata repository. -// * -// * @throws Exception -// */ -// public void loadJobs() throws Exception { -// for(String type : new String[] {"IMPORT", "EXPORT"}) { -// for(String name : new String[] {"JA", "JB"} ) { -// runQuery("INSERT INTO SQOOP.SQ_JOB(SQB_NAME, SQB_CONNECTION, SQB_TYPE)" -// + " VALUES('" + name + "', 1, '" + type + "')"); -// } -// } -// -// // Import inputs -// for(String ci : new String[] {"1", "2"}) { -// for(String i : new String[] {"5", "7", "17", "19"}) { -// runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" -// + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " -// + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); -// } -// } -// -// // Export inputs -// for(String ci : new String[] {"3", "4"}) { -// for(String i : new String[] {"9", "11", "21", "23"}) { -// runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" -// + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " -// + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); -// } -// } -// } -// -// /** -// * Add a second connector for testing with multiple connectors -// */ -// public void addConnector() throws Exception { -// // Connector entry -// runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" -// + "VALUES('B', 'org.apache.sqoop.test.B', '1.0-test')"); -// } -// -// /** -// * Load testing submissions into the metadata repository. -// * -// * @throws Exception -// */ -// public void loadSubmissions() throws Exception { -// runQuery("INSERT INTO SQOOP.SQ_COUNTER_GROUP " -// + "(SQG_NAME) " -// + "VALUES" -// + "('gA'), ('gB')" -// ); -// -// runQuery("INSERT INTO SQOOP.SQ_COUNTER " -// + "(SQR_NAME) " -// + "VALUES" -// + "('cA'), ('cB')" -// ); -// -// runQuery("INSERT INTO SQOOP.SQ_SUBMISSION" -// + "(SQS_JOB, SQS_STATUS, SQS_CREATION_DATE, SQS_UPDATE_DATE," -// + " SQS_EXTERNAL_ID, SQS_EXTERNAL_LINK, SQS_EXCEPTION," -// + " SQS_EXCEPTION_TRACE)" -// + "VALUES " -// + "(1, 'RUNNING', '2012-01-01 01:01:01', '2012-01-01 01:01:01', 'job_1'," -// + "NULL, NULL, NULL)," -// + "(2, 'SUCCEEDED', '2012-01-01 01:01:01', '2012-01-02 01:01:01', 'job_2'," -// + " NULL, NULL, NULL)," -// + "(3, 'FAILED', '2012-01-01 01:01:01', '2012-01-03 01:01:01', 'job_3'," -// + " NULL, NULL, NULL)," -// + "(4, 'UNKNOWN', '2012-01-01 01:01:01', '2012-01-04 01:01:01', 'job_4'," -// + " NULL, NULL, NULL)," -// + "(1, 'RUNNING', '2012-01-01 01:01:01', '2012-01-05 01:01:01', 'job_5'," -// + " NULL, NULL, NULL)" -// ); -// -// runQuery("INSERT INTO SQOOP.SQ_COUNTER_SUBMISSION " -// + "(SQRS_GROUP, SQRS_COUNTER, SQRS_SUBMISSION, SQRS_VALUE) " -// + "VALUES" -// + "(1, 1, 4, 300)" -// ); -// -// } -// -// protected MConnector getConnector() { -// return new MConnector("A", "org.apache.sqoop.test.A", "1.0-test", -// getConnectionForms(), getJobForms()); -// } -// -// protected MFramework getFramework() { -// return new MFramework(getConnectionForms(), getJobForms(), -// FrameworkManager.CURRENT_FRAMEWORK_VERSION); -// } -// -// protected void fillConnection(MConnection connection) { -// List<MForm> forms; -// -// forms = connection.getConnectorPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value1"); -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value2"); -// -// forms = connection.getFrameworkPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value13"); -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value15"); -// } -// -// protected void fillJob(MJob job) { -// List<MForm> forms; -// -// forms = job.getFromPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value1"); -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value2"); -// -// forms = job.getFrameworkPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value13"); -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value15"); -// } -// -// protected List<MJobForms> getJobForms() { -// List <MJobForms> jobForms = new LinkedList<MJobForms>(); -// jobForms.add(new MJobForms(MJob.Type.IMPORT, getForms())); -// jobForms.add(new MJobForms(MJob.Type.EXPORT, getForms())); -// return jobForms; -// } -// -// protected MConnectionForms getConnectionForms() { -// return new MConnectionForms(getForms()); -// } -// -// protected List<MForm> getForms() { -// List<MForm> forms = new LinkedList<MForm>(); -// -// List<MInput<?>> inputs; -// MInput input; -// -// inputs = new LinkedList<MInput<?>>(); -// input = new MStringInput("I1", false, (short)30); -// inputs.add(input); -// input = new MMapInput("I2", false); -// inputs.add(input); -// forms.add(new MForm("F1", inputs)); -// -// inputs = new LinkedList<MInput<?>>(); -// input = new MStringInput("I3", false, (short)30); -// inputs.add(input); -// input = new MMapInput("I4", false); -// inputs.add(input); -// forms.add(new MForm("F2", inputs)); -// -// return forms; -// } -// -// /** -// * Find out number of entries in given table. -// * -// * @param table Table name -// * @return Number of rows in the table -// * @throws Exception -// */ -// protected long countForTable(String table) throws Exception { -// Statement stmt = null; -// ResultSet rs = null; -// -// try { -// stmt = getDerbyConnection().createStatement(); -// -// rs = stmt.executeQuery("SELECT COUNT(*) FROM "+ table); -// rs.next(); -// -// return rs.getLong(1); -// } finally { -// if(stmt != null) { -// stmt.close(); -// } -// if(rs != null) { -// rs.close(); -// } -// } -// } -// -// /** -// * Assert row count for given table. -// * -// * @param table Table name -// * @param expected Expected number of rows -// * @throws Exception -// */ -// protected void assertCountForTable(String table, long expected) -// throws Exception { -// long count = countForTable(table); -// assertEquals(expected, count); -// } -// -// /** -// * Printout repository content for advance debugging. -// * -// * This method is currently unused, but might be helpful in the future, so -// * I'm letting it here. -// * -// * @throws Exception -// */ -// protected void generateDatabaseState() throws Exception { -// for(String tbl : new String[] {"SQ_CONNECTOR", "SQ_FORM", "SQ_INPUT", -// "SQ_CONNECTION", "SQ_CONNECTION_INPUT", "SQ_JOB", "SQ_JOB_INPUT"}) { -// generateTableState("SQOOP." + tbl); -// } -// } -// -// /** -// * Printout one single table. -// * -// * @param table Table name -// * @throws Exception -// */ -// protected void generateTableState(String table) throws Exception { -// PreparedStatement ps = null; -// ResultSet rs = null; -// ResultSetMetaData rsmt = null; -// -// try { -// ps = getDerbyConnection().prepareStatement("SELECT * FROM " + table); -// rs = ps.executeQuery(); -// -// rsmt = rs.getMetaData(); -// -// StringBuilder sb = new StringBuilder(); -// System.out.println("Table " + table + ":"); -// -// for(int i = 1; i <= rsmt.getColumnCount(); i++) { -// sb.append("| ").append(rsmt.getColumnName(i)).append(" "); -// } -// sb.append("|"); -// System.out.println(sb.toString()); -// -// while(rs.next()) { -// sb = new StringBuilder(); -// for(int i = 1; i <= rsmt.getColumnCount(); i++) { -// sb.append("| ").append(rs.getString(i)).append(" "); -// } -// sb.append("|"); -// System.out.println(sb.toString()); -// } -// -// System.out.println(""); -// -// } finally { -// if(rs != null) { -// rs.close(); -// } -// if(ps != null) { -// ps.close(); -// } -// } -// } + private static int SYSTEM_VERSION = 4; + + public static final String DERBY_DRIVER = + "org.apache.derby.jdbc.EmbeddedDriver"; + + public static final String JDBC_URL = + "jdbc:derby:memory:myDB"; + + private Connection connection; + + @Override + public void setUp() throws Exception { + super.setUp(); + + // Create connection to the database + Class.forName(DERBY_DRIVER).newInstance(); + connection = DriverManager.getConnection(getStartJdbcUrl()); + } + + @Override + public void tearDown() throws Exception { + // Close active connection + if(connection != null) { + connection.close(); + } + + try { + // Drop in memory database + DriverManager.getConnection(getStopJdbcUrl()); + } catch (SQLException ex) { + // Dropping Derby database leads always to exception + } + + // Call parent tear down + super.tearDown(); + } + + /** + * Create derby schema. + * + * @throws Exception + */ + protected void createSchema(int version) throws Exception { + if (version > 0) { + runQuery(QUERY_CREATE_SCHEMA_SQOOP); + runQuery(QUERY_CREATE_TABLE_SQ_CONNECTOR); + runQuery(QUERY_CREATE_TABLE_SQ_FORM); + runQuery(QUERY_CREATE_TABLE_SQ_INPUT); + runQuery(QUERY_CREATE_TABLE_SQ_CONNECTION); + runQuery(QUERY_CREATE_TABLE_SQ_JOB); + runQuery(QUERY_CREATE_TABLE_SQ_CONNECTION_INPUT); + runQuery(QUERY_CREATE_TABLE_SQ_JOB_INPUT); + runQuery(QUERY_CREATE_TABLE_SQ_SUBMISSION); + runQuery(QUERY_CREATE_TABLE_SQ_COUNTER_GROUP); + runQuery(QUERY_CREATE_TABLE_SQ_COUNTER); + runQuery(QUERY_CREATE_TABLE_SQ_COUNTER_SUBMISSION); + } + + if (version > 1) { + runQuery(QUERY_CREATE_TABLE_SQ_SYSTEM); + runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_ENABLED); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_ENABLED); + runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_CREATION_USER); + runQuery(QUERY_UPGRADE_TABLE_SQ_CONNECTION_ADD_COLUMN_UPDATE_USER); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_CREATION_USER); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_UPDATE_USER); + runQuery(QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_CREATION_USER); + runQuery(QUERY_UPGRADE_TABLE_SQ_SUBMISSION_ADD_COLUMN_UPDATE_USER); + } + + if (version > 3) { + runQuery(QUERY_UPGRADE_TABLE_SQ_FORM_RENAME_COLUMN_SQF_OPERATION_TO_SQF_DIRECTION); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_RENAME_COLUMN_SQB_CONNECTION_TO_SQB_FROM_CONNECTION); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_COLUMN_SQB_TO_CONNECTION); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_CONSTRAINT_SQB_SQN); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQN_FROM); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_ADD_CONSTRAINT_SQB_SQN_TO); + runQuery(QUERY_UPGRADE_TABLE_SQ_JOB_REMOVE_COLUMN_SQB_TYPE); + } + + runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) VALUES('version', '" + version + "')"); + runQuery("INSERT INTO SQOOP.SQ_SYSTEM(SQM_KEY, SQM_VALUE) " + + "VALUES('framework.version', '1')"); + } + + protected void createSchema() throws Exception { + createSchema(SYSTEM_VERSION); + } + + /** + * Run arbitrary query on derby memory repository. + * + * @param query Query to execute + * @throws Exception + */ + protected void runQuery(String query, String... args) throws Exception { + PreparedStatement stmt = null; + try { + stmt = getDerbyConnection().prepareStatement(query); + + for (int i = 0; i < args.length; ++i) { + stmt.setString(i + 1, args[i]); + } + + stmt.execute(); + } finally { + if (stmt != null) { + stmt.close(); + } + } + } + + protected Connection getDerbyConnection() { + return connection; + } + + protected String getJdbcUrl() { + return JDBC_URL; + } + + protected String getStartJdbcUrl() { + return JDBC_URL + ";create=true"; + } + + protected String getStopJdbcUrl() { + return JDBC_URL + ";drop=true"; + } + + protected void loadConnectorAndFrameworkVersion2() throws Exception { + // Connector entry + runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" + + "VALUES('A', 'org.apache.sqoop.test.A', '1.0-test')"); + + String connector = "1"; + + // Connector form entries + for(String operation : new String[] {"null", "'IMPORT'", "'EXPORT'"}) { + + String type; + if(operation.equals("null")) { + type = "CONNECTION"; + } else { + type = "JOB"; + } + + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_OPERATION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(" + + connector + ", " + + operation + + ", 'F1', '" + + type + + "', 0)"); + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_OPERATION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(" + + connector + ", " + + operation + + ", 'F2', '" + + type + + "', 1)"); + } + + // Framework form entries + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_OPERATION, SQF_NAME, SQF_TYPE, SQF_INDEX) VALUES" + + "(NULL, 'IMPORT', 'output', 'JOB', 0)," + + "(NULL, 'IMPORT', 'throttling', 'JOB', 1)," + + "(NULL, 'EXPORT', 'input', 'JOB', 0)," + + "(NULL, 'EXPORT', 'throttling', 'JOB', 1)," + + "(NULL, NULL, 'security', 'CONNECTION', 0)"); + + // Connector input entries + int x = 0; + for(int i = 0; i < 3; i++) { + // First form + runQuery("INSERT INTO SQOOP.SQ_INPUT" + +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I1', " + (i * 2 + 1) + ", 0, 'STRING', false, 30)"); + runQuery("INSERT INTO SQOOP.SQ_INPUT" + +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I2', " + (i * 2 + 1) + ", 1, 'MAP', false, 30)"); + + // Second form + runQuery("INSERT INTO SQOOP.SQ_INPUT" + +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I3', " + (i * 2 + 2) + ", 0, 'STRING', false, 30)"); + runQuery("INSERT INTO SQOOP.SQ_INPUT" + +"(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I4', " + (i * 2 + 2) + ", 1, 'MAP', false, 30)"); + } + + // Framework input entries. + runQuery("INSERT INTO SQOOP.SQ_INPUT (SQI_NAME, SQI_FORM, SQI_INDEX," + + " SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH, SQI_ENUMVALS)" + +" VALUES ('security.maxConnections',11,0,'INTEGER','false',NULL,NULL)," + + "('input.inputDirectory',9,0,'STRING','false',255,NULL)," + + "('throttling.extractors',8,0,'INTEGER','false',NULL,NULL)," + + "('throttling.loaders',8,1,'INTEGER','false',NULL,NULL)," + + "('output.storageType',7,0,'ENUM','false',NULL,'HDFS')," + + "('output.outputFormat',7,1,'ENUM','false',NULL,'TEXT_FILE,SEQUENCE_FILE')," + + "('output.compression',7,2,'ENUM','false',NULL,'NONE,DEFAULT,DEFLATE,GZIP,BZIP2,LZO,LZ4,SNAPPY')," + + "('output.outputDirectory',7,3,'STRING','false',255,NULL)," + + "('throttling.extractors',10,0,'INTEGER','false',NULL,NULL)," + + "('throttling.loaders',10,1,'INTEGER','false',NULL,NULL)"); + } + + protected void loadConnectorAndFrameworkVersion4() throws Exception { + // Connector entry + runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" + + "VALUES('A', 'org.apache.sqoop.test.A', '1.0-test')"); + + // Connector part + for (String connector : new String[]{"1"}) { + // Form entries + for (String direction : new String[]{"null", "'FROM'", "'TO'"}) { + + String type; + if (direction.equals("null")) { + type = "CONNECTION"; + } else { + type = "JOB"; + } + + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_DIRECTION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(" + + connector + ", " + + direction + + ", 'F1', '" + + type + + "', 0)"); + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_DIRECTION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(" + + connector + ", " + + direction + + ", 'F2', '" + + type + + "', 1)"); + } + } + + // Framework part + for (String type : new String[]{"CONNECTION", "JOB"}) { + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_DIRECTION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(NULL, NULL" + + ", 'F1', '" + + type + + "', 0)"); + runQuery("INSERT INTO SQOOP.SQ_FORM" + + "(SQF_CONNECTOR, SQF_DIRECTION, SQF_NAME, SQF_TYPE, SQF_INDEX) " + + "VALUES(NULL, NULL" + + ", 'F2', '" + + type + + "', 1)"); + } + + // Input entries + // Connector connection parts: 0-3 + // Connector job (FROM) parts: 4-7 + // Connector job (TO) parts: 8-11 + // Framework connection parts: 12-15 + // Framework job parts: 16-19 + for (int i = 0; i < 5; i++) { + // First form + runQuery("INSERT INTO SQOOP.SQ_INPUT" + + "(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I1', " + (i * 2 + 1) + ", 0, 'STRING', false, 30)"); + runQuery("INSERT INTO SQOOP.SQ_INPUT" + + "(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I2', " + (i * 2 + 1) + ", 1, 'MAP', false, 30)"); + + // Second form + runQuery("INSERT INTO SQOOP.SQ_INPUT" + + "(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I3', " + (i * 2 + 2) + ", 0, 'STRING', false, 30)"); + runQuery("INSERT INTO SQOOP.SQ_INPUT" + + "(SQI_NAME, SQI_FORM, SQI_INDEX, SQI_TYPE, SQI_STRMASK, SQI_STRLENGTH)" + + " VALUES('I4', " + (i * 2 + 2) + ", 1, 'MAP', false, 30)"); + } + } + + /** + * Load testing connector and framework metadata into repository. + * + * @param version system version (2 or 4) + * @throws Exception + */ + protected void loadConnectorAndFramework(int version) throws Exception { + switch(version) { + case 2: + loadConnectorAndFrameworkVersion2(); + break; + + case 4: + loadConnectorAndFrameworkVersion4(); + break; + + default: + throw new AssertionError("Invalid connector and framework version: " + version); + } + } + + protected void loadConnectorAndFramework() throws Exception { + loadConnectorAndFramework(SYSTEM_VERSION); + } + + /** + * Load testing connection objects into metadata repository. + * + * @param version system version (2 or 4) + * @throws Exception + */ + public void loadConnections(int version) throws Exception { + switch (version) { + case 2: + // Insert two connections - CA and CB + runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " + + "VALUES('CA', 1)"); + runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " + + "VALUES('CB', 1)"); + + for(String ci : new String[] {"1", "2"}) { + for(String i : new String[] {"1", "3", "13", "15"}) { + runQuery("INSERT INTO SQOOP.SQ_CONNECTION_INPUT" + + "(SQNI_CONNECTION, SQNI_INPUT, SQNI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + } + break; + + case 4: + // Insert two connections - CA and CB + runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " + + "VALUES('CA', 1)"); + runQuery("INSERT INTO SQOOP.SQ_CONNECTION(SQN_NAME, SQN_CONNECTOR) " + + "VALUES('CB', 1)"); + + for (String ci : new String[]{"1", "2"}) { + for (String i : new String[]{"1", "3", "13", "15"}) { + runQuery("INSERT INTO SQOOP.SQ_CONNECTION_INPUT" + + "(SQNI_CONNECTION, SQNI_INPUT, SQNI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + } + break; + + default: + throw new AssertionError("Invalid connector and framework version: " + version); + } + } + + public void loadConnections() throws Exception { + loadConnections(SYSTEM_VERSION); + } + + /** + * Load testing job objects into metadata repository. + * + * @param version system version (2 or 4) + * @throws Exception + */ + public void loadJobs(int version) throws Exception { + switch (version) { + case 2: + for(String type : new String[] {"IMPORT", "EXPORT"}) { + for(String name : new String[] {"JA", "JB"} ) { + runQuery("INSERT INTO SQOOP.SQ_JOB(SQB_NAME, SQB_CONNECTION, SQB_TYPE)" + + " VALUES('" + name + "', 1, '" + type + "')"); + } + } + + // Import inputs + for(String ci : new String[] {"1", "2"}) { + for(String i : new String[] {"5", "7", "17", "19"}) { + runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" + + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + } + + // Export inputs + for(String ci : new String[] {"3", "4"}) { + for(String i : new String[] {"9", "11"}) { + runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" + + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + } + break; + + + case 4: + for (String name : new String[]{"JA", "JB", "JC", "JD"}) { + runQuery("INSERT INTO SQOOP.SQ_JOB(SQB_NAME, SQB_FROM_CONNECTION, SQB_TO_CONNECTION)" + + " VALUES('" + name + "', 1, 1)"); + } + + // Odd IDs inputs have values + for (String ci : new String[]{"1", "2", "3", "4"}) { + for (String i : new String[]{"5", "9", "17"}) { + runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" + + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + + for (String i : new String[]{"7", "11", "19"}) { + runQuery("INSERT INTO SQOOP.SQ_JOB_INPUT" + + "(SQBI_JOB, SQBI_INPUT, SQBI_VALUE) " + + "VALUES(" + ci + ", " + i + ", 'Value" + i + "')"); + } + } + break; + + default: + throw new AssertionError("Invalid connector and framework version: " + version); + } + } + + public void loadJobs() throws Exception { + loadJobs(SYSTEM_VERSION); + } + + /** + * Add a second connector for testing with multiple connectors + */ + public void addConnector() throws Exception { + // Connector entry + runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" + + "VALUES('B', 'org.apache.sqoop.test.B', '1.0-test')"); + } + + /** + * Load testing submissions into the metadata repository. + * + * @throws Exception + */ + public void loadSubmissions() throws Exception { + runQuery("INSERT INTO SQOOP.SQ_COUNTER_GROUP " + + "(SQG_NAME) " + + "VALUES" + + "('gA'), ('gB')" + ); + + runQuery("INSERT INTO SQOOP.SQ_COUNTER " + + "(SQR_NAME) " + + "VALUES" + + "('cA'), ('cB')" + ); + + runQuery("INSERT INTO SQOOP.SQ_SUBMISSION" + + "(SQS_JOB, SQS_STATUS, SQS_CREATION_DATE, SQS_UPDATE_DATE," + + " SQS_EXTERNAL_ID, SQS_EXTERNAL_LINK, SQS_EXCEPTION," + + " SQS_EXCEPTION_TRACE)" + + "VALUES " + + "(1, 'RUNNING', '2012-01-01 01:01:01', '2012-01-01 01:01:01', 'job_1'," + + "NULL, NULL, NULL)," + + "(2, 'SUCCEEDED', '2012-01-01 01:01:01', '2012-01-02 01:01:01', 'job_2'," + + " NULL, NULL, NULL)," + + "(3, 'FAILED', '2012-01-01 01:01:01', '2012-01-03 01:01:01', 'job_3'," + + " NULL, NULL, NULL)," + + "(4, 'UNKNOWN', '2012-01-01 01:01:01', '2012-01-04 01:01:01', 'job_4'," + + " NULL, NULL, NULL)," + + "(1, 'RUNNING', '2012-01-01 01:01:01', '2012-01-05 01:01:01', 'job_5'," + + " NULL, NULL, NULL)" + ); + + runQuery("INSERT INTO SQOOP.SQ_COUNTER_SUBMISSION " + + "(SQRS_GROUP, SQRS_COUNTER, SQRS_SUBMISSION, SQRS_VALUE) " + + "VALUES" + + "(1, 1, 4, 300)" + ); + + } + + protected MConnector getConnector() { + return new MConnector("A", "org.apache.sqoop.test.A", "1.0-test", + getConnectionForms(), new MJobForms(getForms()), new MJobForms(getForms())); + } + + protected MFramework getFramework() { + return new MFramework(getConnectionForms(), new MJobForms(getForms()), + FrameworkManager.CURRENT_FRAMEWORK_VERSION); + } + + protected void fillConnection(MConnection connection) { + List<MForm> forms; + + forms = connection.getConnectorPart().getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value1"); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value2"); + + forms = connection.getFrameworkPart().getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value13"); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value15"); + } + + protected void fillJob(MJob job) { + List<MForm> forms; + + forms = job.getConnectorPart(Direction.FROM).getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value1"); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value2"); + + forms = job.getConnectorPart(Direction.TO).getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value1"); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value2"); + + forms = job.getFrameworkPart().getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Value13"); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Value15"); + } + + protected MConnectionForms getConnectionForms() { + return new MConnectionForms(getForms()); + } + + protected List<MForm> getForms() { + List<MForm> forms = new LinkedList<MForm>(); + + List<MInput<?>> inputs; + MInput input; + + inputs = new LinkedList<MInput<?>>(); + input = new MStringInput("I1", false, (short)30); + inputs.add(input); + input = new MMapInput("I2", false); + inputs.add(input); + forms.add(new MForm("F1", inputs)); + + inputs = new LinkedList<MInput<?>>(); + input = new MStringInput("I3", false, (short)30); + inputs.add(input); + input = new MMapInput("I4", false); + inputs.add(input); + forms.add(new MForm("F2", inputs)); + + return forms; + } + + /** + * Find out number of entries in given table. + * + * @param table Table name + * @return Number of rows in the table + * @throws Exception + */ + protected long countForTable(String table) throws Exception { + Statement stmt = null; + ResultSet rs = null; + + try { + stmt = getDerbyConnection().createStatement(); + + rs = stmt.executeQuery("SELECT COUNT(*) FROM "+ table); + rs.next(); + + return rs.getLong(1); + } finally { + if(stmt != null) { + stmt.close(); + } + if(rs != null) { + rs.close(); + } + } + } + + /** + * Assert row count for given table. + * + * @param table Table name + * @param expected Expected number of rows + * @throws Exception + */ + protected void assertCountForTable(String table, long expected) + throws Exception { + long count = countForTable(table); + assertEquals(expected, count); + } + + /** + * Printout repository content for advance debugging. + * + * This method is currently unused, but might be helpful in the future, so + * I'm letting it here. + * + * @throws Exception + */ + protected void generateDatabaseState() throws Exception { + for(String tbl : new String[] {"SQ_CONNECTOR", "SQ_FORM", "SQ_INPUT", + "SQ_CONNECTION", "SQ_CONNECTION_INPUT", "SQ_JOB", "SQ_JOB_INPUT"}) { + generateTableState("SQOOP." + tbl); + } + } + + /** + * Printout one single table. + * + * @param table Table name + * @throws Exception + */ + protected void generateTableState(String table) throws Exception { + PreparedStatement ps = null; + ResultSet rs = null; + ResultSetMetaData rsmt = null; + + try { + ps = getDerbyConnection().prepareStatement("SELECT * FROM " + table); + rs = ps.executeQuery(); + + rsmt = rs.getMetaData(); + + StringBuilder sb = new StringBuilder(); + System.out.println("Table " + table + ":"); + + for(int i = 1; i <= rsmt.getColumnCount(); i++) { + sb.append("| ").append(rsmt.getColumnName(i)).append(" "); + } + sb.append("|"); + System.out.println(sb.toString()); + + while(rs.next()) { + sb = new StringBuilder(); + for(int i = 1; i <= rsmt.getColumnCount(); i++) { + sb.append("| ").append(rs.getString(i)).append(" "); + } + sb.append("|"); + System.out.println(sb.toString()); + } + + System.out.println(""); + + } finally { + if(rs != null) { + rs.close(); + } + if(ps != null) { + ps.close(); + } + } + } }
http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java index bdd3c05..f9e9217 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectionHandling.java @@ -33,213 +33,213 @@ import java.util.Map; */ public class TestConnectionHandling extends DerbyTestCase { -// DerbyRepositoryHandler handler; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// handler = new DerbyRepositoryHandler(); -// -// // We always needs schema for this test case -// createSchema(); -// -// // We always needs connector and framework structures in place -// loadConnectorAndFramework(); -// } -// -// public void testFindConnection() throws Exception { -// // Let's try to find non existing connection -// try { -// handler.findConnection(1, getDerbyConnection()); -// fail(); -// } catch(SqoopException ex) { -// assertEquals(DerbyRepoError.DERBYREPO_0024, ex.getErrorCode()); -// } -// -// // Load prepared connections into database -// loadConnections(); -// -// MConnection connA = handler.findConnection(1, getDerbyConnection()); -// assertNotNull(connA); -// assertEquals(1, connA.getPersistenceId()); -// assertEquals("CA", connA.getName()); -// -// List<MForm> forms; -// -// // Check connector part -// forms = connA.getConnectorPart().getForms(); -// assertEquals("Value1", forms.get(0).getInputs().get(0).getValue()); -// assertNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals("Value3", forms.get(1).getInputs().get(0).getValue()); -// assertNull(forms.get(1).getInputs().get(1).getValue()); -// -// // Check framework part -// forms = connA.getFrameworkPart().getForms(); -// assertEquals("Value13", forms.get(0).getInputs().get(0).getValue()); -// assertNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals("Value15", forms.get(1).getInputs().get(0).getValue()); -// assertNull(forms.get(1).getInputs().get(1).getValue()); -// } -// -// public void testFindConnections() throws Exception { -// List<MConnection> list; -// -// // Load empty list on empty repository -// list = handler.findConnections(getDerbyConnection()); -// assertEquals(0, list.size()); -// -// loadConnections(); -// -// // Load all two connections on loaded repository -// list = handler.findConnections(getDerbyConnection()); -// assertEquals(2, list.size()); -// -// assertEquals("CA", list.get(0).getName()); -// assertEquals("CB", list.get(1).getName()); -// } -// -// public void testExistsConnection() throws Exception { -// // There shouldn't be anything on empty repository -// assertFalse(handler.existsConnection(1, getDerbyConnection())); -// assertFalse(handler.existsConnection(2, getDerbyConnection())); -// assertFalse(handler.existsConnection(3, getDerbyConnection())); -// -// loadConnections(); -// -// assertTrue(handler.existsConnection(1, getDerbyConnection())); -// assertTrue(handler.existsConnection(2, getDerbyConnection())); -// assertFalse(handler.existsConnection(3, getDerbyConnection())); -// } -// -// public void testCreateConnection() throws Exception { -// MConnection connection = getConnection(); -// -// // Load some data -// fillConnection(connection); -// -// handler.createConnection(connection, getDerbyConnection()); -// -// assertEquals(1, connection.getPersistenceId()); -// assertCountForTable("SQOOP.SQ_CONNECTION", 1); -// assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 4); -// -// MConnection retrieved = handler.findConnection(1, getDerbyConnection()); -// assertEquals(1, retrieved.getPersistenceId()); -// -// List<MForm> forms; -// forms = connection.getConnectorPart().getForms(); -// assertEquals("Value1", forms.get(0).getInputs().get(0).getValue()); -// assertNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals("Value2", forms.get(1).getInputs().get(0).getValue()); -// assertNull(forms.get(1).getInputs().get(1).getValue()); -// -// forms = connection.getFrameworkPart().getForms(); -// assertEquals("Value13", forms.get(0).getInputs().get(0).getValue()); -// assertNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals("Value15", forms.get(1).getInputs().get(0).getValue()); -// assertNull(forms.get(1).getInputs().get(1).getValue()); -// -// // Let's create second connection -// connection = getConnection(); -// fillConnection(connection); -// -// handler.createConnection(connection, getDerbyConnection()); -// -// assertEquals(2, connection.getPersistenceId()); -// assertCountForTable("SQOOP.SQ_CONNECTION", 2); -// assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 8); -// } -// -// public void testInUseConnection() throws Exception { -// loadConnections(); -// -// assertFalse(handler.inUseConnection(1, getDerbyConnection())); -// -// loadJobs(); -// -// assertTrue(handler.inUseConnection(1, getDerbyConnection())); -// } -// -// public void testUpdateConnection() throws Exception { -// loadConnections(); -// -// MConnection connection = handler.findConnection(1, getDerbyConnection()); -// -// List<MForm> forms; -// -// forms = connection.getConnectorPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Updated"); -// ((MMapInput)forms.get(0).getInputs().get(1)).setValue(null); -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Updated"); -// ((MMapInput)forms.get(1).getInputs().get(1)).setValue(null); -// -// forms = connection.getFrameworkPart().getForms(); -// ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Updated"); -// ((MMapInput)forms.get(0).getInputs().get(1)).setValue(new HashMap<String, String>()); // inject new map value -// ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Updated"); -// ((MMapInput)forms.get(1).getInputs().get(1)).setValue(new HashMap<String, String>()); // inject new map value -// -// connection.setName("name"); -// -// handler.updateConnection(connection, getDerbyConnection()); -// -// assertEquals(1, connection.getPersistenceId()); -// assertCountForTable("SQOOP.SQ_CONNECTION", 2); -// assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 10); -// -// MConnection retrieved = handler.findConnection(1, getDerbyConnection()); -// assertEquals("name", connection.getName()); -// -// forms = retrieved.getConnectorPart().getForms(); -// assertEquals("Updated", forms.get(0).getInputs().get(0).getValue()); -// assertNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals("Updated", forms.get(1).getInputs().get(0).getValue()); -// assertNull(forms.get(1).getInputs().get(1).getValue()); -// -// forms = retrieved.getFrameworkPart().getForms(); -// assertEquals("Updated", forms.get(0).getInputs().get(0).getValue()); -// assertNotNull(forms.get(0).getInputs().get(1).getValue()); -// assertEquals(((Map)forms.get(0).getInputs().get(1).getValue()).size(), 0); -// assertEquals("Updated", forms.get(1).getInputs().get(0).getValue()); -// assertNotNull(forms.get(1).getInputs().get(1).getValue()); -// assertEquals(((Map)forms.get(1).getInputs().get(1).getValue()).size(), 0); -// } -// -// public void testEnableAndDisableConnection() throws Exception { -// loadConnections(); -// -// // disable connection 1 -// handler.enableConnection(1, false, getDerbyConnection()); -// -// MConnection retrieved = handler.findConnection(1, getDerbyConnection()); -// assertNotNull(retrieved); -// assertEquals(false, retrieved.getEnabled()); -// -// // enable connection 1 -// handler.enableConnection(1, true, getDerbyConnection()); -// -// retrieved = handler.findConnection(1, getDerbyConnection()); -// assertNotNull(retrieved); -// assertEquals(true, retrieved.getEnabled()); -// } -// -// public void testDeleteConnection() throws Exception { -// loadConnections(); -// -// handler.deleteConnection(1, getDerbyConnection()); -// assertCountForTable("SQOOP.SQ_CONNECTION", 1); -// assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 4); -// -// handler.deleteConnection(2, getDerbyConnection()); -// assertCountForTable("SQOOP.SQ_CONNECTION", 0); -// assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 0); -// } -// -// public MConnection getConnection() { -// return new MConnection(1, -// handler.findConnector("A", getDerbyConnection()).getConnectionForms(), -// handler.findFramework(getDerbyConnection()).getConnectionForms() -// ); -// } + DerbyRepositoryHandler handler; + + @Override + public void setUp() throws Exception { + super.setUp(); + + handler = new DerbyRepositoryHandler(); + + // We always needs schema for this test case + createSchema(); + + // We always needs connector and framework structures in place + loadConnectorAndFramework(); + } + + public void testFindConnection() throws Exception { + // Let's try to find non existing connection + try { + handler.findConnection(1, getDerbyConnection()); + fail(); + } catch(SqoopException ex) { + assertEquals(DerbyRepoError.DERBYREPO_0024, ex.getErrorCode()); + } + + // Load prepared connections into database + loadConnections(); + + MConnection connA = handler.findConnection(1, getDerbyConnection()); + assertNotNull(connA); + assertEquals(1, connA.getPersistenceId()); + assertEquals("CA", connA.getName()); + + List<MForm> forms; + + // Check connector part + forms = connA.getConnectorPart().getForms(); + assertEquals("Value1", forms.get(0).getInputs().get(0).getValue()); + assertNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals("Value3", forms.get(1).getInputs().get(0).getValue()); + assertNull(forms.get(1).getInputs().get(1).getValue()); + + // Check framework part + forms = connA.getFrameworkPart().getForms(); + assertEquals("Value13", forms.get(0).getInputs().get(0).getValue()); + assertNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals("Value15", forms.get(1).getInputs().get(0).getValue()); + assertNull(forms.get(1).getInputs().get(1).getValue()); + } + + public void testFindConnections() throws Exception { + List<MConnection> list; + + // Load empty list on empty repository + list = handler.findConnections(getDerbyConnection()); + assertEquals(0, list.size()); + + loadConnections(); + + // Load all two connections on loaded repository + list = handler.findConnections(getDerbyConnection()); + assertEquals(2, list.size()); + + assertEquals("CA", list.get(0).getName()); + assertEquals("CB", list.get(1).getName()); + } + + public void testExistsConnection() throws Exception { + // There shouldn't be anything on empty repository + assertFalse(handler.existsConnection(1, getDerbyConnection())); + assertFalse(handler.existsConnection(2, getDerbyConnection())); + assertFalse(handler.existsConnection(3, getDerbyConnection())); + + loadConnections(); + + assertTrue(handler.existsConnection(1, getDerbyConnection())); + assertTrue(handler.existsConnection(2, getDerbyConnection())); + assertFalse(handler.existsConnection(3, getDerbyConnection())); + } + + public void testCreateConnection() throws Exception { + MConnection connection = getConnection(); + + // Load some data + fillConnection(connection); + + handler.createConnection(connection, getDerbyConnection()); + + assertEquals(1, connection.getPersistenceId()); + assertCountForTable("SQOOP.SQ_CONNECTION", 1); + assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 4); + + MConnection retrieved = handler.findConnection(1, getDerbyConnection()); + assertEquals(1, retrieved.getPersistenceId()); + + List<MForm> forms; + forms = connection.getConnectorPart().getForms(); + assertEquals("Value1", forms.get(0).getInputs().get(0).getValue()); + assertNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals("Value2", forms.get(1).getInputs().get(0).getValue()); + assertNull(forms.get(1).getInputs().get(1).getValue()); + + forms = connection.getFrameworkPart().getForms(); + assertEquals("Value13", forms.get(0).getInputs().get(0).getValue()); + assertNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals("Value15", forms.get(1).getInputs().get(0).getValue()); + assertNull(forms.get(1).getInputs().get(1).getValue()); + + // Let's create second connection + connection = getConnection(); + fillConnection(connection); + + handler.createConnection(connection, getDerbyConnection()); + + assertEquals(2, connection.getPersistenceId()); + assertCountForTable("SQOOP.SQ_CONNECTION", 2); + assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 8); + } + + public void testInUseConnection() throws Exception { + loadConnections(); + + assertFalse(handler.inUseConnection(1, getDerbyConnection())); + + loadJobs(); + + assertTrue(handler.inUseConnection(1, getDerbyConnection())); + } + + public void testUpdateConnection() throws Exception { + loadConnections(); + + MConnection connection = handler.findConnection(1, getDerbyConnection()); + + List<MForm> forms; + + forms = connection.getConnectorPart().getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Updated"); + ((MMapInput)forms.get(0).getInputs().get(1)).setValue(null); + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Updated"); + ((MMapInput)forms.get(1).getInputs().get(1)).setValue(null); + + forms = connection.getFrameworkPart().getForms(); + ((MStringInput)forms.get(0).getInputs().get(0)).setValue("Updated"); + ((MMapInput)forms.get(0).getInputs().get(1)).setValue(new HashMap<String, String>()); // inject new map value + ((MStringInput)forms.get(1).getInputs().get(0)).setValue("Updated"); + ((MMapInput)forms.get(1).getInputs().get(1)).setValue(new HashMap<String, String>()); // inject new map value + + connection.setName("name"); + + handler.updateConnection(connection, getDerbyConnection()); + + assertEquals(1, connection.getPersistenceId()); + assertCountForTable("SQOOP.SQ_CONNECTION", 2); + assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 10); + + MConnection retrieved = handler.findConnection(1, getDerbyConnection()); + assertEquals("name", connection.getName()); + + forms = retrieved.getConnectorPart().getForms(); + assertEquals("Updated", forms.get(0).getInputs().get(0).getValue()); + assertNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals("Updated", forms.get(1).getInputs().get(0).getValue()); + assertNull(forms.get(1).getInputs().get(1).getValue()); + + forms = retrieved.getFrameworkPart().getForms(); + assertEquals("Updated", forms.get(0).getInputs().get(0).getValue()); + assertNotNull(forms.get(0).getInputs().get(1).getValue()); + assertEquals(((Map)forms.get(0).getInputs().get(1).getValue()).size(), 0); + assertEquals("Updated", forms.get(1).getInputs().get(0).getValue()); + assertNotNull(forms.get(1).getInputs().get(1).getValue()); + assertEquals(((Map)forms.get(1).getInputs().get(1).getValue()).size(), 0); + } + + public void testEnableAndDisableConnection() throws Exception { + loadConnections(); + + // disable connection 1 + handler.enableConnection(1, false, getDerbyConnection()); + + MConnection retrieved = handler.findConnection(1, getDerbyConnection()); + assertNotNull(retrieved); + assertEquals(false, retrieved.getEnabled()); + + // enable connection 1 + handler.enableConnection(1, true, getDerbyConnection()); + + retrieved = handler.findConnection(1, getDerbyConnection()); + assertNotNull(retrieved); + assertEquals(true, retrieved.getEnabled()); + } + + public void testDeleteConnection() throws Exception { + loadConnections(); + + handler.deleteConnection(1, getDerbyConnection()); + assertCountForTable("SQOOP.SQ_CONNECTION", 1); + assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 4); + + handler.deleteConnection(2, getDerbyConnection()); + assertCountForTable("SQOOP.SQ_CONNECTION", 0); + assertCountForTable("SQOOP.SQ_CONNECTION_INPUT", 0); + } + + public MConnection getConnection() { + return new MConnection(1, + handler.findConnector("A", getDerbyConnection()).getConnectionForms(), + handler.findFramework(getDerbyConnection()).getConnectionForms() + ); + } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectorHandling.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectorHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectorHandling.java index 54ae726..745e128 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectorHandling.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestConnectorHandling.java @@ -26,70 +26,70 @@ import java.util.List; */ public class TestConnectorHandling extends DerbyTestCase { -// DerbyRepositoryHandler handler; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// handler = new DerbyRepositoryHandler(); -// -// // We always needs schema for this test case -// createSchema(); -// } -// -// public void testFindConnector() throws Exception { -// // On empty repository, no connectors should be there -// assertNull(handler.findConnector("A", getDerbyConnection())); -// assertNull(handler.findConnector("B", getDerbyConnection())); -// -// // Load connector into repository -// loadConnectorAndFramework(); -// -// // Retrieve it -// MConnector connector = handler.findConnector("A", getDerbyConnection()); -// assertNotNull(connector); -// -// // Get original structure -// MConnector original = getConnector(); -// -// // And compare them -// assertEquals(original, connector); -// } -// -// public void testFindAllConnectors() throws Exception { -// // No connectors in an empty repository, we expect an empty list -// assertEquals(handler.findConnectors(getDerbyConnection()).size(),0); -// -// loadConnectorAndFramework(); -// addConnector(); -// -// // Retrieve connectors -// List<MConnector> connectors = handler.findConnectors(getDerbyConnection()); -// assertNotNull(connectors); -// assertEquals(connectors.size(),2); -// assertEquals(connectors.get(0).getUniqueName(),"A"); -// assertEquals(connectors.get(1).getUniqueName(),"B"); -// -// -// } -// -// public void testRegisterConnector() throws Exception { -// MConnector connector = getConnector(); -// -// handler.registerConnector(connector, getDerbyConnection()); -// -// // Connector should get persistence ID -// assertEquals(1, connector.getPersistenceId()); -// -// // Now check content in corresponding tables -// assertCountForTable("SQOOP.SQ_CONNECTOR", 1); -// assertCountForTable("SQOOP.SQ_FORM", 6); -// assertCountForTable("SQOOP.SQ_INPUT", 12); -// -// // Registered connector should be easily recovered back -// MConnector retrieved = handler.findConnector("A", getDerbyConnection()); -// assertNotNull(retrieved); -// assertEquals(connector, retrieved); -// } + DerbyRepositoryHandler handler; + + @Override + public void setUp() throws Exception { + super.setUp(); + + handler = new DerbyRepositoryHandler(); + + // We always needs schema for this test case + createSchema(); + } + + public void testFindConnector() throws Exception { + // On empty repository, no connectors should be there + assertNull(handler.findConnector("A", getDerbyConnection())); + assertNull(handler.findConnector("B", getDerbyConnection())); + + // Load connector into repository + loadConnectorAndFramework(); + + // Retrieve it + MConnector connector = handler.findConnector("A", getDerbyConnection()); + assertNotNull(connector); + + // Get original structure + MConnector original = getConnector(); + + // And compare them + assertEquals(original, connector); + } + + public void testFindAllConnectors() throws Exception { + // No connectors in an empty repository, we expect an empty list + assertEquals(handler.findConnectors(getDerbyConnection()).size(),0); + + loadConnectorAndFramework(); + addConnector(); + + // Retrieve connectors + List<MConnector> connectors = handler.findConnectors(getDerbyConnection()); + assertNotNull(connectors); + assertEquals(connectors.size(),2); + assertEquals(connectors.get(0).getUniqueName(),"A"); + assertEquals(connectors.get(1).getUniqueName(),"B"); + + + } + + public void testRegisterConnector() throws Exception { + MConnector connector = getConnector(); + + handler.registerConnector(connector, getDerbyConnection()); + + // Connector should get persistence ID + assertEquals(1, connector.getPersistenceId()); + + // Now check content in corresponding tables + assertCountForTable("SQOOP.SQ_CONNECTOR", 1); + assertCountForTable("SQOOP.SQ_FORM", 6); + assertCountForTable("SQOOP.SQ_INPUT", 12); + + // Registered connector should be easily recovered back + MConnector retrieved = handler.findConnector("A", getDerbyConnection()); + assertNotNull(retrieved); + assertEquals(connector, retrieved); + } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java index 8b3326d..006ec9c 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestFrameworkHandling.java @@ -29,102 +29,101 @@ import java.sql.SQLException; */ public class TestFrameworkHandling extends DerbyTestCase { -// DerbyRepositoryHandler handler; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// handler = new DerbyRepositoryHandler(); -// -// // We always needs schema for this test case -// createSchema(); -// } -// -// public void testFindFramework() throws Exception { -// // On empty repository, no framework should be there -// assertNull(handler.findFramework(getDerbyConnection())); -// -// // Load framework into repository -// loadConnectorAndFramework(); -// -// // Retrieve it -// MFramework framework = handler.findFramework(getDerbyConnection()); -// assertNotNull(framework); -// -// // Get original structure -// MFramework original = getFramework(); -// -// // And compare them -// assertEquals(original, framework); -// } -// -// public void testRegisterConnector() throws Exception { -// MFramework framework = getFramework(); -// -// handler.registerFramework(framework, getDerbyConnection()); -// -// // Connector should get persistence ID -// assertEquals(1, framework.getPersistenceId()); -// -// // Now check content in corresponding tables -// assertCountForTable("SQOOP.SQ_CONNECTOR", 0); -// assertCountForTable("SQOOP.SQ_FORM", 6); -// assertCountForTable("SQOOP.SQ_INPUT", 12); -// -// // Registered framework should be easily recovered back -// MFramework retrieved = handler.findFramework(getDerbyConnection()); -// assertNotNull(retrieved); -// assertEquals(framework, retrieved); -// assertEquals(framework.getVersion(), retrieved.getVersion()); -// } -// -// private String getFrameworkVersion() throws Exception { -// final String frameworkVersionQuery = -// "SELECT SQM_VALUE FROM SQOOP.SQ_SYSTEM WHERE SQM_KEY=?"; -// String retVal = null; -// PreparedStatement preparedStmt = null; -// ResultSet resultSet = null; -// try { -// preparedStmt = -// getDerbyConnection().prepareStatement(frameworkVersionQuery); -// preparedStmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION); -// resultSet = preparedStmt.executeQuery(); -// if(resultSet.next()) -// retVal = resultSet.getString(1); -// return retVal; -// } finally { -// if(preparedStmt !=null) { -// try { -// preparedStmt.close(); -// } catch(SQLException e) { -// } -// } -// if(resultSet != null) { -// try { -// resultSet.close(); -// } catch(SQLException e) { -// } -// } -// } -// } -// -// public void testFrameworkVersion() throws Exception { -// handler.registerFramework(getFramework(), getDerbyConnection()); -// -// final String lowerVersion = Integer.toString( -// Integer.parseInt(FrameworkManager.CURRENT_FRAMEWORK_VERSION) - 1); -// assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion()); -// runQuery("UPDATE SQOOP.SQ_SYSTEM SET SQM_VALUE='" + lowerVersion + -// "' WHERE SQM_KEY = '" + DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION + "'"); -// assertEquals(lowerVersion, getFrameworkVersion()); -// -// MFramework framework = getFramework(); -// handler.updateFramework(framework, getDerbyConnection()); -// -// assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, framework.getVersion()); -// -// assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion()); -// } + DerbyRepositoryHandler handler; + @Override + public void setUp() throws Exception { + super.setUp(); + + handler = new DerbyRepositoryHandler(); + + // We always needs schema for this test case + createSchema(); + } + + public void testFindFramework() throws Exception { + // On empty repository, no framework should be there + assertNull(handler.findFramework(getDerbyConnection())); + + // Load framework into repository + loadConnectorAndFramework(); + + // Retrieve it + MFramework framework = handler.findFramework(getDerbyConnection()); + assertNotNull(framework); + + // Get original structure + MFramework original = getFramework(); + + // And compare them + assertEquals(original, framework); + } + + public void testRegisterConnector() throws Exception { + MFramework framework = getFramework(); + + handler.registerFramework(framework, getDerbyConnection()); + + // Connector should get persistence ID + assertEquals(1, framework.getPersistenceId()); + + // Now check content in corresponding tables + assertCountForTable("SQOOP.SQ_CONNECTOR", 0); + assertCountForTable("SQOOP.SQ_FORM", 4); + assertCountForTable("SQOOP.SQ_INPUT", 8); + + // Registered framework should be easily recovered back + MFramework retrieved = handler.findFramework(getDerbyConnection()); + assertNotNull(retrieved); + assertEquals(framework, retrieved); + assertEquals(framework.getVersion(), retrieved.getVersion()); + } + + private String getFrameworkVersion() throws Exception { + final String frameworkVersionQuery = + "SELECT SQM_VALUE FROM SQOOP.SQ_SYSTEM WHERE SQM_KEY=?"; + String retVal = null; + PreparedStatement preparedStmt = null; + ResultSet resultSet = null; + try { + preparedStmt = + getDerbyConnection().prepareStatement(frameworkVersionQuery); + preparedStmt.setString(1, DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION); + resultSet = preparedStmt.executeQuery(); + if(resultSet.next()) + retVal = resultSet.getString(1); + return retVal; + } finally { + if(preparedStmt !=null) { + try { + preparedStmt.close(); + } catch(SQLException e) { + } + } + if(resultSet != null) { + try { + resultSet.close(); + } catch(SQLException e) { + } + } + } + } + + public void testFrameworkVersion() throws Exception { + handler.registerFramework(getFramework(), getDerbyConnection()); + + final String lowerVersion = Integer.toString( + Integer.parseInt(FrameworkManager.CURRENT_FRAMEWORK_VERSION) - 1); + assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion()); + runQuery("UPDATE SQOOP.SQ_SYSTEM SET SQM_VALUE='" + lowerVersion + + "' WHERE SQM_KEY = '" + DerbyRepoConstants.SYSKEY_FRAMEWORK_VERSION + "'"); + assertEquals(lowerVersion, getFrameworkVersion()); + + MFramework framework = getFramework(); + handler.updateFramework(framework, getDerbyConnection()); + + assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, framework.getVersion()); + + assertEquals(FrameworkManager.CURRENT_FRAMEWORK_VERSION, getFrameworkVersion()); + } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java index 5d3807d..15f9539 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInputTypes.java @@ -40,107 +40,107 @@ import java.util.Map; */ public class TestInputTypes extends DerbyTestCase { -// DerbyRepositoryHandler handler; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// handler = new DerbyRepositoryHandler(); -// -// // We always needs schema for this test case -// createSchema(); -// } -// -// /** -// * Ensure that metadata with all various data types can be successfully -// * serialized into repository and retrieved back. -// */ -// public void testMetadataSerialization() throws Exception { -// MConnector connector = getConnector(); -// -// // Serialize the connector with all data types into repository -// handler.registerConnector(connector, getDerbyConnection()); -// -// // Successful serialization should update the ID -// assertNotSame(connector.getPersistenceId(), MPersistableEntity.PERSISTANCE_ID_DEFAULT); -// -// // Retrieve registered connector -// MConnector retrieved = handler.findConnector(connector.getUniqueName(), getDerbyConnection()); -// assertNotNull(retrieved); -// -// // Original and retrieved connectors should be the same -// assertEquals(connector, retrieved); -// } -// -// /** -// * Test that serializing actual data is not an issue. -// */ -// public void testDataSerialization() throws Exception { -// MConnector connector = getConnector(); -// MFramework framework = getFramework(); -// -// // Register metadata for everything and our new connector -// handler.registerConnector(connector, getDerbyConnection()); -// handler.registerFramework(framework, getDerbyConnection()); -// -// // Inserted values -// Map<String, String> map = new HashMap<String, String>(); -// map.put("A", "B"); -// -// // Connection object with all various values -// MConnection connection = new MConnection(connector.getPersistenceId(), connector.getConnectionForms(), framework.getConnectionForms()); -// MConnectionForms forms = connection.getConnectorPart(); -// forms.getStringInput("f.String").setValue("A"); -// forms.getMapInput("f.Map").setValue(map); -// forms.getIntegerInput("f.Integer").setValue(1); -// forms.getBooleanInput("f.Boolean").setValue(true); -// forms.getEnumInput("f.Enum").setValue("YES"); -// -// // Create the connection in repository -// handler.createConnection(connection, getDerbyConnection()); -// assertNotSame(connection.getPersistenceId(), MPersistableEntity.PERSISTANCE_ID_DEFAULT); -// -// // Retrieve created connection -// MConnection retrieved = handler.findConnection(connection.getPersistenceId(), getDerbyConnection()); -// forms = retrieved.getConnectorPart(); -// assertEquals("A", forms.getStringInput("f.String").getValue()); -// assertEquals(map, forms.getMapInput("f.Map").getValue()); -// assertEquals(1, (int)forms.getIntegerInput("f.Integer").getValue()); -// assertEquals(true, (boolean)forms.getBooleanInput("f.Boolean").getValue()); -// assertEquals("YES", forms.getEnumInput("f.Enum").getValue()); -// } -// -// /** -// * Overriding parent method to get forms with all supported data types. -// * -// * @return Forms with all data types -// */ -// @Override -// protected List<MForm> getForms() { -// List<MForm> forms = new LinkedList<MForm>(); -// -// List<MInput<?>> inputs; -// MInput input; -// -// inputs = new LinkedList<MInput<?>>(); -// -// input = new MStringInput("f.String", false, (short)30); -// inputs.add(input); -// -// input = new MMapInput("f.Map", false); -// inputs.add(input); -// -// input = new MIntegerInput("f.Integer", false); -// inputs.add(input); -// -// input = new MBooleanInput("f.Boolean", false); -// inputs.add(input); -// -// input = new MEnumInput("f.Enum", false, new String[] {"YES", "NO"}); -// inputs.add(input); -// -// forms.add(new MForm("f", inputs)); -// return forms; -// } + DerbyRepositoryHandler handler; + + @Override + public void setUp() throws Exception { + super.setUp(); + + handler = new DerbyRepositoryHandler(); + + // We always needs schema for this test case + createSchema(); + } + + /** + * Ensure that metadata with all various data types can be successfully + * serialized into repository and retrieved back. + */ + public void testMetadataSerialization() throws Exception { + MConnector connector = getConnector(); + + // Serialize the connector with all data types into repository + handler.registerConnector(connector, getDerbyConnection()); + + // Successful serialization should update the ID + assertNotSame(connector.getPersistenceId(), MPersistableEntity.PERSISTANCE_ID_DEFAULT); + + // Retrieve registered connector + MConnector retrieved = handler.findConnector(connector.getUniqueName(), getDerbyConnection()); + assertNotNull(retrieved); + + // Original and retrieved connectors should be the same + assertEquals(connector, retrieved); + } + + /** + * Test that serializing actual data is not an issue. + */ + public void testDataSerialization() throws Exception { + MConnector connector = getConnector(); + MFramework framework = getFramework(); + + // Register metadata for everything and our new connector + handler.registerConnector(connector, getDerbyConnection()); + handler.registerFramework(framework, getDerbyConnection()); + + // Inserted values + Map<String, String> map = new HashMap<String, String>(); + map.put("A", "B"); + + // Connection object with all various values + MConnection connection = new MConnection(connector.getPersistenceId(), connector.getConnectionForms(), framework.getConnectionForms()); + MConnectionForms forms = connection.getConnectorPart(); + forms.getStringInput("f.String").setValue("A"); + forms.getMapInput("f.Map").setValue(map); + forms.getIntegerInput("f.Integer").setValue(1); + forms.getBooleanInput("f.Boolean").setValue(true); + forms.getEnumInput("f.Enum").setValue("YES"); + + // Create the connection in repository + handler.createConnection(connection, getDerbyConnection()); + assertNotSame(connection.getPersistenceId(), MPersistableEntity.PERSISTANCE_ID_DEFAULT); + + // Retrieve created connection + MConnection retrieved = handler.findConnection(connection.getPersistenceId(), getDerbyConnection()); + forms = retrieved.getConnectorPart(); + assertEquals("A", forms.getStringInput("f.String").getValue()); + assertEquals(map, forms.getMapInput("f.Map").getValue()); + assertEquals(1, (int)forms.getIntegerInput("f.Integer").getValue()); + assertEquals(true, (boolean)forms.getBooleanInput("f.Boolean").getValue()); + assertEquals("YES", forms.getEnumInput("f.Enum").getValue()); + } + + /** + * Overriding parent method to get forms with all supported data types. + * + * @return Forms with all data types + */ + @Override + protected List<MForm> getForms() { + List<MForm> forms = new LinkedList<MForm>(); + + List<MInput<?>> inputs; + MInput input; + + inputs = new LinkedList<MInput<?>>(); + + input = new MStringInput("f.String", false, (short)30); + inputs.add(input); + + input = new MMapInput("f.Map", false); + inputs.add(input); + + input = new MIntegerInput("f.Integer", false); + inputs.add(input); + + input = new MBooleanInput("f.Boolean", false); + inputs.add(input); + + input = new MEnumInput("f.Enum", false, new String[] {"YES", "NO"}); + inputs.add(input); + + forms.add(new MForm("f", inputs)); + return forms; + } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/51a07bc3/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java ---------------------------------------------------------------------- diff --git a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java index 0d93348..913439b 100644 --- a/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java +++ b/repository/repository-derby/src/test/java/org/apache/sqoop/repository/derby/TestInternals.java @@ -17,31 +17,53 @@ */ package org.apache.sqoop.repository.derby; +import java.sql.Connection; + /** * */ public class TestInternals extends DerbyTestCase { -// DerbyRepositoryHandler handler; -// -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// -// handler = new DerbyRepositoryHandler(); -// } -// -// public void testSuitableInternals() throws Exception { -// assertFalse(handler.haveSuitableInternals(getDerbyConnection())); -// createSchema(); // Test code is building the structures -// assertTrue(handler.haveSuitableInternals(getDerbyConnection())); -// } -// -// public void testCreateorUpdateInternals() throws Exception { -// assertFalse(handler.haveSuitableInternals(getDerbyConnection())); -// handler.createOrUpdateInternals(getDerbyConnection()); -// assertTrue(handler.haveSuitableInternals(getDerbyConnection())); -// } + DerbyRepositoryHandler handler; + + @Override + public void setUp() throws Exception { + super.setUp(); + + handler = new TestDerbyRepositoryHandler(); + } + + public void testSuitableInternals() throws Exception { + assertFalse(handler.haveSuitableInternals(getDerbyConnection())); + createSchema(); // Test code is building the structures + assertTrue(handler.haveSuitableInternals(getDerbyConnection())); + } + + public void testCreateorUpdateInternals() throws Exception { + assertFalse(handler.haveSuitableInternals(getDerbyConnection())); + handler.createOrUpdateInternals(getDerbyConnection()); + assertTrue(handler.haveSuitableInternals(getDerbyConnection())); + } + public void testUpgradeVersion2ToVersion4() throws Exception { + createSchema(2); + assertFalse(handler.haveSuitableInternals(getDerbyConnection())); + loadConnectorAndFramework(2); + loadConnections(2); + loadJobs(2); + handler.createOrUpdateInternals(getDerbyConnection()); + assertTrue(handler.haveSuitableInternals(getDerbyConnection())); + } + private class TestDerbyRepositoryHandler extends DerbyRepositoryHandler { + protected long registerHdfsConnector(Connection conn) { + try { + runQuery("INSERT INTO SQOOP.SQ_CONNECTOR(SQC_NAME, SQC_CLASS, SQC_VERSION)" + + "VALUES('hdfs-connector', 'org.apache.sqoop.test.B', '1.0-test')"); + return 2L; + } catch(Exception e) { + return -1L; + } + } + } }
