#include <cc/command_interpreter.h>
#include <dhcpsrv/lease_mgr_factory.h>
#include <dhcpsrv/parsers/dbaccess_parser.h>
+#include <dhcpsrv/host_mgr.h>
#include <log/logger_support.h>
#include <gtest/gtest.h>
/// @brief Constructor
///
/// @brief Keyword/value collection of ddatabase access parameters
- TestDbAccessParser(const std::string& param_name, const ParserContext& ctx)
- : DbAccessParser(param_name, ctx)
+ TestDbAccessParser(const std::string& param_name, DbAccessParser::DBType type,
+ const ParserContext& ctx)
+ : DbAccessParser(param_name, type, ctx)
{}
/// @brief Destructor
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid memfile", parser.getDbAccessParameters(), config);
}
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid memfile", parser.getDbAccessParameters(), config);
}
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid memfile", parser.getDbAccessParameters(),
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V6));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V6));
EXPECT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid memfile", parser.getDbAccessParameters(),
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V6));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V6));
ASSERT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid LFC Interval", parser.getDbAccessParameters(),
config, Option::V6);
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V6));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V6));
EXPECT_THROW(parser.build(json_elements), BadValue);
}
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V6));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V6));
EXPECT_THROW(parser.build(json_elements), BadValue);
}
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
checkAccessString("Valid mysql", parser.getDbAccessParameters(), config);
}
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_THROW(parser.build(json_elements), TypeKeywordMissing);
}
"name", "keatest",
NULL};
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
// First configuration string should cause a representation of that string
// to be held.
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
// Get the database access string
EXPECT_EQ(dbaccess, "name=keatest type=mysql universe=4");
}
-// Check that the "commit" function actually opens the database. We will
-// only do this for the "memfile" database, as that does not assume that the
-// test has been built with MySQL support.
-TEST_F(DbAccessParserTest, commit) {
+// Check that the "commit" function actually opens the database, when type
+// is set to LEASE_DB. We will only do this for the "memfile" database, as
+// that does not assume that the test has been built with MySQL support.
+TEST_F(DbAccessParserTest, commitLeaseDb) {
// Verify that no lease database is open
EXPECT_THROW({
ConstElementPtr json_elements = Element::fromJSON(json_config);
EXPECT_TRUE(json_elements);
- TestDbAccessParser parser("lease-database", ParserContext(Option::V4));
+ TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB,
+ ParserContext(Option::V4));
EXPECT_NO_THROW(parser.build(json_elements));
// Ensure that the access string is as expected.
EXPECT_EQ(std::string("memfile"), dbtype);
}
+// Check that the "commit" function actually opens the database, when type
+// is set to HOSTS_DB.
+TEST_F(DbAccessParserTest, commitHostsDb) {
+
+ // Verify that no lease database is open
+ EXPECT_THROW({
+ LeaseMgr& manager = LeaseMgrFactory::instance();
+ manager.getType(); // Never executed but satisfies compiler
+ }, isc::dhcp::NoLeaseManager);
+
+ // Set up the parser to open the memfile database.
+ const char* config[] = {"type", "memfile", "persist", "false", NULL};
+ string json_config = toJson(config);
+
+ ConstElementPtr json_elements = Element::fromJSON(json_config);
+ EXPECT_TRUE(json_elements);
+
+ TestDbAccessParser parser("hosts-database", DbAccessParser::HOSTS_DB,
+ ParserContext(Option::V4));
+ EXPECT_NO_THROW(parser.build(json_elements));
+
+ // Ensure that the access string is as expected.
+ EXPECT_EQ("persist=false type=memfile universe=4",
+ parser.getDbAccessString());
+
+ // Destroy lease mgr (if there's any)
+ LeaseMgrFactory::destroy();
+
+ // Committal of the parser changes should not create LeaseMgr.
+ // It should create HostDataSource instead.
+ EXPECT_NO_THROW(parser.commit());
+
+ // Check that LeaseMgr was NOT created (it shouldn't, this is for HOSTS_DB.
+ EXPECT_THROW(LeaseMgrFactory::instance(), NoLeaseManager);
+
+ HostDataSourcePtr hds = HostMgr::instance().getHostDataSource();
+
+ /// @todo: Uncomment this once 3682 is merged. The whole unit-test
+ /// should create MySQL database and be ifdefed appropriately.
+ // ASSERT_TRUE(hds);
+}
+
}; // Anonymous namespace