#include #include #include "DummyConnection.hpp" using namespace matador::sql; TEST_CASE("Create connection pool", "[connection pool]") { using pool_t = connection_pool; pool_t pool("sqlite://sqlite.db", 4); REQUIRE(pool.size() == 4); REQUIRE(pool.idle() == 4); REQUIRE(pool.inuse() == 0); auto ptr = pool.acquire(); REQUIRE(ptr.valid()); REQUIRE(ptr.id().value() > 0); REQUIRE(ptr->is_open()); REQUIRE(pool.idle() == 3); REQUIRE(pool.inuse() == 1); pool.release(ptr); REQUIRE(!ptr.valid()); REQUIRE(pool.idle() == 4); REQUIRE(pool.inuse() == 0); ptr = pool.acquire(3); REQUIRE(ptr.valid()); REQUIRE(ptr.id() == 3); REQUIRE(ptr->is_open()); { auto ptr2 = pool.acquire(); REQUIRE(ptr2.valid()); REQUIRE(ptr2->is_open()); REQUIRE(pool.idle() == 2); REQUIRE(pool.inuse() == 2); } REQUIRE(pool.idle() == 3); REQUIRE(pool.inuse() == 1); pool.release(ptr); REQUIRE(!ptr.valid()); REQUIRE(pool.idle() == 4); REQUIRE(pool.inuse() == 0); } TEST_CASE("Acquire connection by id", "[connection pool]") { using pool_t = connection_pool; pool_t pool("sqlite://sqlite.db", 4); REQUIRE(pool.size() == 4); REQUIRE(pool.idle() == 4); REQUIRE(pool.inuse() == 0); auto ptr = pool.acquire(); REQUIRE(ptr.valid()); REQUIRE(ptr.id()); REQUIRE(ptr.id().value() > 0); REQUIRE(ptr->is_open()); auto same_ptr = pool.acquire(ptr.id().value()); REQUIRE(!same_ptr.valid()); const auto connection_id = ptr.id().value(); pool.release(ptr); REQUIRE(!ptr.valid()); same_ptr = pool.acquire(connection_id); REQUIRE(same_ptr.valid()); REQUIRE(same_ptr.id() == connection_id); }