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");
+}
