1*fa5e4d32SSunny Srivastava #include "ipz_parser.hpp"
2*fa5e4d32SSunny Srivastava #include "parser.hpp"
3*fa5e4d32SSunny Srivastava
4*fa5e4d32SSunny Srivastava #include <exception>
5*fa5e4d32SSunny Srivastava
6*fa5e4d32SSunny Srivastava #include <gtest/gtest.h>
7*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,GoodTestCase)8*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, GoodTestCase)
9*fa5e4d32SSunny Srivastava {
10*fa5e4d32SSunny Srivastava nlohmann::json l_json;
11*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system.dat");
12*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
13*fa5e4d32SSunny Srivastava
14*fa5e4d32SSunny Srivastava vpd::types::IPZVpdMap l_ipzVpdMap;
15*fa5e4d32SSunny Srivastava auto l_parsedMap = l_vpdParser.parse();
16*fa5e4d32SSunny Srivastava if (auto l_ipzVpdMapPtr = std::get_if<vpd::types::IPZVpdMap>(&l_parsedMap))
17*fa5e4d32SSunny Srivastava l_ipzVpdMap = *l_ipzVpdMapPtr;
18*fa5e4d32SSunny Srivastava
19*fa5e4d32SSunny Srivastava std::string l_record("VINI");
20*fa5e4d32SSunny Srivastava std::string l_keyword("DR");
21*fa5e4d32SSunny Srivastava std::string l_description;
22*fa5e4d32SSunny Srivastava
23*fa5e4d32SSunny Srivastava // check 'DR' keyword value from 'VINI' record
24*fa5e4d32SSunny Srivastava auto l_vpdItr = l_ipzVpdMap.find(l_record);
25*fa5e4d32SSunny Srivastava if (l_ipzVpdMap.end() != l_vpdItr)
26*fa5e4d32SSunny Srivastava {
27*fa5e4d32SSunny Srivastava auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
28*fa5e4d32SSunny Srivastava if ((l_vpdItr->second).end() != l_kwValItr)
29*fa5e4d32SSunny Srivastava {
30*fa5e4d32SSunny Srivastava l_description = l_kwValItr->second;
31*fa5e4d32SSunny Srivastava }
32*fa5e4d32SSunny Srivastava }
33*fa5e4d32SSunny Srivastava EXPECT_EQ(l_description, "SYSTEM BACKPLANE");
34*fa5e4d32SSunny Srivastava
35*fa5e4d32SSunny Srivastava // check 'SN' keyword value from 'VINI' record
36*fa5e4d32SSunny Srivastava l_record = "VINI";
37*fa5e4d32SSunny Srivastava l_keyword = "SN";
38*fa5e4d32SSunny Srivastava l_vpdItr = l_ipzVpdMap.find(l_record);
39*fa5e4d32SSunny Srivastava if (l_ipzVpdMap.end() != l_vpdItr)
40*fa5e4d32SSunny Srivastava {
41*fa5e4d32SSunny Srivastava auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
42*fa5e4d32SSunny Srivastava if ((l_vpdItr->second).end() != l_kwValItr)
43*fa5e4d32SSunny Srivastava {
44*fa5e4d32SSunny Srivastava l_description = l_kwValItr->second;
45*fa5e4d32SSunny Srivastava }
46*fa5e4d32SSunny Srivastava }
47*fa5e4d32SSunny Srivastava EXPECT_EQ(l_description, "Y131UF07300L");
48*fa5e4d32SSunny Srivastava
49*fa5e4d32SSunny Srivastava // check 'DR' keyword value of 'VSYS' record
50*fa5e4d32SSunny Srivastava l_record = "VSYS";
51*fa5e4d32SSunny Srivastava l_keyword = "DR";
52*fa5e4d32SSunny Srivastava l_vpdItr = l_ipzVpdMap.find(l_record);
53*fa5e4d32SSunny Srivastava if (l_ipzVpdMap.end() != l_vpdItr)
54*fa5e4d32SSunny Srivastava {
55*fa5e4d32SSunny Srivastava auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
56*fa5e4d32SSunny Srivastava if ((l_vpdItr->second).end() != l_kwValItr)
57*fa5e4d32SSunny Srivastava {
58*fa5e4d32SSunny Srivastava l_description = l_kwValItr->second;
59*fa5e4d32SSunny Srivastava }
60*fa5e4d32SSunny Srivastava }
61*fa5e4d32SSunny Srivastava ASSERT_EQ(l_description, "SYSTEM");
62*fa5e4d32SSunny Srivastava }
63*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,VpdFileDoesNotExist)64*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, VpdFileDoesNotExist)
65*fa5e4d32SSunny Srivastava {
66*fa5e4d32SSunny Srivastava // Vpd file does not exist
67*fa5e4d32SSunny Srivastava nlohmann::json l_json;
68*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/xyz.dat");
69*fa5e4d32SSunny Srivastava
70*fa5e4d32SSunny Srivastava EXPECT_THROW(vpd::Parser(l_vpdFile, l_json), std::runtime_error);
71*fa5e4d32SSunny Srivastava }
72*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,MissingHeader)73*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, MissingHeader)
74*fa5e4d32SSunny Srivastava {
75*fa5e4d32SSunny Srivastava // Missing VHDR tag, failed header check - corrupted at index[17]
76*fa5e4d32SSunny Srivastava nlohmann::json l_json;
77*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_17.dat");
78*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
79*fa5e4d32SSunny Srivastava
80*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
81*fa5e4d32SSunny Srivastava }
82*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,MissingVtoc)83*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, MissingVtoc)
84*fa5e4d32SSunny Srivastava {
85*fa5e4d32SSunny Srivastava // Missing VTOC tag - corrupted at index[61]
86*fa5e4d32SSunny Srivastava nlohmann::json l_json;
87*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_61.dat");
88*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
89*fa5e4d32SSunny Srivastava
90*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
91*fa5e4d32SSunny Srivastava }
92*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,MalformedVpdFile)93*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, MalformedVpdFile)
94*fa5e4d32SSunny Srivastava {
95*fa5e4d32SSunny Srivastava // Vpd vector size is less than RECORD_MIN(44), fails for checkHeader
96*fa5e4d32SSunny Srivastava nlohmann::json l_json;
97*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_min_record.dat");
98*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
99*fa5e4d32SSunny Srivastava
100*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
101*fa5e4d32SSunny Srivastava }
102*fa5e4d32SSunny Srivastava
103*fa5e4d32SSunny Srivastava #ifdef IPZ_ECC_CHECK
TEST(IpzVpdParserTest,InvalidRecordOffset)104*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, InvalidRecordOffset)
105*fa5e4d32SSunny Srivastava {
106*fa5e4d32SSunny Srivastava // VTOC ECC check fail
107*fa5e4d32SSunny Srivastava // Invalid VINI Record offset, corrupted at index[74]
108*fa5e4d32SSunny Srivastava nlohmann::json l_json;
109*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_74.dat");
110*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
111*fa5e4d32SSunny Srivastava
112*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
113*fa5e4d32SSunny Srivastava }
114*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,InvalidRecordEccOffset)115*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, InvalidRecordEccOffset)
116*fa5e4d32SSunny Srivastava {
117*fa5e4d32SSunny Srivastava // VTOC ECC check fail
118*fa5e4d32SSunny Srivastava // Invalid VINI Record ECC offset, corrupted at index[78] & index[79]
119*fa5e4d32SSunny Srivastava nlohmann::json l_json;
120*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_78_79.dat");
121*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
122*fa5e4d32SSunny Srivastava
123*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
124*fa5e4d32SSunny Srivastava }
125*fa5e4d32SSunny Srivastava
TEST(IpzVpdParserTest,TruncatedVpdFile)126*fa5e4d32SSunny Srivastava TEST(IpzVpdParserTest, TruncatedVpdFile)
127*fa5e4d32SSunny Srivastava {
128*fa5e4d32SSunny Srivastava // Truncated vpd file, VTOC ECC check fail
129*fa5e4d32SSunny Srivastava nlohmann::json l_json;
130*fa5e4d32SSunny Srivastava std::string l_vpdFile("vpd_files/ipz_system_truncated.dat");
131*fa5e4d32SSunny Srivastava vpd::Parser l_vpdParser(l_vpdFile, l_json);
132*fa5e4d32SSunny Srivastava
133*fa5e4d32SSunny Srivastava EXPECT_THROW(l_vpdParser.parse(), std::exception);
134*fa5e4d32SSunny Srivastava }
135*fa5e4d32SSunny Srivastava #endif
136