unit-test: Introduce unit tests to phosphor-objmgr
Move a function to make more testable and add a test case for it
Testing: Verified 100% test coverage in processing.cpp
Change-Id: I0a888009cfeb57bbc8ad295681bea00b79f2a23d
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/src/main.cpp b/src/main.cpp
index 7df7aa3..5870aea 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,3 +1,4 @@
+#include "processing.hpp"
#include "src/argument.hpp"
#include <tinyxml2.h>
@@ -85,26 +86,6 @@
};
};
-bool get_well_known(
- boost::container::flat_map<std::string, std::string>& owners,
- const std::string& request, std::string& well_known)
-{
- // If it's already a well known name, just return
- if (!boost::starts_with(request, ":"))
- {
- well_known = request;
- return true;
- }
-
- auto it = owners.find(request);
- if (it == owners.end())
- {
- return false;
- }
- well_known = it->second;
- return true;
-}
-
void update_owners(sdbusplus::asio::connection* conn,
boost::container::flat_map<std::string, std::string>& owners,
const std::string& new_object)
@@ -882,7 +863,7 @@
interfaces_added;
message.read(obj_path, interfaces_added);
std::string well_known;
- if (!get_well_known(name_owners, message.get_sender(), well_known))
+ if (!getWellKnown(name_owners, message.get_sender(), well_known))
{
return; // only introspect well-known
}
@@ -986,7 +967,7 @@
}
std::string sender;
- if (!get_well_known(name_owners, message.get_sender(), sender))
+ if (!getWellKnown(name_owners, message.get_sender(), sender))
{
return;
}
@@ -1043,8 +1024,8 @@
std::vector<Association>>(findAssociations->second);
std::string well_known;
- if (!get_well_known(name_owners, message.get_sender(),
- well_known))
+ if (!getWellKnown(name_owners, message.get_sender(),
+ well_known))
{
return;
}
diff --git a/src/processing.cpp b/src/processing.cpp
new file mode 100644
index 0000000..923e147
--- /dev/null
+++ b/src/processing.cpp
@@ -0,0 +1,23 @@
+#include "processing.hpp"
+
+#include <boost/algorithm/string/predicate.hpp>
+
+bool getWellKnown(
+ const boost::container::flat_map<std::string, std::string>& owners,
+ const std::string& request, std::string& wellKnown)
+{
+ // If it's already a well known name, just return
+ if (!boost::starts_with(request, ":"))
+ {
+ wellKnown = request;
+ return true;
+ }
+
+ auto it = owners.find(request);
+ if (it == owners.end())
+ {
+ return false;
+ }
+ wellKnown = it->second;
+ return true;
+}
diff --git a/src/processing.hpp b/src/processing.hpp
new file mode 100644
index 0000000..27ef4c6
--- /dev/null
+++ b/src/processing.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <boost/container/flat_map.hpp>
+#include <string>
+
+/** @brief Get well known name of input unique name
+ *
+ * If user passes in well known name then that will be returned.
+ *
+ * @param[in] owners - Current list of owners
+ * @param[in] request - The name to look up
+ * @param[out] wellKnown - The well known name if found
+ *
+ * @return True if well known name is found, false otherwise
+ */
+bool getWellKnown(
+ const boost::container::flat_map<std::string, std::string>& owners,
+ const std::string& request, std::string& wellKnown);
diff --git a/src/test/Makefile.am.include b/src/test/Makefile.am.include
new file mode 100644
index 0000000..a698753
--- /dev/null
+++ b/src/test/Makefile.am.include
@@ -0,0 +1,4 @@
+src_test_well_known_SOURCES = %reldir%/well_known.cpp src/processing.cpp
+
+check_PROGRAMS += \
+ %reldir%/well_known
diff --git a/src/test/well_known.cpp b/src/test/well_known.cpp
new file mode 100644
index 0000000..c9f119c
--- /dev/null
+++ b/src/test/well_known.cpp
@@ -0,0 +1,37 @@
+#include "src/processing.hpp"
+
+#include <gtest/gtest.h>
+
+// Verify if name does not start with a : that it is returned
+TEST(WellKnownName, NameNotStartColon)
+{
+ boost::container::flat_map<std::string, std::string> owners;
+ const std::string request = "test";
+ std::string well_known;
+
+ EXPECT_TRUE(getWellKnown(owners, request, well_known));
+ EXPECT_EQ(well_known, request);
+}
+
+// Verify if name is not found, false is returned
+TEST(WellKnownName, NameNotFound)
+{
+ boost::container::flat_map<std::string, std::string> owners;
+ const std::string request = ":test";
+ std::string well_known;
+
+ EXPECT_FALSE(getWellKnown(owners, request, well_known));
+ EXPECT_TRUE(well_known.empty());
+}
+
+// Verify if name is found, true is returned and name is correct
+TEST(WellKnownName, NameFound)
+{
+ boost::container::flat_map<std::string, std::string> owners;
+ const std::string request = ":1.25";
+ std::string well_known;
+
+ owners[request] = "test";
+ EXPECT_TRUE(getWellKnown(owners, request, well_known));
+ EXPECT_EQ(well_known, "test");
+}