private static void _testConnection(
      String driverClassName, String url, String userName, String password) throws Exception {

    Class.forName(driverClassName);

    Connection connection = null;

    try {
      DataSource dataSource =
          DataSourceFactoryUtil.initDataSource(driverClassName, url, userName, password);

      connection = dataSource.getConnection();
    } finally {
      DataAccess.cleanUp(connection);
    }
  }
  @JVMArgsLine("-Dcatalina.base=. -D" + _HIKARICP_JAR_URL + "=${" + _HIKARICP_JAR_URL + "}")
  @NewEnv(type = NewEnv.Type.JVM)
  @Test
  public void testHikariCP() throws Exception {
    RegistryUtil.setRegistry(new BasicRegistryImpl());

    System.setProperty("portal:jdbc.default.liferay.pool.provider", "hikaricp");

    String hikaricpJarURL = System.getProperty(_HIKARICP_JAR_URL);

    if (hikaricpJarURL != null) {
      System.setProperty(
          "portal:" + PropsKeys.SETUP_LIFERAY_POOL_PROVIDER_JAR_URL + "[hikaricp]", hikaricpJarURL);
    }

    InitUtil.init();

    DataSource dataSource = null;

    try (CaptureAppender captureAppender =
        Log4JLoggerTestUtil.configureLog4JLogger(JarUtil.class.getName(), Level.INFO)) {

      dataSource = DataSourceFactoryUtil.initDataSource(_properties);

      List<LoggingEvent> loggingEvents = captureAppender.getLoggingEvents();

      Assert.assertEquals(4, loggingEvents.size());

      LoggingEvent loggingEvent = loggingEvents.get(0);

      String message = (String) loggingEvent.getMessage();

      Assert.assertTrue(message.startsWith("Downloading "));

      loggingEvent = loggingEvents.get(1);

      message = (String) loggingEvent.getMessage();

      Assert.assertTrue(message.startsWith("Downloaded "));

      loggingEvent = loggingEvents.get(2);

      message = (String) loggingEvent.getMessage();

      Assert.assertTrue(message.startsWith("Installing "));

      loggingEvent = loggingEvents.get(3);

      message = (String) loggingEvent.getMessage();

      Assert.assertTrue(message.startsWith("Installed "));
    }

    Class<?> dataSourceClass = dataSource.getClass();

    Assert.assertEquals("com.zaxxer.hikari.HikariDataSource", dataSourceClass.getName());

    for (int i = 0; i < _CHECKOUT_COUNT; i++) {
      Connection connection = dataSource.getConnection();

      PreparedStatement preparedStatement =
          connection.prepareStatement("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS");

      preparedStatement.execute();
    }

    MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();

    ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=Pool (TestJDBCPool)");

    int activeConnections = (int) mBeanServer.getAttribute(poolName, "ActiveConnections");

    Assert.assertEquals(_CHECKOUT_COUNT, activeConnections);

    int idleConnections = (int) mBeanServer.getAttribute(poolName, "IdleConnections");

    int totalConnections = (int) mBeanServer.getAttribute(poolName, "TotalConnections");

    Assert.assertEquals(totalConnections, activeConnections + idleConnections);
  }