blob: 2f230609df8848e6fd1d090af5fdd93e56cce3ea [file] [log] [blame]
Sunny Srivastavafa5e4d32023-03-12 11:59:49 -05001#include "ipz_parser.hpp"
2#include "parser.hpp"
3
4#include <exception>
5
6#include <gtest/gtest.h>
7
8TEST(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
64TEST(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
73TEST(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
83TEST(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
93TEST(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
104TEST(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
115TEST(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
126TEST(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