blob: 2f230609df8848e6fd1d090af5fdd93e56cce3ea [file] [log] [blame] [edit]
#include "ipz_parser.hpp"
#include "parser.hpp"
#include <exception>
#include <gtest/gtest.h>
TEST(IpzVpdParserTest, GoodTestCase)
{
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
vpd::types::IPZVpdMap l_ipzVpdMap;
auto l_parsedMap = l_vpdParser.parse();
if (auto l_ipzVpdMapPtr = std::get_if<vpd::types::IPZVpdMap>(&l_parsedMap))
l_ipzVpdMap = *l_ipzVpdMapPtr;
std::string l_record("VINI");
std::string l_keyword("DR");
std::string l_description;
// check 'DR' keyword value from 'VINI' record
auto l_vpdItr = l_ipzVpdMap.find(l_record);
if (l_ipzVpdMap.end() != l_vpdItr)
{
auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
if ((l_vpdItr->second).end() != l_kwValItr)
{
l_description = l_kwValItr->second;
}
}
EXPECT_EQ(l_description, "SYSTEM BACKPLANE");
// check 'SN' keyword value from 'VINI' record
l_record = "VINI";
l_keyword = "SN";
l_vpdItr = l_ipzVpdMap.find(l_record);
if (l_ipzVpdMap.end() != l_vpdItr)
{
auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
if ((l_vpdItr->second).end() != l_kwValItr)
{
l_description = l_kwValItr->second;
}
}
EXPECT_EQ(l_description, "Y131UF07300L");
// check 'DR' keyword value of 'VSYS' record
l_record = "VSYS";
l_keyword = "DR";
l_vpdItr = l_ipzVpdMap.find(l_record);
if (l_ipzVpdMap.end() != l_vpdItr)
{
auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
if ((l_vpdItr->second).end() != l_kwValItr)
{
l_description = l_kwValItr->second;
}
}
ASSERT_EQ(l_description, "SYSTEM");
}
TEST(IpzVpdParserTest, VpdFileDoesNotExist)
{
// Vpd file does not exist
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/xyz.dat");
EXPECT_THROW(vpd::Parser(l_vpdFile, l_json), std::runtime_error);
}
TEST(IpzVpdParserTest, MissingHeader)
{
// Missing VHDR tag, failed header check - corrupted at index[17]
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_17.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
TEST(IpzVpdParserTest, MissingVtoc)
{
// Missing VTOC tag - corrupted at index[61]
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_61.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
TEST(IpzVpdParserTest, MalformedVpdFile)
{
// Vpd vector size is less than RECORD_MIN(44), fails for checkHeader
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_min_record.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
#ifdef IPZ_ECC_CHECK
TEST(IpzVpdParserTest, InvalidRecordOffset)
{
// VTOC ECC check fail
// Invalid VINI Record offset, corrupted at index[74]
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_74.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
TEST(IpzVpdParserTest, InvalidRecordEccOffset)
{
// VTOC ECC check fail
// Invalid VINI Record ECC offset, corrupted at index[78] & index[79]
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_78_79.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
TEST(IpzVpdParserTest, TruncatedVpdFile)
{
// Truncated vpd file, VTOC ECC check fail
nlohmann::json l_json;
std::string l_vpdFile("vpd_files/ipz_system_truncated.dat");
vpd::Parser l_vpdParser(l_vpdFile, l_json);
EXPECT_THROW(l_vpdParser.parse(), std::exception);
}
#endif