From: Francis Dupont Date: Tue, 1 May 2018 21:20:44 +0000 (+0200) Subject: [5605a] Added registeredFactory X-Git-Tag: trac5536_base~4^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4e9b8b6fa5b16e76ccf3f53dbe8af93a4d815bc;p=thirdparty%2Fkea.git [5605a] Added registeredFactory --- diff --git a/src/lib/dhcpsrv/host_data_source_factory.cc b/src/lib/dhcpsrv/host_data_source_factory.cc index ec5cac31fd..76b8cd595e 100644 --- a/src/lib/dhcpsrv/host_data_source_factory.cc +++ b/src/lib/dhcpsrv/host_data_source_factory.cc @@ -126,6 +126,12 @@ HostDataSourceFactory::deregisterFactory(const string& db_type, bool no_log) { } } +bool +HostDataSourceFactory::registeredFactory(const std::string& db_type) { + auto index = map_.find(db_type); + return (index != map_.end()); +} + void HostDataSourceFactory::printRegistered() { std::stringstream txt; diff --git a/src/lib/dhcpsrv/host_data_source_factory.h b/src/lib/dhcpsrv/host_data_source_factory.h index b28f291d0b..20f5fe7a57 100644 --- a/src/lib/dhcpsrv/host_data_source_factory.h +++ b/src/lib/dhcpsrv/host_data_source_factory.h @@ -107,6 +107,12 @@ public: static bool deregisterFactory(const std::string& db_type, bool no_log = false); + /// @brief Check if a host data source factory was registered + /// + /// @param db_type database type + /// @return true if a factory was registered for db_type, false if not. + static bool registeredFactory(const std::string& db_type); + /// @brief Prints out all registered backends. /// /// We need a dedicated method for this, because we sometimes can't log diff --git a/src/lib/dhcpsrv/tests/host_data_source_factory_unittest.cc b/src/lib/dhcpsrv/tests/host_data_source_factory_unittest.cc index 3d8f7a2711..596b908a8e 100644 --- a/src/lib/dhcpsrv/tests/host_data_source_factory_unittest.cc +++ b/src/lib/dhcpsrv/tests/host_data_source_factory_unittest.cc @@ -96,6 +96,20 @@ TEST_F(HostDataSourceFactoryTest, registerFactory) { EXPECT_FALSE(registerFactory()); } +// Verify a factory registration can be checked. +TEST_F(HostDataSourceFactoryTest, registeredFactory) { + // Not yet registered + EXPECT_FALSE(HostDataSourceFactory::registeredFactory("mem")); + EXPECT_FALSE(HostDataSourceFactory::registeredFactory("mem1")); + + // Register mem + EXPECT_TRUE(registerFactory()); + + // Now mem is registered but not mem1 + EXPECT_TRUE(HostDataSourceFactory::registeredFactory("mem")); + EXPECT_FALSE(HostDataSourceFactory::registeredFactory("mem1")); +} + // Verify a factory can be registered and deregistered TEST_F(HostDataSourceFactoryTest, deregisterFactory) { // Does not exist at the beginning @@ -104,6 +118,7 @@ TEST_F(HostDataSourceFactoryTest, deregisterFactory) { // Register and deregister EXPECT_TRUE(registerFactory()); EXPECT_TRUE(HostDataSourceFactory::deregisterFactory("mem")); + EXPECT_FALSE(HostDataSourceFactory::registeredFactory("mem")); // No longer exists EXPECT_FALSE(HostDataSourceFactory::deregisterFactory("mem"));