/* * Copyright 2014 NAVER Corp. * * 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 com.navercorp.pinpoint.plugin.jdbc.oracle.parser; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.navercorp.pinpoint.plugin.jdbc.oracle.parser.Description; import com.navercorp.pinpoint.plugin.jdbc.oracle.parser.KeyValue; import com.navercorp.pinpoint.plugin.jdbc.oracle.parser.OracleConnectionStringException; import com.navercorp.pinpoint.plugin.jdbc.oracle.parser.OracleNetConnectionDescriptorParser; /** * @author emeroad */ public class OracleNetConnectionDescriptorParserTest { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Test public void simple() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" + "(CONNECT_DATA=(SERVICE_NAME=service)))"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); logger.info(keyValue.toString()); Description des = new Description(keyValue); Assert.assertEquals(des.getServiceName(), "service"); } @Test public void emptyValue() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=)" + "(CONNECT_DATA=(SERVICE_NAME=)))"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); logger.info(keyValue.toString()); Description des = new Description(keyValue); Assert.assertEquals(des.getServiceName(), null); } @Test public void parse() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)" + "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.4) (PORT=1521))" + "(ADDRESS=(PROTOCOL=TCP)(HOST=1.2.3.5) (PORT=1522))" + "(CONNECT_DATA=(SERVICE_NAME=service)))"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); Description description = new Description(keyValue); Description value = new Description(); value.setServiceName("service"); value.addAddress("tcp", "1.2.3.4", "1521"); value.addAddress("tcp", "1.2.3.5", "1522"); Assert.assertEquals(description, value); } @Test public void parse2() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP)(HOST = 1.2.3.4 ) (PORT = 1521 ))" + "(ADDRESS = (PROTOCOL = TCP ) (HOST = 1.2.3.5) ( PORT = 1522 ))" + " ( CONNECT_DATA = ( SERVICE_NAME = service ) ) )"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); Description description = new Description(keyValue); Description value = new Description(); value.setServiceName("service"); value.addAddress("tcp", "1.2.3.4", "1521"); value.addAddress("tcp", "1.2.3.5", "1522"); Assert.assertEquals(description, value); } @Test public void parse3() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP)(HOST = 1.2.3.4 ) (PORT = 1521 ))" + "(ADDRESS = (PROTOCOL = TCP ) (HOST = 1.2.3.5) ( PORT = 1522 ))" + "(ADDRESS = (PROTOCOL = TCP ) (HOST = 1.2.3.6) ( PORT = 1523 ))" + " ( CONNECT_DATA = ( SERVICE_NAME = service ) ) )"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); Description description = new Description(keyValue); Description value = new Description(); value.setServiceName("service"); value.addAddress("tcp", "1.2.3.4", "1521"); value.addAddress("tcp", "1.2.3.5", "1522"); value.addAddress("tcp", "1.2.3.6", "1523"); Assert.assertEquals(description, value); } @Test public void parse4() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP)(HOST = 1.2.3.4 ) (PORT = 1521 ))" + " ( CONNECT_DATA = ( SID = sid ) ) )"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); KeyValue keyValue = parser.parse(); Description description = new Description(keyValue); Description value = new Description(); value.setSid("sid"); value.addAddress("tcp", "1.2.3.4", "1521"); Assert.assertEquals(description, value); } @Test public void parseEofError() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP)(HOST = 1.2.3.4 ) (PORT = 1521 ))" + // " ( CONNECT_DATA = ( SID = sid ) ) )"; " ( CONNECT_DATA = ( SID = sid ) ) "; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); try { KeyValue keyValue = parser.parse(); Assert.fail(); } catch (OracleConnectionStringException e) { logger.info("Expected error", e); } } @Test public void parseSyntaxError() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP) HOST = 1.2.3.4 ) (PORT = 1521 ))" + " ( CONNECT_DATA = ( SID = sid ) ) )"; OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); try { KeyValue keyValue = parser.parse(); Assert.fail(); } catch (OracleConnectionStringException e) { logger.info("Expected error", e); } } @Test public void parseSyntaxError2() { String rac = "jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE = off )" + "(ADDRESS = ( PROTOCOL = TCP) (HOST = 1.2.3.4 ) ( = 1521 ))" + " ( CONNECT_DATA = ( SID = sid ) ) )"; // removed port OracleNetConnectionDescriptorParser parser = new OracleNetConnectionDescriptorParser(rac); try { KeyValue keyValue = parser.parse(); Assert.fail(); } catch (OracleConnectionStringException e) { logger.info("Expected error", e); } } }