|  | #include "common/utils.hpp" | 
|  | #include "mocked_utils.hpp" | 
|  |  | 
|  | #include <libpldm/platform.h> | 
|  | #include <linux/mctp.h> | 
|  |  | 
|  | #include <gtest/gtest.h> | 
|  |  | 
|  | using namespace pldm::utils; | 
|  |  | 
|  | TEST(GetNumPadBytesTest, NoPaddingNeeded) | 
|  | { | 
|  | EXPECT_EQ(getNumPadBytes(0), 0); | 
|  | EXPECT_EQ(getNumPadBytes(4), 0); | 
|  | EXPECT_EQ(getNumPadBytes(8), 0); | 
|  | EXPECT_EQ(getNumPadBytes(12), 0); | 
|  | } | 
|  |  | 
|  | TEST(GetNumPadBytesTest, OneBytePadding) | 
|  | { | 
|  | EXPECT_EQ(getNumPadBytes(3), 1); | 
|  | EXPECT_EQ(getNumPadBytes(7), 1); | 
|  | EXPECT_EQ(getNumPadBytes(11), 1); | 
|  | } | 
|  |  | 
|  | TEST(GetNumPadBytesTest, TwoBytesPadding) | 
|  | { | 
|  | EXPECT_EQ(getNumPadBytes(2), 2); | 
|  | EXPECT_EQ(getNumPadBytes(6), 2); | 
|  | EXPECT_EQ(getNumPadBytes(10), 2); | 
|  | } | 
|  |  | 
|  | TEST(GetNumPadBytesTest, ThreeBytesPadding) | 
|  | { | 
|  | EXPECT_EQ(getNumPadBytes(1), 3); | 
|  | EXPECT_EQ(getNumPadBytes(5), 3); | 
|  | EXPECT_EQ(getNumPadBytes(9), 3); | 
|  | } | 
|  |  | 
|  | TEST(GetNumPadBytesTest, LargeValues) | 
|  | { | 
|  | EXPECT_EQ(getNumPadBytes(1001), 3); | 
|  | EXPECT_EQ(getNumPadBytes(1024), 0); | 
|  | EXPECT_EQ(getNumPadBytes(65535), 1); | 
|  | } | 
|  |  | 
|  | TEST(GetInventoryObjects, testForEmptyObject) | 
|  | { | 
|  | ObjectValueTree result = | 
|  | DBusHandler::getInventoryObjects<GetManagedEmptyObject>(); | 
|  | EXPECT_TRUE(result.empty()); | 
|  | } | 
|  |  | 
|  | TEST(GetInventoryObjects, testForObject) | 
|  | { | 
|  | std::string path = "/foo/bar"; | 
|  | std::string service = "foo.bar"; | 
|  | auto result = DBusHandler::getInventoryObjects<GetManagedObject>(); | 
|  | EXPECT_EQ(result[path].begin()->first, service); | 
|  | auto function = | 
|  | std::get<bool>(result[path][service][std::string("Functional")]); | 
|  | auto model = | 
|  | std::get<std::string>(result[path][service][std::string("Model")]); | 
|  | EXPECT_FALSE(result.empty()); | 
|  | EXPECT_TRUE(function); | 
|  | EXPECT_EQ(model, std::string("1234 - 00Z")); | 
|  | } | 
|  |  | 
|  | TEST(printBuffer, testprintBufferGoodPath) | 
|  | { | 
|  | std::vector<uint8_t> buffer = {10, 12, 14, 25, 233}; | 
|  | std::ostringstream localString; | 
|  | auto coutBuffer = std::cout.rdbuf(); | 
|  | std::cout.rdbuf(localString.rdbuf()); | 
|  | printBuffer(false, buffer); | 
|  | std::cout.rdbuf(coutBuffer); | 
|  | EXPECT_EQ(localString.str(), "Rx: 0a 0c 0e 19 e9 \n"); | 
|  | localString.str(""); | 
|  | localString.clear(); | 
|  | std::cerr << localString.str() << std::endl; | 
|  | buffer = {12, 0, 200, 12, 255}; | 
|  | std::cout.rdbuf(localString.rdbuf()); | 
|  | printBuffer(true, buffer); | 
|  | std::cout.rdbuf(coutBuffer); | 
|  | EXPECT_EQ(localString.str(), "Tx: 0c 00 c8 0c ff \n"); | 
|  | } | 
|  |  | 
|  | TEST(printBuffer, testprintBufferBadPath) | 
|  | { | 
|  | std::vector<uint8_t> buffer = {}; | 
|  | std::ostringstream localString; | 
|  | auto coutBuffer = std::cout.rdbuf(); | 
|  | std::cout.rdbuf(localString.rdbuf()); | 
|  | printBuffer(false, buffer); | 
|  | EXPECT_EQ(localString.str(), ""); | 
|  | printBuffer(true, buffer); | 
|  | std::cout.rdbuf(coutBuffer); | 
|  | EXPECT_EQ(localString.str(), ""); | 
|  | } | 
|  |  | 
|  | TEST(decodeDate, testGooduintToDate) | 
|  | { | 
|  | uint64_t data = 20191212115959; | 
|  | uint16_t year = 2019; | 
|  | uint8_t month = 12; | 
|  | uint8_t day = 12; | 
|  | uint8_t hours = 11; | 
|  | uint8_t minutes = 59; | 
|  | uint8_t seconds = 59; | 
|  |  | 
|  | uint16_t retyear = 0; | 
|  | uint8_t retmonth = 0; | 
|  | uint8_t retday = 0; | 
|  | uint8_t rethours = 0; | 
|  | uint8_t retminutes = 0; | 
|  | uint8_t retseconds = 0; | 
|  |  | 
|  | auto ret = uintToDate(data, &retyear, &retmonth, &retday, &rethours, | 
|  | &retminutes, &retseconds); | 
|  |  | 
|  | EXPECT_EQ(ret, true); | 
|  | EXPECT_EQ(year, retyear); | 
|  | EXPECT_EQ(month, retmonth); | 
|  | EXPECT_EQ(day, retday); | 
|  | EXPECT_EQ(hours, rethours); | 
|  | EXPECT_EQ(minutes, retminutes); | 
|  | EXPECT_EQ(seconds, retseconds); | 
|  | } | 
|  |  | 
|  | TEST(decodeDate, testBaduintToDate) | 
|  | { | 
|  | uint64_t data = 10191212115959; | 
|  |  | 
|  | uint16_t retyear = 0; | 
|  | uint8_t retmonth = 0; | 
|  | uint8_t retday = 0; | 
|  | uint8_t rethours = 0; | 
|  | uint8_t retminutes = 0; | 
|  | uint8_t retseconds = 0; | 
|  |  | 
|  | auto ret = uintToDate(data, &retyear, &retmonth, &retday, &rethours, | 
|  | &retminutes, &retseconds); | 
|  |  | 
|  | EXPECT_EQ(ret, false); | 
|  | } | 
|  |  | 
|  | TEST(parseEffecterData, testGoodDecodeEffecterData) | 
|  | { | 
|  | std::vector<uint8_t> effecterData = {1, 1, 0, 1}; | 
|  | uint8_t effecterCount = 2; | 
|  | set_effecter_state_field stateField0 = {1, 1}; | 
|  | set_effecter_state_field stateField1 = {0, 1}; | 
|  |  | 
|  | auto effecterField = parseEffecterData(effecterData, effecterCount); | 
|  | EXPECT_NE(effecterField, std::nullopt); | 
|  | EXPECT_EQ(effecterCount, effecterField->size()); | 
|  |  | 
|  | std::vector<set_effecter_state_field> stateField = effecterField.value(); | 
|  | EXPECT_EQ(stateField[0].set_request, stateField0.set_request); | 
|  | EXPECT_EQ(stateField[0].effecter_state, stateField0.effecter_state); | 
|  | EXPECT_EQ(stateField[1].set_request, stateField1.set_request); | 
|  | EXPECT_EQ(stateField[1].effecter_state, stateField1.effecter_state); | 
|  | } | 
|  |  | 
|  | TEST(parseEffecterData, testBadDecodeEffecterData) | 
|  | { | 
|  | std::vector<uint8_t> effecterData = {0, 1, 0, 1, 0, 1}; | 
|  | uint8_t effecterCount = 2; | 
|  |  | 
|  | auto effecterField = parseEffecterData(effecterData, effecterCount); | 
|  |  | 
|  | EXPECT_EQ(effecterField, std::nullopt); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testOneMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 33; | 
|  | uint16_t stateSetId = 196; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 33; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 196; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 44; | 
|  | uint16_t stateSetId = 196; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 33; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 196; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testEmptyRepo) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 33; | 
|  | uint16_t stateSetId = 196; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testMoreMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 31; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 129; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_effecter_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 11; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 31; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_effecter_count = 1; | 
|  | state_second->state_set_id = 129; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | uint16_t entityID_ = 31; | 
|  | uint16_t stateSetId_ = 129; | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID_, stateSetId_, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  | EXPECT_EQ(pdr_second, record[1]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testManyNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 33; | 
|  | uint16_t stateSetId = 196; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 34; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 198; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_effecter_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 11; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 39; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_effecter_count = 1; | 
|  | state_second->state_set_id = 169; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testOneMatchOneNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 67; | 
|  | uint16_t stateSetId = 192; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 32; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 198; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_effecter_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 11; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 67; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_effecter_count = 1; | 
|  | state_second->state_set_id = 192; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr_second, record[0]); | 
|  | EXPECT_EQ(record.size(), 1); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testOneMatchManyNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 67; | 
|  | uint16_t stateSetId = 192; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 32; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 1; | 
|  | state->state_set_id = 198; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_effecter_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 11; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 67; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_effecter_count = 1; | 
|  | state_second->state_set_id = 192; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_third( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states)); | 
|  |  | 
|  | auto rec_third = new (pdr_third.data()) pldm_state_effecter_pdr; | 
|  |  | 
|  | auto state_third = new (rec_third->possible_states) | 
|  | state_effecter_possible_states; | 
|  |  | 
|  | rec_third->hdr.type = 11; | 
|  | rec_third->hdr.record_handle = 3; | 
|  | rec_third->entity_type = 69; | 
|  | rec_third->container_id = 0; | 
|  | rec_third->composite_effecter_count = 1; | 
|  | state_third->state_set_id = 199; | 
|  | state_third->possible_states_size = 1; | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr_second, record[0]); | 
|  | EXPECT_EQ(record.size(), 1); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testCompositeEffecter) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 67; | 
|  | uint16_t stateSetId = 192; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states) * 3); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  | auto state_start = rec->possible_states; | 
|  |  | 
|  | auto state = new (state_start) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 67; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 3; | 
|  | state->state_set_id = 198; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_effecter_possible_states; | 
|  | state->state_set_id = 193; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_effecter_possible_states; | 
|  | state->state_set_id = 192; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateEffecterPDR, testNoMatchCompositeEffecter) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 67; | 
|  | uint16_t stateSetId = 192; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_effecter_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_effecter_possible_states) * 3); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_effecter_pdr; | 
|  | auto state_start = rec->possible_states; | 
|  |  | 
|  | auto state = new (state_start) state_effecter_possible_states; | 
|  |  | 
|  | rec->hdr.type = 11; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 34; | 
|  | rec->container_id = 0; | 
|  | rec->composite_effecter_count = 3; | 
|  | state->state_set_id = 198; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_effecter_possible_states; | 
|  | state->state_set_id = 193; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_effecter_possible_states; | 
|  | state->state_set_id = 123; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateEffecterPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testOneMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 5; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 1; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 55; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 1; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testEmptyRepo) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testMoreMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 5; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 1; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_sensor_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 4; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 5; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_sensor_count = 1; | 
|  | state_second->state_set_id = 1; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | uint16_t entityID_ = 5; | 
|  | uint16_t stateSetId_ = 1; | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID_, stateSetId_, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  | EXPECT_EQ(pdr_second, record[1]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testManyNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 56; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 2; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_sensor_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 4; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 66; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_sensor_count = 1; | 
|  | state_second->state_set_id = 3; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testOneMatchOneNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 10; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 20; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_sensor_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 4; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 5; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_sensor_count = 1; | 
|  | state_second->state_set_id = 1; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr_second, record[0]); | 
|  | EXPECT_EQ(record.size(), 1); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testOneMatchManyNoMatch) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state = new (rec->possible_states) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 6; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 1; | 
|  | state->state_set_id = 9; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_second( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec_second = new (pdr_second.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state_second = new (rec_second->possible_states) | 
|  | state_sensor_possible_states; | 
|  |  | 
|  | rec_second->hdr.type = 4; | 
|  | rec_second->hdr.record_handle = 2; | 
|  | rec_second->entity_type = 5; | 
|  | rec_second->container_id = 0; | 
|  | rec_second->composite_sensor_count = 1; | 
|  | state_second->state_set_id = 1; | 
|  | state_second->possible_states_size = 1; | 
|  |  | 
|  | handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr_second.data(), pdr_second.size(), false, 1, | 
|  | &handle), | 
|  | 0); | 
|  |  | 
|  | std::vector<uint8_t> pdr_third( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states)); | 
|  |  | 
|  | auto rec_third = new (pdr_third.data()) pldm_state_sensor_pdr; | 
|  |  | 
|  | auto state_third = new (rec_third->possible_states) | 
|  | state_sensor_possible_states; | 
|  |  | 
|  | rec_third->hdr.type = 4; | 
|  | rec_third->hdr.record_handle = 3; | 
|  | rec_third->entity_type = 7; | 
|  | rec_third->container_id = 0; | 
|  | rec_third->composite_sensor_count = 1; | 
|  | state_third->state_set_id = 12; | 
|  | state_third->possible_states_size = 1; | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr_second, record[0]); | 
|  | EXPECT_EQ(record.size(), 1); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testCompositeSensor) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states) * 3); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  | auto state_start = rec->possible_states; | 
|  |  | 
|  | auto state = new (state_start) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 5; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 3; | 
|  | state->state_set_id = 2; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_sensor_possible_states; | 
|  |  | 
|  | state->state_set_id = 7; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_sensor_possible_states; | 
|  |  | 
|  | state->state_set_id = 1; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(pdr, record[0]); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(FindStateSensorPDR, testNoMatchCompositeSensor) | 
|  | { | 
|  | auto repo = pldm_pdr_init(); | 
|  | uint8_t tid = 1; | 
|  | uint16_t entityID = 5; | 
|  | uint16_t stateSetId = 1; | 
|  |  | 
|  | std::vector<uint8_t> pdr( | 
|  | sizeof(struct pldm_state_sensor_pdr) - sizeof(uint8_t) + | 
|  | sizeof(struct state_sensor_possible_states) * 3); | 
|  |  | 
|  | auto rec = new (pdr.data()) pldm_state_sensor_pdr; | 
|  | auto state_start = rec->possible_states; | 
|  |  | 
|  | auto state = new (state_start) state_sensor_possible_states; | 
|  |  | 
|  | rec->hdr.type = 4; | 
|  | rec->hdr.record_handle = 1; | 
|  | rec->entity_type = 21; | 
|  | rec->container_id = 0; | 
|  | rec->composite_sensor_count = 3; | 
|  | state->state_set_id = 15; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_sensor_possible_states; | 
|  | state->state_set_id = 19; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | state_start += state->possible_states_size + sizeof(state->state_set_id) + | 
|  | sizeof(state->possible_states_size); | 
|  | state = new (state_start) state_sensor_possible_states; | 
|  | state->state_set_id = 39; | 
|  | state->possible_states_size = 1; | 
|  |  | 
|  | uint32_t handle = 0; | 
|  | ASSERT_EQ(pldm_pdr_add(repo, pdr.data(), pdr.size(), false, 1, &handle), 0); | 
|  |  | 
|  | auto record = findStateSensorPDR(tid, entityID, stateSetId, repo); | 
|  |  | 
|  | EXPECT_EQ(record.empty(), true); | 
|  |  | 
|  | pldm_pdr_destroy(repo); | 
|  | } | 
|  |  | 
|  | TEST(toString, allTestCases) | 
|  | { | 
|  | variable_field buffer{}; | 
|  | constexpr std::string_view str1{}; | 
|  | auto returnStr1 = toString(buffer); | 
|  | EXPECT_EQ(returnStr1, str1); | 
|  |  | 
|  | constexpr std::string_view str2{"0penBmc"}; | 
|  | constexpr std::array<uint8_t, 7> bufferArr1{0x30, 0x70, 0x65, 0x6e, | 
|  | 0x42, 0x6d, 0x63}; | 
|  | buffer.ptr = bufferArr1.data(); | 
|  | buffer.length = bufferArr1.size(); | 
|  | auto returnStr2 = toString(buffer); | 
|  | EXPECT_EQ(returnStr2, str2); | 
|  |  | 
|  | constexpr std::string_view str3{"0pen mc"}; | 
|  | // \xa0 - the non-breaking space in ISO-8859-1 | 
|  | constexpr std::array<uint8_t, 7> bufferArr2{0x30, 0x70, 0x65, 0x6e, | 
|  | 0xa0, 0x6d, 0x63}; | 
|  | buffer.ptr = bufferArr2.data(); | 
|  | buffer.length = bufferArr2.size(); | 
|  | auto returnStr3 = toString(buffer); | 
|  | EXPECT_EQ(returnStr3, str3); | 
|  | } | 
|  |  | 
|  | TEST(Split, allTestCases) | 
|  | { | 
|  | std::string s1 = "aa,bb,cc,dd"; | 
|  | auto results1 = split(s1, ","); | 
|  | EXPECT_EQ(results1[0], "aa"); | 
|  | EXPECT_EQ(results1[1], "bb"); | 
|  | EXPECT_EQ(results1[2], "cc"); | 
|  | EXPECT_EQ(results1[3], "dd"); | 
|  |  | 
|  | std::string s2 = "aa||bb||cc||dd"; | 
|  | auto results2 = split(s2, "||"); | 
|  | EXPECT_EQ(results2[0], "aa"); | 
|  | EXPECT_EQ(results2[1], "bb"); | 
|  | EXPECT_EQ(results2[2], "cc"); | 
|  | EXPECT_EQ(results2[3], "dd"); | 
|  |  | 
|  | std::string s3 = " aa || bb||cc|| dd"; | 
|  | auto results3 = split(s3, "||", " "); | 
|  | EXPECT_EQ(results3[0], "aa"); | 
|  | EXPECT_EQ(results3[1], "bb"); | 
|  | EXPECT_EQ(results3[2], "cc"); | 
|  | EXPECT_EQ(results3[3], "dd"); | 
|  |  | 
|  | std::string s4 = "aa\\\\bb\\cc\\dd"; | 
|  | auto results4 = split(s4, "\\"); | 
|  | EXPECT_EQ(results4[0], "aa"); | 
|  | EXPECT_EQ(results4[1], "bb"); | 
|  | EXPECT_EQ(results4[2], "cc"); | 
|  | EXPECT_EQ(results4[3], "dd"); | 
|  |  | 
|  | std::string s5 = "aa\\"; | 
|  | auto results5 = split(s5, "\\"); | 
|  | EXPECT_EQ(results5[0], "aa"); | 
|  | } | 
|  |  | 
|  | TEST(ValidEID, allTestCases) | 
|  | { | 
|  | auto rc = isValidEID(MCTP_ADDR_NULL); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(MCTP_ADDR_ANY); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(1); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(2); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(3); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(4); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(5); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(6); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(7); | 
|  | EXPECT_EQ(rc, false); | 
|  | rc = isValidEID(MCTP_START_VALID_EID); | 
|  | EXPECT_EQ(rc, true); | 
|  | rc = isValidEID(254); | 
|  | EXPECT_EQ(rc, true); | 
|  | } | 
|  |  | 
|  | TEST(TrimNameForDbus, goodTest) | 
|  | { | 
|  | std::string name = "Name with  space"; | 
|  | std::string_view expectedName = "Name_with__space"; | 
|  | std::string_view result = trimNameForDbus(name); | 
|  | EXPECT_EQ(expectedName, result); | 
|  | name = "Name 1\0"; // NOLINT(bugprone-string-literal-with-embedded-nul) | 
|  | expectedName = "Name_1"; | 
|  | result = trimNameForDbus(name); | 
|  | EXPECT_EQ(expectedName, result); | 
|  | } | 
|  |  | 
|  | TEST(dbusPropValuesToDouble, goodTest) | 
|  | { | 
|  | double value = 0; | 
|  | bool ret = | 
|  | dbusPropValuesToDouble("uint8_t", static_cast<uint8_t>(0x12), &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x12, value); | 
|  | ret = | 
|  | dbusPropValuesToDouble("int16_t", static_cast<int16_t>(0x1234), &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x1234, value); | 
|  | ret = dbusPropValuesToDouble("uint16_t", static_cast<uint16_t>(0x8234), | 
|  | &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x8234, value); | 
|  | ret = dbusPropValuesToDouble("int32_t", static_cast<int32_t>(0x12345678), | 
|  | &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x12345678, value); | 
|  | ret = dbusPropValuesToDouble("uint32_t", static_cast<uint32_t>(0x82345678), | 
|  | &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x82345678, value); | 
|  | ret = dbusPropValuesToDouble( | 
|  | "int64_t", static_cast<int64_t>(0x1234567898765432), &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x1234567898765432, value); | 
|  | ret = dbusPropValuesToDouble( | 
|  | "uint64_t", static_cast<uint64_t>(0x8234567898765432), &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(0x8234567898765432, value); | 
|  | ret = dbusPropValuesToDouble("double", static_cast<double>(1234.5678), | 
|  | &value); | 
|  | EXPECT_EQ(true, ret); | 
|  | EXPECT_EQ(1234.5678, value); | 
|  | } | 
|  |  | 
|  | TEST(dbusPropValuesToDouble, badTest) | 
|  | { | 
|  | double value = std::numeric_limits<double>::quiet_NaN(); | 
|  | /* Type and Data variant are different */ | 
|  | bool ret = | 
|  | dbusPropValuesToDouble("uint8_t", static_cast<uint16_t>(0x12), &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | /* Unsupported Types */ | 
|  | ret = dbusPropValuesToDouble("string", static_cast<std::string>("hello"), | 
|  | &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | ret = dbusPropValuesToDouble("bool", static_cast<bool>(true), &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | ret = dbusPropValuesToDouble("vector<uint8_t>", | 
|  | static_cast<std::string>("hello"), &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | ret = dbusPropValuesToDouble("vector<string>", | 
|  | static_cast<std::string>("hello"), &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | /* Support Type but Data Type is unsupported */ | 
|  | ret = dbusPropValuesToDouble("double", static_cast<std::string>("hello"), | 
|  | &value); | 
|  | EXPECT_EQ(false, ret); | 
|  | /* Null pointer */ | 
|  | ret = dbusPropValuesToDouble("double", static_cast<std::string>("hello"), | 
|  | nullptr); | 
|  | EXPECT_EQ(false, ret); | 
|  | } | 
|  |  | 
|  | TEST(FruFieldValuestring, goodTest) | 
|  | { | 
|  | std::vector<uint8_t> data = {0x41, 0x6d, 0x70, 0x65, 0x72, 0x65}; | 
|  | std::string expectedString = "Ampere"; | 
|  | auto result = fruFieldValuestring(data.data(), data.size()); | 
|  | EXPECT_EQ(expectedString, result); | 
|  | } | 
|  |  | 
|  | TEST(FruFieldValuestring, BadTest) | 
|  | { | 
|  | std::vector<uint8_t> data = {0x41, 0x6d, 0x70, 0x65, 0x72, 0x65}; | 
|  | auto result = fruFieldValuestring(data.data(), 0); | 
|  | EXPECT_EQ(std::nullopt, result); | 
|  | result = fruFieldValuestring(nullptr, data.size()); | 
|  | EXPECT_EQ(std::nullopt, result); | 
|  | } | 
|  |  | 
|  | TEST(fruFieldParserU32, goodTest) | 
|  | { | 
|  | std::vector<uint8_t> data = {0x10, 0x12, 0x14, 0x25}; | 
|  | uint32_t expectedU32 = 0x25141210; | 
|  | auto result = fruFieldParserU32(data.data(), data.size()); | 
|  | EXPECT_EQ(expectedU32, result.value()); | 
|  | } | 
|  |  | 
|  | TEST(fruFieldParserU32, BadTest) | 
|  | { | 
|  | std::vector<uint8_t> data = {0x10, 0x12, 0x14, 0x25}; | 
|  | auto result = fruFieldParserU32(data.data(), data.size() - 1); | 
|  | EXPECT_EQ(std::nullopt, result); | 
|  | result = fruFieldParserU32(nullptr, data.size()); | 
|  | EXPECT_EQ(std::nullopt, result); | 
|  | } |