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