unit-test: Move checkAssociationEndpointRemoves
Make it easier to unit test and continue reduction of main.cpp
Change-Id: Id4f4c4fc1e3928f1b600555c6dbe05f651fffce5
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/src/main.cpp b/src/main.cpp
index 44fe063..781e690 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -130,71 +130,6 @@
#endif
};
-// Based on the latest values of the org.openbmc.Associations.associations
-// property, passed in via the newAssociations param, check if any of the
-// paths in the xyz.openbmc_project.Association.endpoints D-Bus property
-// for that association need to be removed. If the last path is removed
-// from the endpoints property, remove that whole association object from
-// D-Bus.
-void checkAssociationEndpointRemoves(
- const std::string& sourcePath, const std::string& owner,
- const AssociationPaths& newAssociations,
- sdbusplus::asio::object_server& objectServer)
-{
- // Find the services that have associations on this path.
- auto originalOwners = associationOwners.find(sourcePath);
- if (originalOwners == associationOwners.end())
- {
- return;
- }
-
- // Find the associations for this service
- auto originalAssociations = originalOwners->second.find(owner);
- if (originalAssociations == originalOwners->second.end())
- {
- return;
- }
-
- // Compare the new endpoints versus the original endpoints, and
- // remove any of the original ones that aren't in the new list.
- for (const auto& [originalAssocPath, originalEndpoints] :
- originalAssociations->second)
- {
- // Check if this source even still has each association that
- // was there previously, and if not, remove all of its endpoints
- // from the D-Bus endpoints property which will cause the whole
- // association path to be removed if no endpoints remain.
- auto newEndpoints = newAssociations.find(originalAssocPath);
- if (newEndpoints == newAssociations.end())
- {
- removeAssociationEndpoints(objectServer, originalAssocPath,
- originalEndpoints,
- associationInterfaces);
- }
- else
- {
- // The association is still there. Check if the endpoints
- // changed.
- boost::container::flat_set<std::string> toRemove;
-
- for (auto& originalEndpoint : originalEndpoints)
- {
- if (std::find(newEndpoints->second.begin(),
- newEndpoints->second.end(),
- originalEndpoint) == newEndpoints->second.end())
- {
- toRemove.emplace(originalEndpoint);
- }
- }
- if (!toRemove.empty())
- {
- removeAssociationEndpoints(objectServer, originalAssocPath,
- toRemove, associationInterfaces);
- }
- }
- }
-}
-
// Called when either a new org.openbmc.Associations interface was
// created, or the associations property on that interface changed.
void associationChanged(sdbusplus::asio::object_server& objectServer,
@@ -260,7 +195,8 @@
}
// Check for endpoints being removed instead of added
- checkAssociationEndpointRemoves(path, owner, objects, objectServer);
+ checkAssociationEndpointRemoves(path, owner, objects, objectServer,
+ associationOwners, associationInterfaces);
// Update associationOwners with the latest info
auto a = associationOwners.find(path);