| /** |
| * 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.manager.oracle; |
| import org.junit.After; |
| import org.junit.AfterClass; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| import org.apache.sqoop.manager.oracle.OraOopUtilities. |
| JdbcOracleThinConnectionParsingError; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| /** |
| * Unit tests for OraOopJdbcUrl. |
| */ |
| public class TestOraOopJdbcUrl extends OraOopTestCase { |
| |
| @BeforeClass |
| public static void setUpBeforeClass() throws Exception { |
| |
| } |
| |
| @AfterClass |
| public static void tearDownAfterClass() throws Exception { |
| |
| } |
| |
| @Before |
| public void setUp() throws Exception { |
| |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| |
| } |
| |
| @Test |
| public void testParseJdbcOracleThinConnectionString() { |
| |
| OraOopUtilities.JdbcOracleThinConnection actual; |
| |
| // Null JDBC URL... |
| try { |
| actual = new OraOopJdbcUrl(null).parseJdbcOracleThinConnectionString(); |
| fail("An IllegalArgumentException should be been thrown."); |
| } catch (IllegalArgumentException ex) { |
| /* This is what we want to happen. */ |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail("An IllegalArgumentException should be been thrown."); |
| } |
| |
| // Empty JDBC URL... |
| try { |
| actual = new OraOopJdbcUrl("").parseJdbcOracleThinConnectionString(); |
| fail("An IllegalArgumentException should be been thrown."); |
| } catch (IllegalArgumentException ex) { |
| /* This is what we want to happen. */ |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail("An IllegalArgumentException should be been thrown."); |
| } |
| |
| // Incorrect number of fragments in the URL... |
| try { |
| actual = |
| new OraOopJdbcUrl("jdbc:oracle:oci8:@dbname.domain") |
| .parseJdbcOracleThinConnectionString(); |
| fail( |
| "A JdbcOracleThinConnectionParsingError should be been thrown."); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| // This is what we want to happen. |
| assertTrue( |
| "An exception should be thown that tells us there's an incorrect " |
| + "number of fragments in the JDBC URL.", |
| ex.getMessage() |
| .toLowerCase() |
| .contains("the oracle \"thin\" jdbc driver is not being used.")); |
| } |
| |
| // Incorrect driver-type (i.e. not using the "thin" driver)... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:loremipsum:@hostname.domain.com.au:port1521:dbsid") |
| .parseJdbcOracleThinConnectionString(); |
| fail( |
| "A JdbcOracleThinConnectionParsingError should be been thrown."); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| // This is what we want to happen. |
| assertTrue( |
| "An exception should be thown that refers to the fact that the thin " |
| + "JDBC driver is not being used.", |
| ex.getMessage().toLowerCase().contains( |
| "oracle \"thin\" jdbc driver is not being used")); |
| |
| assertTrue( |
| "An exception should be thown that tells us which JDBC driver " |
| + "was specified.", |
| ex.getMessage().toLowerCase().contains("loremipsum")); |
| |
| } |
| |
| // Invalid JDBC URL (unparsable port number)... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@hostname.domain.com.au:port1521:dbsid") |
| .parseJdbcOracleThinConnectionString(); |
| fail( |
| "An JdbcOracleThinConnectionParsingError should be been thrown."); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| assertTrue( |
| "The invalid port number should be included in the exception message.", |
| ex.getMessage().toLowerCase().contains("port1521")); |
| } |
| |
| // Invalid JDBC URL (negative port number)... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@hostname.domain.com.au:-1521:dbsid") |
| .parseJdbcOracleThinConnectionString(); |
| fail( |
| "An JdbcOracleThinConnectionParsingError should be been thrown."); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| assertTrue( |
| "The invalid port number should be included in the exception message.", |
| ex.getMessage().toLowerCase().contains("-1521")); |
| } |
| |
| // Valid JDBC URL... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "JDBC:Oracle:tHiN:@hostname.domain.com.au:1521:dbsid") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname.domain.com.au", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals("dbsid", actual.getSid()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid JDBC URL... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| " JDBC : Oracle : tHiN : @hostname.domain.com.au : 1529 : dbsid") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname.domain.com.au", actual.getHost()); |
| assertEquals(1529, actual.getPort()); |
| assertEquals("dbsid", actual.getSid()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid (sid-based) JDBC URL with parameters... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@hostname:1521:dbsid?param1=loremipsum") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals("dbsid", actual.getSid()); |
| assertEquals(null, actual.getService()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid (service-based) JDBC URL... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@hostname:1521/dbservice.dbdomain") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals(null, actual.getSid()); |
| assertEquals("dbservice.dbdomain", actual.getService()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid (service-based) JDBC URL with slashes... |
| try { |
| actual = |
| new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@//hostname:1521/dbservice.dbdomain") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals(null, actual.getSid()); |
| assertEquals("dbservice.dbdomain", actual.getService()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid (service-based) JDBC URL with parameters... |
| try { |
| actual = new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@hostname:1521/dbservice.dbdomain?param1=loremipsum") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals(null, actual.getSid()); |
| assertEquals("dbservice.dbdomain", actual.getService()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| |
| // Valid (service-based) JDBC URL with slashes and parameters... |
| try { |
| actual = new OraOopJdbcUrl( |
| "jdbc:oracle:thin:@//hostname:1521/dbservice.dbdomain?param1=loremipsum") |
| .parseJdbcOracleThinConnectionString(); |
| assertEquals("hostname", actual.getHost()); |
| assertEquals(1521, actual.getPort()); |
| assertEquals(null, actual.getSid()); |
| assertEquals("dbservice.dbdomain", actual.getService()); |
| } catch (JdbcOracleThinConnectionParsingError ex) { |
| fail(ex.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testGetConnectionUrl() { |
| |
| String actual; |
| |
| // Null JDBC URL... |
| try { |
| actual = new OraOopJdbcUrl(null).getConnectionUrl(); |
| fail("An IllegalArgumentException should be been thrown."); |
| } catch (IllegalArgumentException ex) { |
| /* This is what we want to happen. */ |
| } |
| |
| // Empty JDBC URL... |
| try { |
| actual = new OraOopJdbcUrl("").getConnectionUrl(); |
| fail("An IllegalArgumentException should be been thrown."); |
| } catch (IllegalArgumentException ex) { |
| /* This is what we want to happen. */ |
| } |
| |
| // JDBC URL... |
| actual = |
| new OraOopJdbcUrl("jdbc:oracle:thin:@hostname.domain:1521:dbsid") |
| .getConnectionUrl(); |
| assertEquals("jdbc:oracle:thin:@hostname.domain:1521:dbsid", actual); |
| |
| } |
| |
| } |