summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Geissler <geissonator@yahoo.com>2019-02-04 12:19:41 -0600
committerMatt Spinler <spinler@us.ibm.com>2019-04-05 15:05:32 +0000
commit82815dac90179222879cc9c46e39799bf75ee829 (patch)
tree561f7607b4f4b2157ca7d74c50ad5b4c6530ec19
parent3b025e69dedd6d877f38bcc367296714d404e4eb (diff)
downloadphosphor-objmgr-82815dac90179222879cc9c46e39799bf75ee829.tar.gz
phosphor-objmgr-82815dac90179222879cc9c46e39799bf75ee829.zip
unit-test: Test need_to_introspect function
Testing: Verified 100% code coverage of processing.cpp Change-Id: I5ebdebe3fdcecbf250a23754f8b5c7db81bfaaa3 Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
-rw-r--r--src/main.cpp31
-rw-r--r--src/processing.cpp16
-rw-r--r--src/processing.hpp22
-rw-r--r--src/test/Makefile.am.include6
-rw-r--r--src/test/need_to_introspect.cpp43
5 files changed, 94 insertions, 24 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 5870aea..dea80f8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -6,7 +6,6 @@
#include <atomic>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/container/flat_map.hpp>
-#include <boost/container/flat_set.hpp>
#include <chrono>
#include <iomanip>
#include <iostream>
@@ -65,8 +64,8 @@ using AssociationOwnersType = boost::container::flat_map<
AssociationOwnersType associationOwners;
-static boost::container::flat_set<std::string> service_whitelist;
-static boost::container::flat_set<std::string> service_blacklist;
+static WhiteBlackList service_whitelist;
+static WhiteBlackList service_blacklist;
/** Exception thrown when a path is not found in the object list. */
struct NotFoundException final : public sdbusplus::exception_t
@@ -540,21 +539,6 @@ void do_introspect(sdbusplus::asio::connection* system_bus,
"Introspect");
}
-bool need_to_introspect(const std::string& process_name)
-{
- auto inWhitelist =
- std::find_if(service_whitelist.begin(), service_whitelist.end(),
- [&process_name](const auto& prefix) {
- return boost::starts_with(process_name, prefix);
- }) != service_whitelist.end();
-
- // This holds full service names, not prefixes
- auto inBlacklist =
- service_blacklist.find(process_name) != service_blacklist.end();
-
- return inWhitelist && !inBlacklist;
-}
-
void start_new_introspect(
sdbusplus::asio::connection* system_bus, boost::asio::io_service& io,
interface_map_type& interface_map, const std::string& process_name,
@@ -564,7 +548,7 @@ void start_new_introspect(
#endif
sdbusplus::asio::object_server& objectServer)
{
- if (need_to_introspect(process_name))
+ if (needToIntrospect(process_name, service_whitelist, service_blacklist))
{
std::shared_ptr<InProgressIntrospect> transaction =
std::make_shared<InProgressIntrospect>(system_bus, io, process_name
@@ -626,7 +610,8 @@ void doListNames(
#endif
for (const std::string& process_name : process_names)
{
- if (need_to_introspect(process_name))
+ if (needToIntrospect(process_name, service_whitelist,
+ service_blacklist))
{
start_new_introspect(system_bus, io, interface_map,
process_name,
@@ -835,7 +820,8 @@ int main(int argc, char** argv)
std::chrono::steady_clock::now());
#endif
// New daemon added
- if (need_to_introspect(name))
+ if (needToIntrospect(name, service_whitelist,
+ service_blacklist))
{
name_owners[new_owner] = name;
start_new_introspect(system_bus.get(), io, interface_map,
@@ -867,7 +853,8 @@ int main(int argc, char** argv)
{
return; // only introspect well-known
}
- if (need_to_introspect(well_known))
+ if (needToIntrospect(well_known, service_whitelist,
+ service_blacklist))
{
auto& iface_list = interface_map[obj_path.str];
diff --git a/src/processing.cpp b/src/processing.cpp
index 923e147..be7bf12 100644
--- a/src/processing.cpp
+++ b/src/processing.cpp
@@ -21,3 +21,19 @@ bool getWellKnown(
wellKnown = it->second;
return true;
}
+
+bool needToIntrospect(const std::string& processName,
+ const WhiteBlackList& whiteList,
+ const WhiteBlackList& blackList)
+{
+ auto inWhitelist =
+ std::find_if(whiteList.begin(), whiteList.end(),
+ [&processName](const auto& prefix) {
+ return boost::starts_with(processName, prefix);
+ }) != whiteList.end();
+
+ // This holds full service names, not prefixes
+ auto inBlacklist = blackList.find(processName) != blackList.end();
+
+ return inWhitelist && !inBlacklist;
+}
diff --git a/src/processing.hpp b/src/processing.hpp
index 27ef4c6..00f8a6d 100644
--- a/src/processing.hpp
+++ b/src/processing.hpp
@@ -1,8 +1,12 @@
#pragma once
#include <boost/container/flat_map.hpp>
+#include <boost/container/flat_set.hpp>
#include <string>
+/** @brief Define white list and black list data structure */
+using WhiteBlackList = boost::container::flat_set<std::string>;
+
/** @brief Get well known name of input unique name
*
* If user passes in well known name then that will be returned.
@@ -15,4 +19,20 @@
*/
bool getWellKnown(
const boost::container::flat_map<std::string, std::string>& owners,
- const std::string& request, std::string& wellKnown);
+ const std::string& request, std::string& well_known);
+
+/** @brief Determine if dbus service is something to monitor
+ *
+ * mapper supports a whitelist and blacklist concept. If a whitelist is provided
+ * as input then only dbus objects matching that list is monitored. If a
+ * blacklist is provided then objects matching it will not be monitored.
+ *
+ * @param[in] processName - Dbus service name
+ * @param[in] whiteList - The white list
+ * @param[in] blackList - The black list
+ *
+ * @return True if input process_name should be monitored, false otherwise
+ */
+bool needToIntrospect(const std::string& processName,
+ const WhiteBlackList& whiteList,
+ const WhiteBlackList& blackList);
diff --git a/src/test/Makefile.am.include b/src/test/Makefile.am.include
index a698753..23ba45a 100644
--- a/src/test/Makefile.am.include
+++ b/src/test/Makefile.am.include
@@ -1,4 +1,8 @@
src_test_well_known_SOURCES = %reldir%/well_known.cpp src/processing.cpp
+src_test_need_to_introspect_SOURCES = %reldir%/need_to_introspect.cpp \
+ src/processing.cpp
+
check_PROGRAMS += \
- %reldir%/well_known
+ %reldir%/well_known \
+ %reldir%/need_to_introspect
diff --git a/src/test/need_to_introspect.cpp b/src/test/need_to_introspect.cpp
new file mode 100644
index 0000000..6912619
--- /dev/null
+++ b/src/test/need_to_introspect.cpp
@@ -0,0 +1,43 @@
+#include "src/processing.hpp"
+
+#include <gtest/gtest.h>
+
+// Verify if name is empty, false is returned
+TEST(NeedToIntrospect, PassEmptyName)
+{
+ WhiteBlackList whiteList;
+ WhiteBlackList blackList;
+ std::string process_name;
+
+ EXPECT_FALSE(needToIntrospect(process_name, whiteList, blackList));
+}
+
+// Verify if name is on whitelist, true is returned
+TEST(NeedToIntrospect, ValidWhiteListName)
+{
+ WhiteBlackList whiteList = {"xyz.openbmc_project"};
+ WhiteBlackList blackList;
+ std::string process_name = "xyz.openbmc_project.State.Host";
+
+ EXPECT_TRUE(needToIntrospect(process_name, whiteList, blackList));
+}
+
+// Verify if name is on blacklist, false is returned
+TEST(NeedToIntrospect, ValidBlackListName)
+{
+ WhiteBlackList whiteList;
+ WhiteBlackList blackList = {"xyz.openbmc_project.State.Host"};
+ std::string process_name = "xyz.openbmc_project.State.Host";
+
+ EXPECT_FALSE(needToIntrospect(process_name, whiteList, blackList));
+}
+
+// Verify if name is on whitelist and blacklist, false is returned
+TEST(NeedToIntrospect, ValidWhiteAndBlackListName)
+{
+ WhiteBlackList whiteList = {"xyz.openbmc_project"};
+ WhiteBlackList blackList = {"xyz.openbmc_project.State.Host"};
+ std::string process_name = "xyz.openbmc_project.State.Host";
+
+ EXPECT_FALSE(needToIntrospect(process_name, whiteList, blackList));
+}
OpenPOWER on IntegriCloud