1abb87edaSPriyangaRamasamy #include "keyword_vpd_parser.hpp"
2e12b181bSSunnySrivastava1984 #include "store.hpp"
3945a02d3SSunnySrivastava1984 #include "types.hpp"
4abb87edaSPriyangaRamasamy
5abb87edaSPriyangaRamasamy #include <exception>
6abb87edaSPriyangaRamasamy #include <fstream>
7abb87edaSPriyangaRamasamy
8abb87edaSPriyangaRamasamy #include <gtest/gtest.h>
9abb87edaSPriyangaRamasamy
10abb87edaSPriyangaRamasamy using namespace vpd::keyword::parser;
11945a02d3SSunnySrivastava1984 using namespace openpower::vpd;
12945a02d3SSunnySrivastava1984 using namespace openpower::vpd::inventory;
13e12b181bSSunnySrivastava1984 using namespace std;
14abb87edaSPriyangaRamasamy
15abb87edaSPriyangaRamasamy class KeywordVpdParserTest : public ::testing::Test
16abb87edaSPriyangaRamasamy {
17abb87edaSPriyangaRamasamy protected:
18abb87edaSPriyangaRamasamy Binary keywordVpdVector;
19abb87edaSPriyangaRamasamy Binary bonoKwVpdVector;
20abb87edaSPriyangaRamasamy
KeywordVpdParserTest()21abb87edaSPriyangaRamasamy KeywordVpdParserTest()
22abb87edaSPriyangaRamasamy {
23abb87edaSPriyangaRamasamy // Open the kw VPD file in binary mode
24abb87edaSPriyangaRamasamy std::ifstream kwVpdFile("vpd.dat", std::ios::binary);
25abb87edaSPriyangaRamasamy
26abb87edaSPriyangaRamasamy // Read the content of the binary file into a vector
27abb87edaSPriyangaRamasamy keywordVpdVector.assign((std::istreambuf_iterator<char>(kwVpdFile)),
28abb87edaSPriyangaRamasamy std::istreambuf_iterator<char>());
29abb87edaSPriyangaRamasamy // Open the BONO type kw VPD file in binary mode
30abb87edaSPriyangaRamasamy std::ifstream bonoKwVpdFile("bono.vpd", std::ios::binary);
31abb87edaSPriyangaRamasamy
32abb87edaSPriyangaRamasamy // Read the content of the binary file into a vector
33abb87edaSPriyangaRamasamy bonoKwVpdVector.assign((std::istreambuf_iterator<char>(bonoKwVpdFile)),
34abb87edaSPriyangaRamasamy std::istreambuf_iterator<char>());
35abb87edaSPriyangaRamasamy }
36abb87edaSPriyangaRamasamy };
37abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,GoodTestCase)38abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, GoodTestCase)
39abb87edaSPriyangaRamasamy {
40abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
41*3ab26a74SAlpana Kumari KeywordVpdMap map1{
42*3ab26a74SAlpana Kumari pair<std::string, Binary>{"WI", {0x00}},
43*3ab26a74SAlpana Kumari pair<std::string, Binary>{"FL", {0x50, 0x32, 0x20, 0x20, 0x20}},
44*3ab26a74SAlpana Kumari pair<std::string, Binary>{
45*3ab26a74SAlpana Kumari "SM",
46abb87edaSPriyangaRamasamy {0x82, 0x50, 0x32, 0x2d, 0x44, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20,
47abb87edaSPriyangaRamasamy 0x20, 0x32, 0x53, 0x53, 0x43, 0x81, 0x50, 0x32, 0x2d, 0x44, 0x35,
48abb87edaSPriyangaRamasamy 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43, 0x80,
49abb87edaSPriyangaRamasamy 0x50, 0x32, 0x2d, 0x44, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
50abb87edaSPriyangaRamasamy 0x32, 0x53, 0x53, 0x43, 0x83, 0x50, 0x32, 0x2d, 0x44, 0x38, 0x20,
51abb87edaSPriyangaRamasamy 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43}},
52*3ab26a74SAlpana Kumari pair<std::string, Binary>{"B2",
53*3ab26a74SAlpana Kumari {0x50, 0x05, 0x07, 0x60, 0x73, 0x00, 0x72,
54*3ab26a74SAlpana Kumari 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55*3ab26a74SAlpana Kumari 0x01, 0x00}},
56*3ab26a74SAlpana Kumari pair<std::string, Binary>{"MF", {0x00, 0x10}},
57*3ab26a74SAlpana Kumari pair<std::string, Binary>{"VZ", {0x30, 0x33}},
58*3ab26a74SAlpana Kumari pair<std::string, Binary>{"PN",
59*3ab26a74SAlpana Kumari {0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
60*3ab26a74SAlpana Kumari pair<std::string, Binary>{
61*3ab26a74SAlpana Kumari "FN", {0x20, 0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
62*3ab26a74SAlpana Kumari pair<std::string, Binary>{"CE", {0x31}},
63*3ab26a74SAlpana Kumari pair<std::string, Binary>{"SN",
64*3ab26a74SAlpana Kumari {0x59, 0x48, 0x33, 0x30, 0x42, 0x47, 0x37,
65*3ab26a74SAlpana Kumari 0x38, 0x42, 0x30, 0x31, 0x34}},
66*3ab26a74SAlpana Kumari pair<std::string, Binary>{"CC", {0x32, 0x44, 0x33, 0x37}}};
67abb87edaSPriyangaRamasamy
68e12b181bSSunnySrivastava1984 auto map2 = std::move(get<KeywordVpdMap>(parserObj1.parse()));
69abb87edaSPriyangaRamasamy ASSERT_EQ(1, map1 == map2);
70abb87edaSPriyangaRamasamy
71abb87edaSPriyangaRamasamy // BONO TYPE VPD
72abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
73*3ab26a74SAlpana Kumari map1 = {
74*3ab26a74SAlpana Kumari pair<std::string, Binary>{"B2",
75*3ab26a74SAlpana Kumari {0x50, 0x0, 0xb3, 0xe0, 0x90, 0x0, 0x2, 0x50,
76*3ab26a74SAlpana Kumari 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}},
77*3ab26a74SAlpana Kumari pair<std::string, Binary>{"CC", {0x35, 0x39, 0x33, 0x42}},
78*3ab26a74SAlpana Kumari pair<std::string, Binary>{"CT", {0x50, 0x37, 0x32, 0x0}},
79*3ab26a74SAlpana Kumari pair<std::string, Binary>{"EC", {0x50, 0x34, 0x35, 0x35, 0x33, 0x37}},
80*3ab26a74SAlpana Kumari pair<std::string, Binary>{"FN",
81*3ab26a74SAlpana Kumari {0x30, 0x32, 0x44, 0x45, 0x33, 0x36, 0x35}},
82*3ab26a74SAlpana Kumari pair<std::string, Binary>{"PN",
83*3ab26a74SAlpana Kumari {0x30, 0x32, 0x44, 0x45, 0x33, 0x36, 0x36}},
84*3ab26a74SAlpana Kumari pair<std::string, Binary>{"RV", {0xa1}},
85*3ab26a74SAlpana Kumari pair<std::string, Binary>{
86*3ab26a74SAlpana Kumari "SI", {0x31, 0x30, 0x31, 0x34, 0x30, 0x36, 0x37, 0x34}},
87*3ab26a74SAlpana Kumari pair<std::string, Binary>{"SN",
88*3ab26a74SAlpana Kumari {0x59, 0x4c, 0x35, 0x30, 0x48, 0x54, 0x39,
89*3ab26a74SAlpana Kumari 0x36, 0x4a, 0x30, 0x30, 0x38}},
90*3ab26a74SAlpana Kumari pair<std::string, Binary>{"Z4", {0x30}},
91*3ab26a74SAlpana Kumari pair<std::string, Binary>{"Z5", {0x30}},
92*3ab26a74SAlpana Kumari pair<std::string, Binary>{
93*3ab26a74SAlpana Kumari "Z6", {0x41, 0x31, 0x38, 0x30, 0x30, 0x32, 0x30, 0x30}}};
94abb87edaSPriyangaRamasamy
95e12b181bSSunnySrivastava1984 map2 = std::move(get<KeywordVpdMap>(parserObj2.parse()));
96abb87edaSPriyangaRamasamy ASSERT_EQ(1, map1 == map2);
97abb87edaSPriyangaRamasamy }
98abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvKwVpdTag)99abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvKwVpdTag)
100abb87edaSPriyangaRamasamy {
101abb87edaSPriyangaRamasamy // Invalid Large resource type Identifier String - corrupted at index[0]
102abb87edaSPriyangaRamasamy keywordVpdVector[0] = 0x83;
103abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
104e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
105abb87edaSPriyangaRamasamy
106abb87edaSPriyangaRamasamy // For BONO type VPD
107abb87edaSPriyangaRamasamy bonoKwVpdVector[0] = 0x83;
108abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
109e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
110abb87edaSPriyangaRamasamy }
111abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvKwValTag)112abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvKwValTag)
113abb87edaSPriyangaRamasamy {
114abb87edaSPriyangaRamasamy // Invalid Large resource type Vendor Defined - corrupted at index[19]
115abb87edaSPriyangaRamasamy keywordVpdVector[19] = 0x85;
116abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
117e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
118abb87edaSPriyangaRamasamy
119abb87edaSPriyangaRamasamy // For BONO type VPD - corruputed at index[33]
120abb87edaSPriyangaRamasamy bonoKwVpdVector[33] = 0x91;
121abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
122e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
123abb87edaSPriyangaRamasamy }
124abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvKwValSize)125abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvKwValSize)
126abb87edaSPriyangaRamasamy {
127abb87edaSPriyangaRamasamy // Badly formed keyword VPD data - corrupted at index[20]
128abb87edaSPriyangaRamasamy keywordVpdVector[20] = 0x00;
129abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
130e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
131abb87edaSPriyangaRamasamy
132abb87edaSPriyangaRamasamy // For BONO type VPD - corruputed at index[34]
133abb87edaSPriyangaRamasamy bonoKwVpdVector[34] = 0x00;
134abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
135e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
136abb87edaSPriyangaRamasamy }
137abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvKwValEndTag)138abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvKwValEndTag)
139abb87edaSPriyangaRamasamy {
140abb87edaSPriyangaRamasamy // Invalid Small resource type End - corrupted at index[177]
141abb87edaSPriyangaRamasamy keywordVpdVector[177] = 0x80;
142abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
143e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
144abb87edaSPriyangaRamasamy }
145abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvChecksum)146abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvChecksum)
147abb87edaSPriyangaRamasamy {
148abb87edaSPriyangaRamasamy // Invalid Check sum - corrupted at index[178]
149abb87edaSPriyangaRamasamy keywordVpdVector[178] = 0xb1;
150abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
151e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
152abb87edaSPriyangaRamasamy }
153abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,InvKwVpdEndTag)154abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, InvKwVpdEndTag)
155abb87edaSPriyangaRamasamy {
156abb87edaSPriyangaRamasamy // Invalid Small resource type Last End Of Data - corrupted at index[179]
157abb87edaSPriyangaRamasamy keywordVpdVector[179] = 0x79;
158abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
159e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
160abb87edaSPriyangaRamasamy
161abb87edaSPriyangaRamasamy // For BONO type VPD - corrupted at index[147]
162abb87edaSPriyangaRamasamy bonoKwVpdVector[147] = 0x79;
163abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
164e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
165abb87edaSPriyangaRamasamy }
166abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,OutOfBoundGreaterSize)167abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, OutOfBoundGreaterSize)
168abb87edaSPriyangaRamasamy {
169abb87edaSPriyangaRamasamy // Iterator Out of Bound - size is larger than the actual size - corrupted
170abb87edaSPriyangaRamasamy // at index[24]
171abb87edaSPriyangaRamasamy keywordVpdVector[24] = 0x32;
172abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
173e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
174abb87edaSPriyangaRamasamy
175abb87edaSPriyangaRamasamy // For BONO type VPD - corrupted at index[38]
176abb87edaSPriyangaRamasamy bonoKwVpdVector[38] = 0x4D;
177abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
178e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
179abb87edaSPriyangaRamasamy }
180abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,OutOfBoundLesserSize)181abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, OutOfBoundLesserSize)
182abb87edaSPriyangaRamasamy {
183abb87edaSPriyangaRamasamy // Iterator Out of Bound - size is smaller than the actual size - corrupted
184abb87edaSPriyangaRamasamy // at index[24]
185abb87edaSPriyangaRamasamy keywordVpdVector[24] = 0x03;
186abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
187e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
188abb87edaSPriyangaRamasamy
189abb87edaSPriyangaRamasamy // For BONO type VPD - corrupted at index[38]
190abb87edaSPriyangaRamasamy bonoKwVpdVector[38] = 0x04;
191abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
192e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
193abb87edaSPriyangaRamasamy }
194abb87edaSPriyangaRamasamy
TEST_F(KeywordVpdParserTest,BlankVpd)195abb87edaSPriyangaRamasamy TEST_F(KeywordVpdParserTest, BlankVpd)
196abb87edaSPriyangaRamasamy {
197abb87edaSPriyangaRamasamy // Blank Kw Vpd
198abb87edaSPriyangaRamasamy keywordVpdVector.clear();
199abb87edaSPriyangaRamasamy KeywordVpdParser parserObj1(std::move(keywordVpdVector));
200e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj1.parse(), std::runtime_error);
201abb87edaSPriyangaRamasamy
202abb87edaSPriyangaRamasamy // Blank Bono Type Vpd
203abb87edaSPriyangaRamasamy bonoKwVpdVector.clear();
204abb87edaSPriyangaRamasamy KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
205e12b181bSSunnySrivastava1984 EXPECT_THROW(parserObj2.parse(), std::runtime_error);
206abb87edaSPriyangaRamasamy }
207abb87edaSPriyangaRamasamy
main(int argc,char ** argv)208abb87edaSPriyangaRamasamy int main(int argc, char** argv)
209abb87edaSPriyangaRamasamy {
210abb87edaSPriyangaRamasamy ::testing::InitGoogleTest(&argc, argv);
211abb87edaSPriyangaRamasamy
212abb87edaSPriyangaRamasamy return RUN_ALL_TESTS();
213abb87edaSPriyangaRamasamy }
214