blob: c2b114cd3a61a49f6a117f10dc02384d59140d6a [file] [log] [blame]
Deepak Kodihallid0782962019-05-07 16:36:47 +05301#include "libpldmresponder/effecters.hpp"
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -05002#include "libpldmresponder/pdr.hpp"
George Liue53193f2020-02-24 09:23:26 +08003#include "libpldmresponder/pdr_utils.hpp"
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -05004
5#include "libpldm/platform.h"
6
7#include <gtest/gtest.h>
8
9using namespace pldm::responder;
10
11TEST(GeneratePDR, testGoodJson)
12{
Deepak Kodihallid0782962019-05-07 16:36:47 +053013 using namespace effecter::dbus_mapping;
George Liue53193f2020-02-24 09:23:26 +080014 pdr_utils::Repo pdrRepo = pdr::getRepoByType(
15 "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050016
17 // 2 entries
George Liue53193f2020-02-24 09:23:26 +080018 ASSERT_EQ(pdrRepo.getRecordCount(), 2);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050019
20 // Check first PDR
George Liue53193f2020-02-24 09:23:26 +080021 pdr_utils::PdrEntry e;
22 auto record1 = pdr::getRecordByHandle(pdrRepo, 1, e);
23 ASSERT_NE(record1, nullptr);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050024 pldm_state_effecter_pdr* pdr =
George Liue53193f2020-02-24 09:23:26 +080025 reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050026
27 ASSERT_EQ(pdr->hdr.record_handle, 1);
28 ASSERT_EQ(pdr->hdr.version, 1);
29 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
30 ASSERT_EQ(pdr->hdr.record_change_num, 0);
Sampa Misraa2fa0702019-05-31 01:28:55 -050031 ASSERT_EQ(pdr->hdr.length, 23);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050032
33 ASSERT_EQ(pdr->terminus_handle, 0);
34 ASSERT_EQ(pdr->effecter_id, 1);
35 ASSERT_EQ(pdr->entity_type, 33);
36 ASSERT_EQ(pdr->entity_instance, 0);
37 ASSERT_EQ(pdr->container_id, 0);
38 ASSERT_EQ(pdr->effecter_semantic_id, 0);
39 ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
40 ASSERT_EQ(pdr->has_description_pdr, false);
Sampa Misraa2fa0702019-05-31 01:28:55 -050041 ASSERT_EQ(pdr->composite_effecter_count, 2);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050042 state_effecter_possible_states* states =
43 reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
44 ASSERT_EQ(states->state_set_id, 196);
45 ASSERT_EQ(states->possible_states_size, 1);
46 bitfield8_t bf1{};
47 bf1.byte = 2;
48 ASSERT_EQ(states->states[0].byte, bf1.byte);
49
Deepak Kodihallid0782962019-05-07 16:36:47 +053050 auto paths = get(pdr->effecter_id);
51 ASSERT_EQ(paths[0], "/foo/bar");
52
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050053 // Check second PDR
George Liue53193f2020-02-24 09:23:26 +080054 auto record2 = pdr::getRecordByHandle(pdrRepo, 2, e);
55 ASSERT_NE(record2, nullptr);
56 pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050057
58 ASSERT_EQ(pdr->hdr.record_handle, 2);
59 ASSERT_EQ(pdr->hdr.version, 1);
60 ASSERT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
61 ASSERT_EQ(pdr->hdr.record_change_num, 0);
62 ASSERT_EQ(pdr->hdr.length, 24);
63
64 ASSERT_EQ(pdr->terminus_handle, 0);
65 ASSERT_EQ(pdr->effecter_id, 2);
66 ASSERT_EQ(pdr->entity_type, 100);
67 ASSERT_EQ(pdr->entity_instance, 0);
68 ASSERT_EQ(pdr->container_id, 0);
69 ASSERT_EQ(pdr->effecter_semantic_id, 0);
70 ASSERT_EQ(pdr->effecter_init, PLDM_NO_INIT);
71 ASSERT_EQ(pdr->has_description_pdr, false);
72 ASSERT_EQ(pdr->composite_effecter_count, 2);
73 states =
74 reinterpret_cast<state_effecter_possible_states*>(pdr->possible_states);
75 ASSERT_EQ(states->state_set_id, 197);
76 ASSERT_EQ(states->possible_states_size, 1);
77 bf1.byte = 2;
78 ASSERT_EQ(states->states[0].byte, bf1.byte);
79 states = reinterpret_cast<state_effecter_possible_states*>(
80 pdr->possible_states + sizeof(state_effecter_possible_states));
81 ASSERT_EQ(states->state_set_id, 198);
82 ASSERT_EQ(states->possible_states_size, 2);
83 bitfield8_t bf2[2];
84 bf2[0].byte = 38;
85 bf2[1].byte = 128;
86 ASSERT_EQ(states->states[0].byte, bf2[0].byte);
87 ASSERT_EQ(states->states[1].byte, bf2[1].byte);
Deepak Kodihallid0782962019-05-07 16:36:47 +053088
89 paths = get(pdr->effecter_id);
90 ASSERT_EQ(paths[0], "/foo/bar");
91 ASSERT_EQ(paths[1], "/foo/bar/baz");
92
93 ASSERT_THROW(get(0xDEAD), std::exception);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050094}
95
96TEST(GeneratePDR, testNoJson)
97{
George Liue53193f2020-02-24 09:23:26 +080098 ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/not_there"), std::exception);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -050099}
100
101TEST(GeneratePDR, testMalformedJson)
102{
George Liue53193f2020-02-24 09:23:26 +0800103 pdr_utils::Repo pdrRepo = pdr::getRepoByType(
104 "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
105 ASSERT_EQ(pdrRepo.getRecordCount(), 2);
106 ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/state_effecter/malformed"),
Sampa Misraaa8ae722019-12-12 03:20:40 -0600107 std::exception);
Deepak Kodihallic6e8fb52019-05-02 08:35:31 -0500108}