/*
* 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.postgresql;
import com.navercorp.pinpoint.bootstrap.context.DatabaseInfo;
import com.navercorp.pinpoint.common.trace.ServiceType;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
/**
* @author Brad Hong
*/
public class PostgreSqlUrlParserTest {
private Logger logger = LoggerFactory.getLogger(PostgreSqlUrlParserTest.class);
private PostgreSqlJdbcUrlParser jdbcUrlParser = new PostgreSqlJdbcUrlParser();
@Test
public void testURIParse() throws Exception {
URI uri = URI.create("jdbc:postgresql:replication://10.98.133.22:3306/test_lucy_db");
logger.debug(uri.toString());
logger.debug(uri.getScheme());
// URI parsing has limitation.
try {
URI oracleRac = URI.create("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=1521))" +
"(CONNECT_DATA=(SERVICE_NAME=service)))");
logger.debug(oracleRac.toString());
logger.debug(oracleRac.getScheme());
Assert.fail();
} catch (Exception e) {
}
}
@Test
public void postgresqlParse1() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql://ip_address:3306/database_name?useUnicode=yes&characterEncoding=UTF-8");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), ("ip_address:3306"));
Assert.assertEquals(dbInfo.getDatabaseId(), "database_name");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql://ip_address:3306/database_name");
}
@Test
public void postgresqlParse2() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql://10.98.133.22:3306/test_lucy_db");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), "10.98.133.22:3306");
Assert.assertEquals(dbInfo.getDatabaseId(), "test_lucy_db");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql://10.98.133.22:3306/test_lucy_db");
logger.info(dbInfo.toString());
logger.info(dbInfo.getMultipleHost());
}
@Test
public void postgresqlParse3() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql://61.74.71.31/log?useUnicode=yes&characterEncoding=UTF-8");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), "61.74.71.31");
Assert.assertEquals(dbInfo.getDatabaseId(), "log");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql://61.74.71.31/log");
logger.info(dbInfo.toString());
}
@Test
public void postgresqlParseCookierunMaster() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql://10.115.8.209:5605/db_cookierun?useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&autoDeserialize=true&elideSetAutoCommits=true&sessionVariables=time_zone='%2B09:00',tx_isolation='READ-COMMITTED'");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), "10.115.8.209:5605");
Assert.assertEquals(dbInfo.getDatabaseId(), "db_cookierun");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql://10.115.8.209:5605/db_cookierun");
logger.info(dbInfo.toString());
}
@Test
public void postgresqlParseCookierunSlave() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql:loadbalance://10.118.222.35:5605/db_cookierun?useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&autoDeserialize=true&elideSetAutoCommits=true&sessionVariables=time_zone='%2B09:00',tx_isolation='READ-UNCOMMITTED'");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), "10.118.222.35:5605");
Assert.assertEquals(dbInfo.getDatabaseId(), "db_cookierun");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql:loadbalance://10.118.222.35:5605/db_cookierun");
logger.info(dbInfo.toString());
}
@Test
public void postgresqlParseCookierunSlave2() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:postgresql:loadbalance://10.118.222.35:5605,10.118.222.36:5605/db_cookierun?useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&autoDeserialize=true&elideSetAutoCommits=true&sessionVariables=time_zone='%2B09:00',tx_isolation='READ-UNCOMMITTED'");
Assert.assertTrue(dbInfo.isParsingComplete());
Assert.assertEquals(dbInfo.getType(), PostgreSqlConstants.POSTGRESQL);
Assert.assertEquals(dbInfo.getHost().get(0), "10.118.222.35:5605");
Assert.assertEquals(dbInfo.getHost().get(1), "10.118.222.36:5605");
Assert.assertEquals(dbInfo.getDatabaseId(), "db_cookierun");
Assert.assertEquals(dbInfo.getUrl(), "jdbc:postgresql:loadbalance://10.118.222.35:5605,10.118.222.36:5605/db_cookierun");
logger.info(dbInfo.toString());
}
@Test
public void parseFailTest1() {
DatabaseInfo dbInfo = jdbcUrlParser.parse(null);
Assert.assertFalse(dbInfo.isParsingComplete());
Assert.assertEquals(ServiceType.UNKNOWN_DB, dbInfo.getType());
}
@Test
public void parseFailTest2() {
DatabaseInfo dbInfo = jdbcUrlParser.parse("jdbc:mysql://10.115.8.209:5605/db_cookierun?useUnicode=true&characterEncoding=UTF-8&noAccessToProcedureBodies=true&autoDeserialize=true&elideSetAutoCommits=true&sessionVariables=time_zone='%2B09:00',tx_isolation='READ-COMMITTED'");
Assert.assertFalse(dbInfo.isParsingComplete());
Assert.assertEquals(ServiceType.UNKNOWN_DB, dbInfo.getType());
}
}