Back to Repositories

Testing Connection Request Boundaries in HikariCP

This test suite validates the request boundary functionality in HikariCP connection pooling. It ensures proper handling of connection lifecycle events when request boundaries are enabled or disabled, which is crucial for connection pool management and resource optimization.

Test Coverage Overview

The test suite provides comprehensive coverage of HikariCP’s request boundary functionality.

Key areas tested include:
  • Connection request boundary initialization
  • Request boundary state management
  • Connection lifecycle event handling
  • Boundary flag behavior verification
Edge cases covered include enabled and disabled boundary states, ensuring complete verification of the feature’s implementation.

Implementation Analysis

The testing approach utilizes JUnit framework with mock objects to isolate connection pool behavior. The implementation leverages stub connections and custom configuration to verify boundary state transitions.

Technical patterns include:
  • Mock data source implementation
  • Connection wrapper verification
  • State tracking through boolean flags
  • System property configuration

Technical Details

Testing infrastructure includes:
  • JUnit 4 testing framework
  • HikariConfig for pool configuration
  • StubConnection and StubDataSource for mocking
  • TestElf utility methods
Configuration highlights:
  • Minimum idle connections: 0
  • Maximum pool size: 10
  • Custom initialization timeout
  • Test query validation

Best Practices Demonstrated

The test suite exemplifies high-quality testing practices through clear separation of concerns and thorough state verification.

Notable practices include:
  • Isolated test scenarios
  • Explicit state verification
  • Clean test setup and teardown
  • Comprehensive assertion coverage
  • Clear test method naming

brettwooldridge/hikaricp

src/test/java/com/zaxxer/hikari/pool/RequestBoundariesTest.java

            
package com.zaxxer.hikari.pool;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.mocks.StubConnection;
import org.junit.Assert;
import org.junit.Test;

import java.sql.Connection;

import static com.zaxxer.hikari.pool.TestElf.getPool;
import static com.zaxxer.hikari.pool.TestElf.newHikariConfig;

public class RequestBoundariesTest {

   private static final HikariConfig config;
   static {
      config = newHikariConfig();
      config.setMinimumIdle(0);
      config.setMaximumPoolSize(10);
      config.setInitializationFailTimeout(Long.MAX_VALUE);
      config.setConnectionTestQuery("VALUES 1");
      config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
   }

   private HikariPool getHikariPool(boolean enableRequestBoundaries) {
      System.setProperty("com.zaxxer.hikari.enableRequestBoundaries", String.valueOf(enableRequestBoundaries));
      HikariDataSource ds = new HikariDataSource(config);
      HikariPool pool = getPool(ds);
      return pool;
   }

   @Test
   public void requestBoundaryEnabledTest() throws Exception {
      HikariPool pool = getHikariPool(true);
      Connection conn = pool.getConnection();
      StubConnection stubConnection = conn.unwrap(StubConnection.class);
      Assert.assertTrue("Begin request called", stubConnection.beginRequestCalled);
      Assert.assertFalse("End request called", stubConnection.endRequestCalled);
      conn.close();
      Assert.assertTrue("Begin request called", stubConnection.beginRequestCalled);
      Assert.assertTrue("End request called", stubConnection.endRequestCalled);
   }

   @Test
   public void requestBoundaryDisabledTest() throws Exception {
      HikariPool pool = getHikariPool(false);
      Connection conn = pool.getConnection();
      StubConnection stubConnection = conn.unwrap(StubConnection.class);
      Assert.assertFalse("Begin request called", stubConnection.beginRequestCalled);
      Assert.assertFalse("End request called", stubConnection.endRequestCalled);
      conn.close();
      Assert.assertFalse("Begin request called", stubConnection.beginRequestCalled);
      Assert.assertFalse("End request called", stubConnection.endRequestCalled);
   }
}