blob: 45653ec7a97322fdb85a294c8ac70f03912f775e [file] [log] [blame]
George Liudf9a6d32020-12-22 16:27:16 +08001#include "libpldm/pdr.h"
2
3#include "common/utils.hpp"
4
5#include <filesystem>
6
7#include <gtest/gtest.h>
8
9namespace fs = std::filesystem;
10using namespace pldm;
11using namespace pldm::utils;
12
13TEST(EntityAssociation, addObjectPathEntityAssociations1)
14{
15 pldm_entity entities[41]{};
16
17 entities[0].entity_type = 45;
18 entities[0].entity_container_id = 0;
19
20 entities[1].entity_type = 64;
21 entities[1].entity_container_id = 1;
22
23 entities[2].entity_type = 67;
24 entities[2].entity_container_id = 2;
25 entities[3].entity_type = 67;
26 entities[3].entity_container_id = 2;
27
28 entities[4].entity_type = 135;
29 entities[4].entity_container_id = 3;
30 entities[5].entity_type = 135;
31 entities[5].entity_container_id = 3;
32 entities[6].entity_type = 135;
33 entities[6].entity_container_id = 3;
34 entities[7].entity_type = 135;
35 entities[7].entity_container_id = 3;
36
37 auto tree = pldm_entity_association_tree_init();
38
39 auto l1 = pldm_entity_association_tree_add(tree, &entities[0], 1, nullptr,
40 PLDM_ENTITY_ASSOCIAION_PHYSICAL);
41
42 auto l2 = pldm_entity_association_tree_add(tree, &entities[1], 1, l1,
43 PLDM_ENTITY_ASSOCIAION_PHYSICAL);
44
45 auto l3a = pldm_entity_association_tree_add(
46 tree, &entities[2], 0, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
47 auto l3b = pldm_entity_association_tree_add(
48 tree, &entities[3], 1, l2, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
49
50 auto l4a = pldm_entity_association_tree_add(
51 tree, &entities[4], 0, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
52 auto l4b = pldm_entity_association_tree_add(
53 tree, &entities[5], 1, l3a, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
54
55 auto l5a = pldm_entity_association_tree_add(
56 tree, &entities[6], 0, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
57 auto l5b = pldm_entity_association_tree_add(
58 tree, &entities[7], 1, l3b, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
59
60 EntityAssociations entityAssociations = {
61 {l1, l2}, {l2, l3a, l3b}, {l3a, l4a, l4b}, {l3b, l5a, l5b}};
62
63 ObjectPathMaps retObjectMaps = {
64 {"/xyz/openbmc_project/inventory/chassis1", l1},
65 {"/xyz/openbmc_project/inventory/chassis1/motherboard1", l2},
66 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0", l3a},
67 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1", l3b},
68 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0/cpu0", l4a},
69 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm0/cpu1", l4b},
70 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1/cpu0", l5a},
71 {"/xyz/openbmc_project/inventory/chassis1/motherboard1/dcm1/cpu1", l5b},
72 };
73
74 ObjectPathMaps objPathMap;
75 updateEntityAssociation(entityAssociations, tree, objPathMap);
76
77 EXPECT_EQ(objPathMap.size(), retObjectMaps.size());
78
79 int index = 0;
80 for (auto& obj : objPathMap)
81 {
82 if (retObjectMaps.contains(obj.first))
83 {
84 index++;
85 pldm_entity entity = pldm_entity_extract(obj.second);
86 pldm_entity retEntity =
87 pldm_entity_extract(retObjectMaps[obj.first]);
88 EXPECT_EQ(entity.entity_type, retEntity.entity_type);
89 EXPECT_EQ(entity.entity_instance_num,
90 retEntity.entity_instance_num);
91 EXPECT_EQ(pldm_entity_node_get_remote_container_id(obj.second),
92 pldm_entity_node_get_remote_container_id(
93 retObjectMaps[obj.first]));
94 }
95 }
96 EXPECT_EQ(index, retObjectMaps.size());
97 pldm_entity_association_tree_destroy(tree);
98}