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); -} - -  | 
