#include "vpdecc.h" #include "ddimm_parser.hpp" #include "exceptions.hpp" #include "parser.hpp" #include "types.hpp" #include #include #include #include using namespace vpd; TEST(DdimmVpdParserTest, GoodTestCase) { types::DdimmVpdMap l_ddimmMap{ std::pair{"MemorySizeInKB", 0x2000000}, std::pair{ "FN", {0x30, 0x33, 0x48, 0x44, 0x37, 0x30, 0x30}}, std::pair{ "PN", {0x30, 0x33, 0x48, 0x44, 0x37, 0x30, 0x30}}, std::pair{ "SN", {0x59, 0x48, 0x33, 0x33, 0x31, 0x54, 0x33, 0x38, 0x34, 0x30, 0x33, 0x46}}, std::pair{"CC", {0x33, 0x32, 0x41, 0x31}}, std::pair{"DI", {0x80, 0xCE}}}; nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr5_ddimm.dat"); Parser l_vpdParser(l_vpdFile, l_json); ASSERT_EQ(1, l_ddimmMap == std::get(l_vpdParser.parse())); } TEST(DdimmVpdParserTest, DDR4GoodTestCase) { types::DdimmVpdMap l_ddimmMap{ std::pair{"MemorySizeInKB", 0x4000000}, std::pair{ "FN", {0x37, 0x38, 0x50, 0x36, 0x35, 0x37, 0x35}}, std::pair{ "PN", {0x37, 0x38, 0x50, 0x36, 0x35, 0x37, 0x35}}, std::pair{ "SN", {0x59, 0x48, 0x33, 0x35, 0x31, 0x54, 0x31, 0x35, 0x53, 0x30, 0x44, 0x35}}, std::pair{"CC", {0x33, 0x32, 0x37, 0x42}}, std::pair{"DI", {0x80, 0xAD}}}; nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr4_ddimm.dat"); Parser l_vpdParser(l_vpdFile, l_json); ASSERT_EQ(1, l_ddimmMap == std::get(l_vpdParser.parse())); } TEST(DdimmVpdParserTest, InvalidDdrType) { // Invalid DDR type, corrupted at index[2] nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_2.dat"); Parser l_vpdParser(l_vpdFile, l_json); EXPECT_THROW(l_vpdParser.parse(), std::exception); } TEST(DdimmVpdParserTest, ZeroDdimmSize) { // Badly formed DDIMM VPD data - corrupted at index[235], // ddimm size calculated a zero nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_235.dat"); Parser l_vpdParser(l_vpdFile, l_json); EXPECT_THROW(l_vpdParser.parse(), std::exception); } TEST(DdimmVpdParserTest, InvalidDensityPerDie) { // Out of range data, fails to check valid value - corrupted at index[4] nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_4.dat"); Parser l_vpdParser(l_vpdFile, l_json); EXPECT_THROW(l_vpdParser.parse(), std::exception); } TEST(DdimmVpdParserTest, InvalidVpdType) { // Invalid VPD type - corrupted at index[2] & index[3] // Not able to find the VPD type, vpdTypeCheck failed nlohmann::json l_json; std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_2_3.dat"); Parser l_vpdParser(l_vpdFile, l_json); EXPECT_THROW(l_vpdParser.parse(), std::exception); } TEST(DdimmVpdParserTest, EmptyInputVector) { // Blank VPD types::BinaryVector emptyVector{}; EXPECT_THROW(DdimmVpdParser(std::move(emptyVector)), DataException); } int main(int i_argc, char** io_argv) { ::testing::InitGoogleTest(&i_argc, io_argv); return RUN_ALL_TESTS(); }