/*
* Copyright 2016 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.mariadb;
import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier;
import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifierHolder;
import com.navercorp.pinpoint.test.plugin.Dependency;
import com.navercorp.pinpoint.test.plugin.JvmVersion;
import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.lang.reflect.Method;
import java.util.Properties;
import static com.navercorp.pinpoint.bootstrap.plugin.test.Expectations.*;
/**
* @author HyunGil Jeong
*/
@RunWith(PinpointPluginTestSuite.class)
@JvmVersion(7)
@Dependency({ "org.mariadb.jdbc:mariadb-java-client:[1.4.min,1.6.min)", "ch.vorburger.mariaDB4j:mariaDB4j:2.2.2" })
public class MariaDB_1_4_x_to_1_6_0_IT extends MariaDB_IT_Base {
// see CallableParameterMetaData#queryMetaInfos
private static final String CALLABLE_QUERY_META_INFOS_QUERY = "select param_list, returns, db, type from mysql.proc where db=DATABASE() and name=?";
@Test
public void testStatement() throws Exception {
super.executeStatement();
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
verifier.printCache();
// Driver#connect(String, Properties)
Class<?> driverClass = Class.forName("org.mariadb.jdbc.Driver");
Method connect = driverClass.getDeclaredMethod("connect", String.class, Properties.class);
verifier.verifyTrace(event("MARIADB", connect, null, URL, DATABASE_NAME, cachedArgs(JDBC_URL)));
// MariaDbStatement#executeQuery(String)
Class<?> mariaDbStatementClass = Class.forName("org.mariadb.jdbc.MariaDbStatement");
Method executeQuery = mariaDbStatementClass.getDeclaredMethod("executeQuery", String.class);
verifier.verifyTrace(event("MARIADB_EXECUTE_QUERY", executeQuery, null, URL, DATABASE_NAME, sql(STATEMENT_NORMALIZED_QUERY, "1")));
}
@Test
public void testPreparedStatement() throws Exception {
super.executePreparedStatement();
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
verifier.printCache();
verifier.verifyTraceCount(3);
// Driver#connect(String, Properties)
Class<?> driverClass = Class.forName("org.mariadb.jdbc.Driver");
Method connect = driverClass.getDeclaredMethod("connect", String.class, Properties.class);
verifier.verifyTrace(event("MARIADB", connect, null, URL, DATABASE_NAME, cachedArgs(JDBC_URL)));
// MariaDbConnection#prepareStatement(String)
Class<?> mariaDbConnectionClass = Class.forName("org.mariadb.jdbc.MariaDbConnection");
Method prepareStatement = mariaDbConnectionClass.getDeclaredMethod("prepareStatement", String.class);
verifier.verifyTrace(event("MARIADB", prepareStatement, null, URL, DATABASE_NAME, sql(PREPARED_STATEMENT_QUERY, null)));
// MariaDbServerPreparedStatement#executeQuery
Class<?> mariaDbServerPreparedStatementClass = Class.forName("org.mariadb.jdbc.MariaDbServerPreparedStatement");
Method executeQuery = mariaDbServerPreparedStatementClass.getDeclaredMethod("executeQuery");
verifier.verifyTrace(event("MARIADB_EXECUTE_QUERY", executeQuery, null, URL, DATABASE_NAME, sql(PREPARED_STATEMENT_QUERY, null, "3")));
}
@Test
public void testCallableStatement() throws Exception {
super.executeCallableStatement();
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
verifier.printCache();
verifier.verifyTraceCount(6);
// Driver#connect(String, Properties)
Class<?> driverClass = Class.forName("org.mariadb.jdbc.Driver");
Method connect = driverClass.getDeclaredMethod("connect", String.class, Properties.class);
verifier.verifyTrace(event("MARIADB", connect, null, URL, DATABASE_NAME, cachedArgs(JDBC_URL)));
// MariaDbConnection#prepareCall(String)
Class<?> mariaDbConnectionClass = Class.forName("org.mariadb.jdbc.MariaDbConnection");
Method prepareCall = mariaDbConnectionClass.getDeclaredMethod("prepareCall", String.class);
verifier.verifyTrace(event("MARIADB", prepareCall, null, URL, DATABASE_NAME, sql(CALLABLE_STATEMENT_QUERY, null)));
// AbstractCallableProcedureStatement#registerOutParameter
Class<?> abstractCallableProcedureStatementClass = Class.forName("org.mariadb.jdbc.AbstractCallableProcedureStatement");
Method registerOutParameter = abstractCallableProcedureStatementClass.getMethod("registerOutParameter", int.class, int.class);
verifier.verifyTrace(event("MARIADB", registerOutParameter, null, URL, DATABASE_NAME, args(2, CALLABLE_STATMENT_OUTPUT_PARAM_TYPE)));
// MariaDbServerPreparedStatement#executeQuery
Class<?> mariaDbServerPreparedStatementClass = Class.forName("org.mariadb.jdbc.MariaDbServerPreparedStatement");
Method executeQuery = mariaDbServerPreparedStatementClass.getDeclaredMethod("executeQuery");
verifier.verifyTrace(event("MARIADB_EXECUTE_QUERY", executeQuery, null, URL, DATABASE_NAME, sql(CALLABLE_STATEMENT_QUERY, null, CALLABLE_STATEMENT_INPUT_PARAM)));
// MariaDbConnection#prepareStatement(String)
Method prepareStatement = mariaDbConnectionClass.getDeclaredMethod("prepareStatement", String.class);
verifier.verifyTrace(event("MARIADB", prepareStatement, null, URL, DATABASE_NAME, sql(CALLABLE_QUERY_META_INFOS_QUERY, null)));
// MariaDbServerPreparedStatement#executeQuery
verifier.verifyTrace(event("MARIADB_EXECUTE_QUERY", executeQuery, null, URL, DATABASE_NAME, sql(CALLABLE_QUERY_META_INFOS_QUERY, null, PROCEDURE_NAME)));
}
}