diff options
author | Andrew Geissler <geissonator@yahoo.com> | 2019-02-22 15:23:33 -0600 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2019-04-05 15:05:32 +0000 |
commit | 491f9ac3d2579779a0cec3d4d52e19f1ce908bad (patch) | |
tree | ae92ed69d59dc0d0ac1532c3f1d3b86196c35769 | |
parent | 7264d90dca3b7796b305e282aaad7ab19ce933ec (diff) | |
download | phosphor-objmgr-491f9ac3d2579779a0cec3d4d52e19f1ce908bad.tar.gz phosphor-objmgr-491f9ac3d2579779a0cec3d4d52e19f1ce908bad.zip |
unit-test: Test associationChanged()
Testing: 100% coverage of associations.cpp
Change-Id: I978eb37acfbee0a5b6d497cab473691318184aaf
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
-rw-r--r-- | src/test/associations.cpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/test/associations.cpp b/src/test/associations.cpp index 8b2fadf..20d7ba7 100644 --- a/src/test/associations.cpp +++ b/src/test/associations.cpp @@ -2,6 +2,7 @@ #include "src/test/util/asio_server_class.hpp" #include "src/test/util/association_objects.hpp" +#include "src/test/util/debug_output.hpp" #include <sdbusplus/asio/connection.hpp> #include <sdbusplus/asio/object_server.hpp> @@ -162,3 +163,141 @@ TEST_F(TestAssociations, checkAssociationEndpointRemovesEpRemoveEpChanged) intfEndpoints = std::get<endpointsPos>(assocInterfaces[DEFAULT_REV_PATH]); EXPECT_EQ(intfEndpoints.size(), 0); } + +// Verify existing endpoint deleted when empty endpoint is provided +TEST_F(TestAssociations, associationChangedEmptyEndpoint) +{ + std::vector<Association> associations = {{"inventory", "error", ""}}; + + auto assocOwners = createDefaultOwnerAssociation(); + auto assocInterfaces = createDefaultInterfaceAssociation(server); + + // Empty endpoint will result in deletion of corresponding assocInterface + associationChanged(*server, associations, DEFAULT_SOURCE_PATH, + DEFAULT_DBUS_SVC, assocOwners, assocInterfaces); + + // TODO - This test case found a bug where the endpoint validity + // is not checked on the FWD path and is used by default, resulting + // in there being a "" endpoint value. Will fix this in next commit + // to keep the refactor of the code separate from the fix + // (i.e. both of these should be 0 since we have an invalid endpoint) + auto intfEndpoints = + std::get<endpointsPos>(assocInterfaces[DEFAULT_FWD_PATH]); + EXPECT_EQ(intfEndpoints.size(), 1); + intfEndpoints = std::get<endpointsPos>(assocInterfaces[DEFAULT_REV_PATH]); + EXPECT_EQ(intfEndpoints.size(), 0); +} + +// Add a new association with endpoint +TEST_F(TestAssociations, associationChangedAddNewAssoc) +{ + std::vector<Association> associations = { + {"abc", "def", "/xyz/openbmc_project/new/endpoint"}}; + + auto assocOwners = createDefaultOwnerAssociation(); + auto assocInterfaces = createDefaultInterfaceAssociation(server); + + associationChanged(*server, associations, "/new/source/path", + DEFAULT_DBUS_SVC, assocOwners, assocInterfaces); + + // Two source paths + EXPECT_EQ(assocOwners.size(), 2); + + // Four interfaces + EXPECT_EQ(assocInterfaces.size(), 4); + + // New endpoint so assocInterfaces should be same size + auto intfEndpoints = + std::get<endpointsPos>(assocInterfaces[DEFAULT_FWD_PATH]); + EXPECT_EQ(intfEndpoints.size(), 1); +} + +// Add a new association to empty objects +TEST_F(TestAssociations, associationChangedAddNewAssocEmptyObj) +{ + std::string sourcePath = "/logging/entry/1"; + std::string owner = "xyz.openbmc_project.Test"; + std::vector<Association> associations = { + {"inventory", "error", + "/xyz/openbmc_project/inventory/system/chassis"}}; + + // Empty objects because this test will ensure assocOwners adds the + // changed association and interface + AssociationInterfaces assocInterfaces; + AssociationOwnersType assocOwners; + + associationChanged(*server, associations, DEFAULT_SOURCE_PATH, + DEFAULT_DBUS_SVC, assocOwners, assocInterfaces); + + // New associations so ensure it now contains a single entry + EXPECT_EQ(assocOwners.size(), 1); + + // Verify corresponding assoc paths each have one endpoint in assoc + // interfaces and that those endpoints match + auto singleOwner = assocOwners[DEFAULT_SOURCE_PATH]; + auto singleIntf = singleOwner[DEFAULT_DBUS_SVC]; + for (auto i : singleIntf) + { + auto intfEndpoints = std::get<endpointsPos>(assocInterfaces[i.first]); + EXPECT_EQ(intfEndpoints.size(), 1); + EXPECT_EQ(intfEndpoints[0], *i.second.begin()); + } +} + +// Add a new association to same source path but with new owner +TEST_F(TestAssociations, associationChangedAddNewAssocNewOwner) +{ + std::string newOwner = "xyz.openbmc_project.Test2"; + std::vector<Association> associations = { + {"inventory", "error", + "/xyz/openbmc_project/inventory/system/chassis"}}; + + auto assocOwners = createDefaultOwnerAssociation(); + auto assocInterfaces = createDefaultInterfaceAssociation(server); + + associationChanged(*server, associations, DEFAULT_SOURCE_PATH, newOwner, + assocOwners, assocInterfaces); + + // New endpoint so assocOwners should be same size + EXPECT_EQ(assocOwners.size(), 1); + + // Ensure only one endpoint under first path + auto intfEndpoints = + std::get<endpointsPos>(assocInterfaces[DEFAULT_FWD_PATH]); + EXPECT_EQ(intfEndpoints.size(), 1); + + // Ensure the 2 new association endpoints are under the new owner + auto a = assocOwners.find(DEFAULT_SOURCE_PATH); + auto o = a->second.find(newOwner); + EXPECT_EQ(o->second.size(), 2); +} + +// Add a new association to existing interface path +TEST_F(TestAssociations, associationChangedAddNewAssocSameInterface) +{ + std::vector<Association> associations = { + {"abc", "error", "/xyz/openbmc_project/inventory/system/chassis"}}; + + auto assocOwners = createDefaultOwnerAssociation(); + auto assocInterfaces = createDefaultInterfaceAssociation(server); + + associationChanged(*server, associations, DEFAULT_SOURCE_PATH, + DEFAULT_DBUS_SVC, assocOwners, assocInterfaces); + + // Should have 3 entries in AssociationInterfaces, one is just missing an + // endpoint + EXPECT_EQ(assocInterfaces.size(), 3); + + // Change to existing interface so it will be removed here + auto intfEndpoints = + std::get<endpointsPos>(assocInterfaces[DEFAULT_FWD_PATH]); + EXPECT_EQ(intfEndpoints.size(), 0); + + // The new endpoint should exist though in it's place + intfEndpoints = std::get<endpointsPos>( + assocInterfaces[DEFAULT_SOURCE_PATH + "/" + "abc"]); + EXPECT_EQ(intfEndpoints.size(), 1); + + // Added to an existing owner path so still 1 + EXPECT_EQ(assocOwners.size(), 1); +} |