| #include "libpldm/pdr.h" |
| |
| #include "common/utils.hpp" |
| |
| #include <filesystem> |
| |
| #include <gtest/gtest.h> |
| |
| namespace fs = std::filesystem; |
| using namespace pldm; |
| using namespace pldm::utils; |
| |
| TEST(EntityAssociation, addObjectPathEntityAssociations1) |
| { |
| pldm_entity entities[41]{}; |
| |
| entities[0].entity_type = 45; |
| entities[0].entity_container_id = 0; |
| |
| entities[1].entity_type = 64; |
| entities[1].entity_container_id = 1; |
| |
| entities[2].entity_type = 67; |
| entities[2].entity_container_id = 2; |
| entities[3].entity_type = 67; |
| entities[3].entity_container_id = 2; |
| |
| entities[4].entity_type = 135; |
| entities[4].entity_container_id = 3; |
| entities[5].entity_type = 135; |
| entities[5].entity_container_id = 3; |
| entities[6].entity_type = 135; |
| entities[6].entity_container_id = 3; |
| entities[7].entity_type = 135; |
| entities[7].entity_container_id = 3; |
| |
| auto tree = pldm_entity_association_tree_init(); |
| |
| auto l1 = pldm_entity_association_tree_add(tree, &entities[0], 1, nullptr, |
| PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| |
| auto l2 = pldm_entity_association_tree_add(tree, &entities[1], 1, l1, |
| PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| |
| auto l3a = pldm_entity_association_tree_add( |
| tree, &entities[2], 0, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| auto l3b = pldm_entity_association_tree_add( |
| tree, &entities[3], 1, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| |
| auto l4a = pldm_entity_association_tree_add( |
| tree, &entities[4], 0, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| auto l4b = pldm_entity_association_tree_add( |
| tree, &entities[5], 1, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| |
| auto l5a = pldm_entity_association_tree_add( |
| tree, &entities[6], 0, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| auto l5b = pldm_entity_association_tree_add( |
| tree, &entities[7], 1, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL); |
| |
| EntityAssociations entityAssociations = { |
| {l1, l2}, {l2, l3a, l3b}, {l3a, l4a, l4b}, {l3b, l5a, l5b}}; |
| |
| ObjectPathMaps retObjectMaps = { |
| {"/xyz/openbmc_project/inventory/chassis1", l1}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1", l2}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0", l3a}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1", l3b}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0/cpu0", l4a}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0/cpu1", l4b}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1/cpu0", l5a}, |
| {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1/cpu1", l5b}, |
| }; |
| |
| ObjectPathMaps objPathMap; |
| updateEntityAssociation(entityAssociations, tree, objPathMap); |
| |
| EXPECT_EQ(objPathMap.size(), retObjectMaps.size()); |
| |
| int index = 0; |
| for (auto& obj : objPathMap) |
| { |
| if (retObjectMaps.contains(obj.first)) |
| { |
| index++; |
| pldm_entity entity = pldm_entity_extract(obj.second); |
| pldm_entity retEntity = |
| pldm_entity_extract(retObjectMaps[obj.first]); |
| EXPECT_EQ(entity.entity_type, retEntity.entity_type); |
| EXPECT_EQ(entity.entity_instance_num, |
| retEntity.entity_instance_num); |
| EXPECT_EQ(pldm_entity_node_get_remote_container_id(obj.second), |
| pldm_entity_node_get_remote_container_id( |
| retObjectMaps[obj.first])); |
| } |
| } |
| EXPECT_EQ(index, retObjectMaps.size()); |
| pldm_entity_association_tree_destroy(tree); |
| } |