diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-05-02 18:11:51 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2015-05-02 18:11:51 +0100 |
commit | 53075e2b911dc62619b3843985b6aab0ac32c436 (patch) | |
tree | 29f612c52f7169d6f312c1f5051d8a93f8e3e303 /project2/sql/sql-modPQ.cpp | |
parent | Add MySQL mocking and test cases (diff) | |
download | project2-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.cpp | 40 |
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); -} - - |