Commit 08daa03b authored by Stephen Morris's avatar Stephen Morris

[2342] Add check that database name cannot be NULL

parent 39c82ec5
......@@ -61,6 +61,13 @@
namespace isc {
namespace dhcp {
/// @brief Exception thrown if name of database is not specified
class NoDatabaseName : public Exception {
public:
NoDatabaseName(const char* file, size_t line, const char* what) :
isc::Exception(file, line, what) {}
};
/// @brief Exception thrown on failure to open database
class DbOpenError : public Exception {
public:
......
......@@ -471,8 +471,8 @@ MySqlLeaseMgr::openDatabase() {
sname = getParameter("name");
name = sname.c_str();
} catch (...) {
// No database name. Fine, we'll use NULL
;
// No database name. Throw a "NoName" exception
isc_throw(NoDatabaseName, "must specified a name for the database");
}
// Open the database. Use defaults for non-specified options.
......
......@@ -45,6 +45,7 @@ public:
/// @param parameters A data structure relating keywords and values
/// concerned with the database.
///
/// @exception NoDatabaseName Mandatory database name not given
/// @exception DbOpenError Error opening the database
/// @exception DbOperationError An operation on the open database has
/// failed.
......@@ -362,6 +363,7 @@ private:
/// Opens the database using the information supplied in the parameters
/// passed to the constructor.
///
/// @exception NoDatabaseName Mandatory database name not given
/// @exception DbOpenError Error opening the database
void openDatabase();
......
......@@ -46,8 +46,41 @@ const char* INVALID_PASSWORD = "password=invalid";
string connectionString(const char* type, const char* name, const char* host,
const char* user, const char* password) {
const string space = " ";
return (string(type) + space + string(name) + space + string(host) + space +
string(user) + space + string(password));
string result = "";
if (type != NULL) {
result += string(type);
}
if (name != NULL) {
if (! result.empty()) {
result += space;
}
result += string(name);
}
if (host != NULL) {
if (! result.empty()) {
result += space;
}
result += string(host);
}
if (user != NULL) {
if (! result.empty()) {
result += space;
}
result += string(user);
}
if (password != NULL) {
if (! result.empty()) {
result += space;
}
result += string(password);
}
return (result);
}
// Return valid connection string
......@@ -101,6 +134,9 @@ TEST(MySqlOpenTest, OpenDatabase) {
// Check that wrong specification of backend throws an exception.
// (This is really a check on LeaseMgrFactory, but is convenient to
// perform here.)
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
NULL, VALID_NAME, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
InvalidParameter);
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
INVALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD)),
InvalidType);
......@@ -119,6 +155,11 @@ TEST(MySqlOpenTest, OpenDatabase) {
VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_PASSWORD)),
DbOpenError);
// Check for missing parameters
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
VALID_TYPE, NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
NoDatabaseName);
// Check that database opens correctly.
ASSERT_NO_THROW(LeaseMgrFactory::create(validConnectionString()));
EXPECT_NO_THROW((void) LeaseMgrFactory::instance());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment