Remove empty service name

Before refreshing the service names and states for a group, the empty
service name should be removed if it exists. An empty service name may
exist where upon startup, a particular service was not found for a
member or members of a group.

Change-Id: I15d224231bb9db0823866393ec1776f793a3c126
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 5fe9b01..784004e 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -120,6 +120,32 @@
     }
 }
 
+void Zone::removeService(const Group* group,
+                         const std::string& name)
+{
+    try
+    {
+        auto& sNames = _services.at(*group);
+        auto it = std::find_if(
+            sNames.begin(),
+            sNames.end(),
+            [&name](auto const& entry)
+            {
+                return name == std::get<namePos>(entry);
+            }
+        );
+        if (it != std::end(sNames))
+        {
+            // Remove service name from group
+            sNames.erase(it);
+        }
+    }
+    catch (const std::out_of_range& oore)
+    {
+        // No services for group found
+    }
+}
+
 void Zone::setServiceOwner(const Group* group,
                            const std::string& name,
                            const bool hasOwner)
@@ -152,7 +178,8 @@
 
 void Zone::setServices(const Group* group)
 {
-    // TODO Remove empty service name if exists
+    // Remove the empty service name if exists
+    removeService(group, "");
     for (auto it = group->begin(); it != group->end(); ++it)
     {
         std::string name;
diff --git a/control/zone.hpp b/control/zone.hpp
index 9565933..dbf4378 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -140,6 +140,15 @@
         };
 
         /**
+         * @brief Remove a service associated to a group
+         *
+         * @param[in] group - Group associated with service
+         * @param[in] name - Service name to remove
+         */
+        void removeService(const Group* group,
+                           const std::string& name);
+
+        /**
          * @brief Set or update a service name owner in use
          *
          * @param[in] group - Group associated with service