1 #include "exceptions.hpp" 2 #include "keyword_vpd_parser.hpp" 3 #include "parser.hpp" 4 #include "types.hpp" 5 6 #include <cstdint> 7 #include <exception> 8 #include <fstream> 9 10 #include <gtest/gtest.h> 11 12 using namespace vpd; 13 14 TEST(KeywordVpdParserTest, GoodTestCase) 15 { 16 types::KeywordVpdMap l_keywordMap{ 17 std::pair<std::string, types::BinaryVector>{"WI", {0x00}}, 18 std::pair<std::string, types::BinaryVector>{ 19 "FL", {0x50, 0x32, 0x20, 0x20, 0x20}}, 20 std::pair<std::string, types::BinaryVector>{ 21 "SM", 22 {0x82, 0x50, 0x32, 0x2d, 0x44, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 23 0x20, 0x32, 0x53, 0x53, 0x43, 0x81, 0x50, 0x32, 0x2d, 0x44, 0x35, 24 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43, 0x80, 25 0x50, 0x32, 0x2d, 0x44, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 26 0x32, 0x53, 0x53, 0x43, 0x83, 0x50, 0x32, 0x2d, 0x44, 0x38, 0x20, 27 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43}}, 28 std::pair<std::string, types::BinaryVector>{ 29 "B2", 30 {0x50, 0x05, 0x07, 0x60, 0x73, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 31 0x00, 0x00, 0x00, 0x01, 0x00}}, 32 std::pair<std::string, types::BinaryVector>{"MF", {0x00, 0x10}}, 33 std::pair<std::string, types::BinaryVector>{"VZ", {0x30, 0x33}}, 34 std::pair<std::string, types::BinaryVector>{ 35 "PN", {0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}}, 36 std::pair<std::string, types::BinaryVector>{ 37 "FN", {0x20, 0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}}, 38 std::pair<std::string, types::BinaryVector>{"CE", {0x31}}, 39 std::pair<std::string, types::BinaryVector>{ 40 "SN", 41 {0x59, 0x48, 0x33, 0x30, 0x42, 0x47, 0x37, 0x38, 0x42, 0x30, 0x31, 42 0x34}}, 43 std::pair<std::string, types::BinaryVector>{"CC", 44 {0x32, 0x44, 0x33, 0x37}}}; 45 46 nlohmann::json l_json; 47 std::string l_vpdFile("vpd_files/keyword.dat"); 48 Parser l_vpdParser(l_vpdFile, l_json); 49 50 ASSERT_EQ(1, std::get<types::KeywordVpdMap>(l_vpdParser.parse()) == 51 l_keywordMap); 52 } 53 54 TEST(KeywordVpdParserTest, InvalidVpd) 55 { 56 // Invalid large resource type identifier string - corrupted at index[0] 57 nlohmann::json l_json; 58 std::string l_vpdFile("vpd_files/keyword_corrupted_index_0.dat"); 59 Parser l_vpdParser(l_vpdFile, l_json); 60 61 EXPECT_THROW(l_vpdParser.parse(), DataException); 62 } 63 64 TEST(KeywordVpdParserTest, InvalidStartTag) 65 { 66 // Invalid large resource type vendor defined - corrupted at index[19] 67 nlohmann::json l_json; 68 std::string l_vpdFile("vpd_files/keyword_corrupted_index_19.dat"); 69 Parser l_vpdParser(l_vpdFile, l_json); 70 71 EXPECT_THROW(l_vpdParser.parse(), DataException); 72 } 73 74 TEST(KeywordVpdParserTest, InvalidSize) 75 { 76 // Badly formed keyword VPD data - corrupted at index[20] 77 nlohmann::json l_json; 78 std::string l_vpdFile("vpd_files/keyword_corrupted_index_20.dat"); 79 Parser l_vpdParser(l_vpdFile, l_json); 80 81 EXPECT_THROW(l_vpdParser.parse(), DataException); 82 } 83 84 TEST(KeywordVpdParserTest, InvalidEndTag) 85 { 86 // Invalid small resource type end - corrupted at index[177] 87 nlohmann::json l_json; 88 std::string l_vpdFile("vpd_files/keyword_corrupted_index_177.dat"); 89 Parser l_vpdParser(l_vpdFile, l_json); 90 91 EXPECT_THROW(l_vpdParser.parse(), DataException); 92 } 93 94 TEST(KeywordVpdParserTest, InvalidChecksum) 95 { 96 // Invalid check sum - corrupted at index[178] 97 nlohmann::json l_json; 98 std::string l_vpdFile("vpd_files/keyword_corrupted_index_178.dat"); 99 Parser l_vpdParser(l_vpdFile, l_json); 100 101 EXPECT_THROW(l_vpdParser.parse(), DataException); 102 } 103 104 TEST(KeywordVpdParserTest, InvalidLastEndTag) 105 { 106 // Invalid small resource type last end of data - corrupted at index[179] 107 nlohmann::json l_json; 108 std::string l_vpdFile("vpd_files/keyword_corrupted_index_179.dat"); 109 Parser l_vpdParser(l_vpdFile, l_json); 110 111 EXPECT_THROW(l_vpdParser.parse(), DataException); 112 } 113 114 TEST(KeywordVpdParserTest, OutOfBoundGreaterSize) 115 { 116 // Iterator out of bound - size is larger than the actual size - corrupted 117 // at index[24] 118 nlohmann::json l_json; 119 std::string l_vpdFile( 120 "vpd_files/keyword_corrupted_index_24_large_size.dat"); 121 Parser l_vpdParser(l_vpdFile, l_json); 122 123 EXPECT_THROW(l_vpdParser.parse(), DataException); 124 } 125 126 TEST(KeywordVpdParserTest, OutOfBoundLesserSize) 127 { 128 // Iterator out of bound - size is smaller than the actual size - corrupted 129 // at index[24] 130 nlohmann::json l_json; 131 std::string l_vpdFile( 132 "vpd_files/keyword_corrupted_index_24_small_size.dat"); 133 Parser l_vpdParser(l_vpdFile, l_json); 134 135 EXPECT_THROW(l_vpdParser.parse(), DataException); 136 } 137 138 TEST(KeywordVpdParserTest, EmptyInput) 139 { 140 // Blank keyword VPD 141 types::BinaryVector emptyVector{}; 142 KeywordVpdParser l_keywordParser(std::move(emptyVector)); 143 144 EXPECT_THROW(l_keywordParser.parse(), std::exception); 145 } 146