diff options
| author | Andrew Geissler <geissonator@yahoo.com> | 2019-02-11 20:20:40 -0600 |
|---|---|---|
| committer | Matt Spinler <spinler@us.ibm.com> | 2019-04-05 15:05:32 +0000 |
| commit | 2067926a03284fae98203c99f8a5d9acda0d2a47 (patch) | |
| tree | bc606ebd4988ec57b67e15abc5d83c22c964d849 /src/test | |
| parent | 5b2e72765e4f547dd74a139f703c957c41a9078a (diff) | |
| download | phosphor-objmgr-2067926a03284fae98203c99f8a5d9acda0d2a47.tar.gz phosphor-objmgr-2067926a03284fae98203c99f8a5d9acda0d2a47.zip | |
unit-test: Test deleting entry on name change
Breaking off into a separate function enables easier unit testing of the
specific function
Testing: 97% coverage of processing.cpp
Change-Id: I08f229657a8f44230b711fabbae20fb403792637
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/Makefile.am.include | 11 | ||||
| -rw-r--r-- | src/test/name_change.cpp | 62 | ||||
| -rw-r--r-- | src/test/util/association_objects.hpp | 13 |
3 files changed, 83 insertions, 3 deletions
diff --git a/src/test/Makefile.am.include b/src/test/Makefile.am.include index b54ddbf..394c610 100644 --- a/src/test/Makefile.am.include +++ b/src/test/Makefile.am.include @@ -1,12 +1,17 @@ -src_test_well_known_SOURCES = %reldir%/well_known.cpp src/processing.cpp +src_test_well_known_SOURCES = %reldir%/well_known.cpp src/processing.cpp \ + src/associations.cpp src_test_need_to_introspect_SOURCES = %reldir%/need_to_introspect.cpp \ - src/processing.cpp + src/processing.cpp src/associations.cpp src_test_associations_SOURCES = %reldir%/associations.cpp \ src/associations.cpp +src_test_name_change_SOURCES = %reldir%/name_change.cpp \ + src/associations.cpp src/processing.cpp + check_PROGRAMS += \ %reldir%/well_known \ %reldir%/need_to_introspect \ - %reldir%/associations + %reldir%/associations \ + %reldir%/name_change diff --git a/src/test/name_change.cpp b/src/test/name_change.cpp new file mode 100644 index 0000000..f4a9662 --- /dev/null +++ b/src/test/name_change.cpp @@ -0,0 +1,62 @@ +#include "src/processing.hpp" +#include "src/test/util/asio_server_class.hpp" +#include "src/test/util/association_objects.hpp" + +#include <gtest/gtest.h> + +class TestNameChange : public AsioServerClassTest +{ +}; +sdbusplus::asio::object_server* TestNameChange::AsioServerClassTest::server = + nullptr; + +// Verify unique name is removed from nameOwners +TEST_F(TestNameChange, UniqueNameNoInterfaces) +{ + boost::container::flat_map<std::string, std::string> nameOwners = { + {":1.99", "test-name"}}; + std::string wellKnown = {"test-name"}; + std::string oldOwner = {":1.99"}; + interface_map_type interfaceMap; + AssociationOwnersType assocOwners; + AssociationInterfaces assocInterfaces; + + processNameChangeDelete(nameOwners, wellKnown, oldOwner, interfaceMap, + assocOwners, assocInterfaces, *server); + EXPECT_EQ(nameOwners.size(), 0); +} + +// Verify path removed from interface map and association objects +TEST_F(TestNameChange, UniqueNameAssociationsAndInterface) +{ + boost::container::flat_map<std::string, std::string> nameOwners = { + {":1.99", DEFAULT_DBUS_SVC}}; + std::string oldOwner = {":1.99"}; + boost::container::flat_set<std::string> assocInterfacesSet = { + ASSOCIATIONS_INTERFACE}; + + // Build up these objects so that an associated interface will match + // with the associated owner being removed + auto assocOwners = createDefaultOwnerAssociation(); + auto assocInterfaces = createDefaultInterfaceAssociation(server); + auto interfaceMap = createInterfaceMap( + DEFAULT_SOURCE_PATH, DEFAULT_DBUS_SVC, assocInterfacesSet); + + processNameChangeDelete(nameOwners, DEFAULT_DBUS_SVC, oldOwner, + interfaceMap, assocOwners, assocInterfaces, + *server); + EXPECT_EQ(nameOwners.size(), 0); + + // Verify owner association was deleted + EXPECT_TRUE(assocOwners.empty()); + + // Verify endpoint was deleted from interface association + auto intfEndpoints = + std::get<endpointsPos>(assocInterfaces[DEFAULT_FWD_PATH]); + EXPECT_EQ(intfEndpoints.size(), 0); + intfEndpoints = std::get<endpointsPos>(assocInterfaces[DEFAULT_REV_PATH]); + EXPECT_EQ(intfEndpoints.size(), 0); + + // Verify interface map was deleted + EXPECT_TRUE(interfaceMap.empty()); +} diff --git a/src/test/util/association_objects.hpp b/src/test/util/association_objects.hpp index 081f891..45b89d6 100644 --- a/src/test/util/association_objects.hpp +++ b/src/test/util/association_objects.hpp @@ -1,4 +1,5 @@ #include "src/associations.hpp" +#include "src/processing.hpp" const std::string DEFAULT_SOURCE_PATH = "/logging/entry/1"; const std::string DEFAULT_DBUS_SVC = "xyz.openbmc_project.New.Interface"; @@ -45,3 +46,15 @@ void addEndpointToInterfaceAssociation(AssociationInterfaces& interfaceAssoc) auto endpoints = std::get<endpointsPos>(iface); endpoints.push_back(EXTRA_ENDPOINT); } + +// Create a default interface_map_type with input values +interface_map_type createInterfaceMap( + const std::string& path, const std::string& connection_name, + const boost::container::flat_set<std::string>& interface_names) +{ + boost::container::flat_map<std::string, + boost::container::flat_set<std::string>> + connectionMap = {{connection_name, interface_names}}; + interface_map_type interfaceMap = {{path, connectionMap}}; + return interfaceMap; +} |

