summaryrefslogtreecommitdiff
path: root/project2/sql/sql-modPQ.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2015-05-02 18:11:51 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2015-05-02 18:11:51 +0100
commit53075e2b911dc62619b3843985b6aab0ac32c436 (patch)
tree29f612c52f7169d6f312c1f5051d8a93f8e3e303 /project2/sql/sql-modPQ.cpp
parentAdd MySQL mocking and test cases (diff)
downloadproject2-53075e2b911dc62619b3843985b6aab0ac32c436.tar.bz2
project2-53075e2b911dc62619b3843985b6aab0ac32c436.tar.xz
project2-53075e2b911dc62619b3843985b6aab0ac32c436.zip
Centralize the mocking code
Diffstat (limited to 'project2/sql/sql-modPQ.cpp')
-rw-r--r--project2/sql/sql-modPQ.cpp40
1 files changed, 6 insertions, 34 deletions
diff --git a/project2/sql/sql-modPQ.cpp b/project2/sql/sql-modPQ.cpp
index 5267f28..ec2fcf3 100644
--- a/project2/sql/sql-modPQ.cpp
+++ b/project2/sql/sql-modPQ.cpp
@@ -9,56 +9,28 @@ typedef PQ::Connection PQConnection;
DECLARE_GENERIC_LOADER("postgresql", ConnectionLoader, PQConnection)
MockPqDatabase::MockPqDatabase(const std::string & masterdb, const std::string & name, const std::vector<boost::filesystem::path> & ss) :
- master(InstanceMap<ConnectionLoader, std::string>::Get<std::invalid_argument>("postgresql")->create(masterdb)),
- testDbName(stringbf("test_%d_%d", getpid(), ++MockConnectionLoader::mocked)),
- mockName(name)
+ MockServerDatabase(masterdb, name, "postgresql")
{
- Logger()->messagebf(LOG_DEBUG, "Setting up new mocked database %s", testDbName);
- DropDatabase();
CreateNewDatabase();
- try {
- for (auto s : ss) {
- Logger()->messagebf(LOG_DEBUG, "%s << %s", testDbName, s);
- if (system(("psql -v ON_ERROR_STOP=1 -q -1 -U postgres " + testDbName + " -f " + s.string()).c_str())) {
- throw std::runtime_error("Failed to execute " + s.string());
- }
- }
- Logger()->messagebf(LOG_DEBUG, "%s initialized", testDbName);
- MockConnectionLoader::mocks[name] = boost::bind(MockPqDatabase::openConnection, stringbf("user=postgres dbname=%s", testDbName));
- }
- catch (...) {
- DropDatabase();
- throw;
- }
+ PlaySchemaScripts(ss);
}
DB::Connection *
-MockPqDatabase::openConnection(const std::string & connStr)
+MockPqDatabase::openConnection() const
{
- return InstanceMap<ConnectionLoader, std::string>::Get<std::invalid_argument>("postgresql")->create(connStr);
+ return InstanceMap<ConnectionLoader, std::string>::Get<std::invalid_argument>("postgresql")->create(
+ stringbf("user=postgres dbname=%s", testDbName));
}
MockPqDatabase::~MockPqDatabase()
{
- Logger()->messagebf(LOG_DEBUG, "Tearing down mocked database %s", testDbName);
DropDatabase();
- delete master;
- MockConnectionLoader::mocks.erase(mockName);
- Logger()->messagebf(LOG_DEBUG, "%s torn down", testDbName);
}
void MockPqDatabase::DropDatabase() const
{
Logger()->messagebf(LOG_INFO, "Killing any active connections to database %s", testDbName);
master->execute("SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '" + testDbName + "'");
- Logger()->messagebf(LOG_INFO, "Dropping (if exists) old database %s", testDbName);
- master->execute("DROP DATABASE IF EXISTS " + testDbName);
+ MockServerDatabase::DropDatabase();
}
-void MockPqDatabase::CreateNewDatabase() const
-{
- Logger()->messagebf(LOG_INFO, "Creating new database %s", testDbName);
- master->execute("CREATE DATABASE " + testDbName);
-}
-
-