11#include <condition_variable>
95 std::condition_variable
cv_;
134 other.conn_ =
nullptr;
140 explicit operator bool()
const {
return conn_ !=
nullptr; }
159 auto conn = std::make_unique<mock_database>();
169 std::unique_lock<std::mutex> lock(
mutex_);
177 auto deadline = std::chrono::steady_clock::now() +
timeout;
184 if (
cv_.wait_until(lock, deadline) == std::cv_status::timeout) {
215 std::lock_guard<std::mutex> lock(
mutex_);
224 std::lock_guard<std::mutex> lock(
mutex_);
241 std::lock_guard<std::mutex> lock(
mutex_);
251 std::lock_guard<std::mutex> lock(
mutex_);
Mock connection pool for testing pool-related functionality.
std::condition_variable cv_
std::set< mock_database * > in_use_
std::atomic< bool > exhausted_
mock_database * acquire()
Acquire a connection from the pool.
std::queue< mock_database * > available_
void release(mock_database *conn)
Release a connection back to the pool.
void simulate_exhaustion()
Simulate pool exhaustion.
std::vector< std::unique_ptr< mock_database > > connections_
std::atomic< size_t > total_releases_
std::atomic< size_t > acquisition_timeouts_
mock_connection_pool(const config &cfg={})
void configure_all(std::function< void(mock_database &)> configurator)
Configure all connections with same expectation.
void reset()
Reset pool to normal operation.
std::atomic< size_t > total_acquisitions_
Configurable mock for database_backend interface.
RAII wrapper for pool connections.
mock_connection_pool & pool_
scoped_connection(mock_connection_pool &pool, std::chrono::milliseconds timeout)
scoped_connection(mock_connection_pool &pool)
mock_database * operator->()
scoped_connection & operator=(const scoped_connection &)=delete
scoped_connection(const scoped_connection &)=delete
scoped_connection(scoped_connection &&other) noexcept
mock_database & operator*()
std::chrono::milliseconds slow_acquire_delay
bool simulate_slow_acquire
std::chrono::milliseconds acquire_timeout
Get current pool statistics.
size_t acquisition_timeouts
size_t total_acquisitions
size_t leaked_connections
size_t in_use_connections
size_t available_connections