pdr: Assign record_handle in entity_association_pdr_add_children()
The entity_association_pdr_add_children() static API was hard coding
the record handle value to 0 rather than assigning the record_handle
value provided as a input parameter.
Tested: Unit tested
Fixes: 25ddbccfae0e ("pdr: Add pldm_entity_association_pdr_add_from_node_with_record_handle()")
Change-Id: I96b6a340f027abd2ef4009380a2fcf27742531bd
Signed-off-by: Pavithra Barithaya <pavithra.b@ibm.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e06258c..c5af610 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,6 +37,7 @@
### Fixed
1. libpldm: Rationalise the local and installed path of pldm.h
+2. pdr: Assign record_handle in entity_association_pdr_add_children()
## [0.7.0] - 2023-08-29
diff --git a/src/pdr.c b/src/pdr.c
index 0f5d370..8865002 100644
--- a/src/pdr.c
+++ b/src/pdr.c
@@ -785,7 +785,7 @@
struct pldm_pdr_hdr *hdr = (struct pldm_pdr_hdr *)start;
hdr->version = 1;
- hdr->record_handle = 0;
+ hdr->record_handle = record_handle;
hdr->type = PLDM_PDR_ENTITY_ASSOCIATION;
hdr->record_change_num = 0;
hdr->length = htole16(size - sizeof(struct pldm_pdr_hdr));
diff --git a/tests/libpldm_pdr_test.cpp b/tests/libpldm_pdr_test.cpp
index a5f62e7..d796587 100644
--- a/tests/libpldm_pdr_test.cpp
+++ b/tests/libpldm_pdr_test.cpp
@@ -1861,3 +1861,71 @@
pldm_entity_association_tree_destroy(tree);
}
#endif
+
+TEST(EntityAssociationPDR, testNodeAddCheck)
+{
+ // pldm_entity entities[4]{};
+ pldm_entity* entities = (pldm_entity*)malloc(sizeof(pldm_entity) * 4);
+ entities[0].entity_type = 1;
+ entities[1].entity_type = 2;
+ entities[2].entity_type = 2;
+ entities[3].entity_type = 3;
+
+ auto tree = pldm_entity_association_tree_init();
+
+ auto l1 = pldm_entity_association_tree_add(
+ tree, &entities[0], 0xFFFF, nullptr, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
+ EXPECT_NE(l1, nullptr);
+ auto l2a = pldm_entity_association_tree_add(
+ tree, &entities[1], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
+ EXPECT_NE(l2a, nullptr);
+ auto l2b = pldm_entity_association_tree_add(
+ tree, &entities[2], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
+ EXPECT_NE(l2b, nullptr);
+ auto l2c = pldm_entity_association_tree_add(
+ tree, &entities[3], 0xFFFF, l1, PLDM_ENTITY_ASSOCIAION_PHYSICAL);
+ EXPECT_NE(l2c, nullptr);
+
+ auto repo = pldm_pdr_init();
+
+ EXPECT_EQ(pldm_entity_association_pdr_add_from_node_with_record_handle(
+ l1, repo, &entities, 4, false, 1, 0),
+ 0);
+ EXPECT_EQ(pldm_entity_association_pdr_add_from_node_with_record_handle(
+ l1, repo, &entities, 4, false, 1, 2),
+ 0);
+ EXPECT_EQ(pldm_entity_association_pdr_add_from_node_with_record_handle(
+ l1, repo, &entities, 4, false, 1, 23),
+ 0);
+ EXPECT_EQ(pldm_entity_association_pdr_add_from_node_with_record_handle(
+ l1, repo, &entities, 4, false, 1, 34),
+ 0);
+
+ EXPECT_EQ(pldm_pdr_get_record_count(repo), 4u);
+
+ uint8_t* outData = nullptr;
+ uint32_t size{};
+ uint32_t nextRecHdl{};
+ auto hdl = pldm_pdr_find_record(repo, 0, &outData, &size, &nextRecHdl);
+ EXPECT_NE(hdl, nullptr);
+
+ outData = nullptr;
+ auto hdl1 = pldm_pdr_find_record(repo, 2, &outData, &size, &nextRecHdl);
+ EXPECT_NE(hdl1, nullptr);
+ pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(outData);
+ EXPECT_EQ(hdr->record_handle, 2);
+
+ outData = nullptr;
+ auto hdl2 = pldm_pdr_find_record(repo, 23, &outData, &size, &nextRecHdl);
+ EXPECT_NE(hdl2, nullptr);
+ pldm_pdr_hdr* hdr1 = reinterpret_cast<pldm_pdr_hdr*>(outData);
+ EXPECT_EQ(hdr1->record_handle, 23);
+
+ outData = nullptr;
+ auto hdl3 = pldm_pdr_find_record(repo, 3, &outData, &size, &nextRecHdl);
+ EXPECT_EQ(hdl3, nullptr);
+
+ free(entities);
+ pldm_pdr_destroy(repo);
+ pldm_entity_association_tree_destroy(tree);
+}