void testStoredProcedure_with_INOUT_parameters(JDBCApi jdbcApi) throws Exception {
        final int param1 = 1;
        final int param2 = 2;
        final String storedProcedureQuery = "{ call swapAndGetSum(?, ?) }";

        final Driver driverClass = jdbcApi.getJDBCDriverClass().newDriver();
        try (Connection conn = connect(driverClass)) {
            try (CallableStatement cs = conn.prepareCall(storedProcedureQuery)) {
                cs.setInt(1, param1);
                cs.setInt(2, param2);
                cs.registerOutParameter(1, Types.INTEGER);
                cs.registerOutParameter(2, Types.INTEGER);
                try (ResultSet rs = cs.executeQuery()) {
                    Assertions.assertTrue(rs.next());
                    Assertions.assertEquals(param1 + param2, rs.getInt(1));
                }
                Assertions.assertEquals(param2, cs.getInt(1));
                Assertions.assertEquals(param1, cs.getInt(2));
            }
        }

        PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();

        verifier.printCache();
        verifier.verifyTraceCount(5);

        // NonRegisteringDriver#connect(String, Properties)
        Method connect = jdbcApi.getDriver().getConnect();
        verifier.verifyTrace(event(MYSQL, connect, null, databaseAddress, databaseName, cachedArgs(jdbcUrl)));

        // NonRegisteringDriver#connect(String, Properties)
        final JDBCApi.ConnectionClass connectionClass = jdbcApi.getConnection();
        Method prepareCall = connectionClass.getPrepareCall();
        verifier.verifyTrace(event(MYSQL, prepareCall, null, databaseAddress, databaseName, sql(storedProcedureQuery, null)));

        // CallableStatement#registerOutParameter(int, int)
        final JDBCApi.CallableStatementClass callableStatementClass = jdbcApi.getCallableStatement();
        Method registerOutParameter = callableStatementClass.getRegisterOutParameter();
        // param 1
        verifier.verifyTrace(event(MYSQL, registerOutParameter, null, databaseAddress, databaseName, args(1, Types.INTEGER)));
        // param 2
        verifier.verifyTrace(event(MYSQL, registerOutParameter, null, databaseAddress, databaseName, args(2, Types.INTEGER)));

        // CallableStatement#execute
        Method execute = callableStatementClass.getExecuteQuery();
        verifier.verifyTrace(event(MYSQL_EXECUTE_QUERY, execute, null, databaseAddress, databaseName, Expectations.sql(storedProcedureQuery, null, param1 + ", " + param2)));
    }
@author Jongho Moon
@author HyunGil Jeong
agent-module/plugins-it/mysql-jdbc-driver-plugin-it/src/test/java/com/navercorp/pinpoint/it/plugin/jdbc/mysql/MySqlItHelper.java