/**
* Copyright 2011 Nube Technologies
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
*/
package co.nubetech.hiho.job;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import co.nubetech.hiho.mapreduce.lib.db.apache.DBConfiguration;
import co.nubetech.hiho.common.HIHOConf;
import co.nubetech.hiho.common.HIHOException;
public class TestExportToOracleDb {
private String createExternalTable="create table age( i Number, n Varchar(20)," +
" a Number)organization external ( type oracle_loader default directory" +
" ext_dir access parameters (records delimited by newlinefields terminated" +
" by ','missing field values are null )location (/home/nube/:file.txt) reject' limit unlimited";
@Test
public void testTableCorrect() throws HIHOException {
String query = "create table age( i Number, n Varchar(20)," +
" a Number)organization external ( type oracle_loader " +
"default directory ext_dir access parameters (records delimited" +
" by newlinefields terminated by ','missing field values are null )location " +
" (/home/nube/:file.txt) reject' limit unlimited;";
assertEquals("age", ExportToOracleDb.getTableName(query));
}
@Test
public void testTableWithSpaceCorrect() throws HIHOException {
String query = "create table age ( i Number, n Varchar(20)," +
" a Number)organization external ( type oracle_loader default directory" +
" ext_dir access parameters (records delimited by newlinefields terminated " +
"by ','missing field values are null )location (/home/nube/:file.txt) reject' limit unlimited;";
assertEquals("age", ExportToOracleDb.getTableName(query));
}
@Test(expected = HIHOException.class)
public void testTableNoBrackets() throws HIHOException {
String query = "create age ";
ExportToOracleDb.getTableName(query);
}
@Test
public void testExtDir() throws HIHOException {
String query = "create table age( i Number, n Varchar(20), a Number)organization external ( type oracle_loader default directory ext_dir access parameters (records delimited by newlinefields terminated by ','missing field values are null )location (/home/nube/:file.txt) reject' limit unlimited;";
assertEquals("ext_dir", ExportToOracleDb.getExternalDir(query));
}
@Test
public void testAlterTableDMl() throws HIHOException, IOException {
Configuration conf = mock(Configuration.class);
Path path = mock(Path.class);
FileStatus status1 = mock(FileStatus.class);
Path path1 = mock(Path.class);
when(path1.getName()).thenReturn("part-xxxxx");
when(status1.getPath()).thenReturn(path1);
FileStatus status2 = mock(FileStatus.class);
Path path2 = mock(Path.class);
when(path2.getName()).thenReturn("part-yyyyy");
when(status2.getPath()).thenReturn(path2);
FileSystem fs = mock(FileSystem.class);
when(fs.listStatus(path)).thenReturn(
new FileStatus[] { status1, status2 });
when(path.getFileSystem(conf)).thenReturn(fs);
when(conf.get(HIHOConf.EXTERNAL_TABLE_DML))
.thenReturn(
"create table age( i Number, n Varchar(20), a Number)organization external ( type oracle_loader default directory ext_dir access parameters (records delimited by newlinefields terminated by ','missing field values are null )location (/home/nube/:file.txt) reject' limit unlimited;");
String dml = ExportToOracleDb.getAlterTableDML(path, conf);
assertEquals(" ALTER TABLE age LOCATION ('part-xxxxx','part-yyyyy')",
dml);
}
@Test
public void testPopulateConfiguration() {
String[] args = new String[] { "-inputPath", "input",
"-oracleFtpAddress", "192.168.128.2", "-oracleFtpPortNumber",
"21", "-oracleFtpUserName", "nube", "-oracleFtpPassword",
"nube123", "-oracleExternalTableDirectory", "home/nube/age",
"-driver", "oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
assertEquals("192.168.128.2", conf.get(HIHOConf.ORACLE_FTP_ADDRESS));
assertEquals("21", conf.get(HIHOConf.ORACLE_FTP_PORT));
assertEquals("nube", conf.get(HIHOConf.ORACLE_FTP_USER));
assertEquals("nube123", conf.get(HIHOConf.ORACLE_FTP_PASSWORD));
assertEquals("home/nube/age",
conf.get(HIHOConf.ORACLE_EXTERNAL_TABLE_DIR));
assertEquals("oracle.jdbc.driver.OracleDriver",
conf.get(DBConfiguration.DRIVER_CLASS_PROPERTY));
assertEquals("jdbc:oracle:thin:@192.168.128.2:1521:nube",
conf.get(DBConfiguration.URL_PROPERTY));
assertEquals("system", conf.get(DBConfiguration.USERNAME_PROPERTY));
assertEquals("nube", conf.get(DBConfiguration.PASSWORD_PROPERTY));
assertEquals(createExternalTable, conf.get(HIHOConf.EXTERNAL_TABLE_DML));
}
@Test
public void testCheckMandatoryConfsValidValues() throws HIHOException {
String[] args = new String[] { "-inputPath", "input",
"-oracleFtpAddress", "192.168.128.2", "-oracleFtpPortNumber",
"21", "-oracleFtpUserName", "nube", "-oracleFtpPassword",
"nube123", "-oracleExternalTableDirectory", "home/nube/age",
"-driver", "oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForInputPath() throws HIHOException {
String[] args = new String[] { "-inputPath", "-oracleFtpAddress",
"192.168.128.2", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "nube", "-oracleFtpPassword", "nube123",
"-oracleExternalTableDirectory", "home/nube/age", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleFtpAddress()
throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "nube", "-oracleFtpPassword", "nube123",
"-oracleExternalTableDirectory", "home/nube/age", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleFtpPortNumber()
throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber",
"-oracleFtpUserName", "nube", "-oracleFtpPassword", "nube123",
"-oracleExternalTableDirectory", "home/nube/age", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleFtpUserName()
throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "-oracleFtpPassword", "nube123",
"-oracleExternalTableDirectory", "home/nube/age", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleFtpPassword()
throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"-oracleExternalTableDirectory", "home/nube/age", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleExternalTableDirectory()
throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "-driver",
"oracle.jdbc.driver.OracleDriver", "-url",
"jdbc:oracle:thin:@192.168.128.2:1521:nube", "-userName",
"system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleDriver() throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "/a/b/c ",
"-driver", "-url", "jdbc:oracle:thin:@192.168.128.2:1521:nube",
"-userName", "system", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleUrl() throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "/a/b/c ",
"-driver", "oracle:jdbc:driver", "-url", "-userName", "system",
"-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOracleUsername() throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "/a/b/c ",
"-driver", "oracle:jdbc:driver", "-url", "jdbc:oracle",
"-userName", "-password", "nube", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForOraclePassword() throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "/a/b/c ",
"-driver", "oracle:jdbc:driver", "-url", "jdbc:oracle",
"-userName", "abc", "-password", "-externalTable",createExternalTable };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
@Test(expected = HIHOException.class)
public void testCheckMandatoryConfsForCreateExternalTableQuery() throws HIHOException {
String[] args = new String[] { "-inputPath", "inputpath",
"-oracleFtpAddress", "address", "-oracleFtpPortNumber", "21",
"-oracleFtpUserName", "abc123", "-oracleFtpPassword",
"nubeabc", "-oracleExternalTableDirectory", "/a/b/c ",
"-driver", "oracle:jdbc:driver", "-url", "jdbc:oracle",
"-userName", "abc", "-password","passwd", "-externalTable" };
ExportToOracleDb exportToOracleDb = new ExportToOracleDb();
Configuration conf = new Configuration();
exportToOracleDb.populateConfiguration(args, conf);
exportToOracleDb.checkMandatoryConfs(conf);
}
}