62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#include "DbTest.h"
|
|
#include "PgTestEnvironment.h"
|
|
|
|
#include <atomic>
|
|
#include <stdexcept>
|
|
|
|
namespace pgtest {
|
|
|
|
namespace {
|
|
std::atomic<int> g_counter{0};
|
|
}
|
|
|
|
QString DbTest::dbUrl() const
|
|
{
|
|
return urlForDb(dbName_);
|
|
}
|
|
|
|
std::unique_ptr<Pgsql::Connection> DbTest::plainConn() const
|
|
{
|
|
auto c = std::make_unique<Pgsql::Connection>();
|
|
c->connect(urlForDbAsPlainRole(dbName_));
|
|
return c;
|
|
}
|
|
|
|
void DbTest::SetUp()
|
|
{
|
|
if (!available())
|
|
GTEST_SKIP() << "TEST_DATABASE_URL not set or template database unavailable";
|
|
|
|
dbName_ = QString("t_%1_%2").arg(g_counter++).arg(processId());
|
|
try {
|
|
{
|
|
Pgsql::Connection admin;
|
|
admin.connect(*baseUrl());
|
|
admin.query(QString("CREATE DATABASE %1 TEMPLATE %2")
|
|
.arg(quoteIdent(dbName_), quoteIdent(templateDbName())));
|
|
}
|
|
conn_ = std::make_unique<Pgsql::Connection>();
|
|
conn_->connect(dbUrl());
|
|
}
|
|
catch (const std::exception &e) {
|
|
FAIL() << "Creating test database failed: " << e.what();
|
|
}
|
|
}
|
|
|
|
void DbTest::TearDown()
|
|
{
|
|
conn_.reset();
|
|
if (dbName_.isEmpty())
|
|
return;
|
|
try {
|
|
Pgsql::Connection admin;
|
|
admin.connect(*baseUrl());
|
|
admin.query(QString("DROP DATABASE IF EXISTS %1 WITH (FORCE)").arg(quoteIdent(dbName_)));
|
|
}
|
|
catch (const std::exception &e) {
|
|
ADD_FAILURE() << "Dropping test database failed: " << e.what();
|
|
}
|
|
dbName_.clear();
|
|
}
|
|
|
|
} // namespace pgtest
|