#include "editor_impl.hpp" #include "ipz_parser.hpp" #include #include #include #include using namespace openpower::vpd; using namespace openpower::vpd::manager::editor; using namespace openpower::vpd::inventory; using namespace openpower::vpd::constants; class vpdManagerEditorTest : public ::testing::Test { protected: Binary vpd; nlohmann::json jsonFile; // map to hold the mapping of location code and inventory path inventory::LocationCodeMap fruLocationCode; public: // constructor vpdManagerEditorTest() { processJson(); } void processJson(); void readFile(std::string pathToFile); }; void vpdManagerEditorTest::readFile(std::string pathToFile) { // read the json file and parse it std::ifstream vpdFile(pathToFile, std::ios::binary); if (!vpdFile) { throw std::runtime_error("json file not found"); } vpd.assign((std::istreambuf_iterator(vpdFile)), std::istreambuf_iterator()); } void vpdManagerEditorTest::processJson() { // read the json file and parse it std::ifstream json("vpd-manager-test/vpd_editor_test.json", std::ios::binary); if (!json) { throw std::runtime_error("json file not found"); } jsonFile = nlohmann::json::parse(json); const nlohmann::json& groupFRUS = jsonFile["frus"].get_ref(); for (const auto& itemFRUS : groupFRUS.items()) { const std::vector& groupEEPROM = itemFRUS.value().get_ref(); for (const auto& itemEEPROM : groupEEPROM) { fruLocationCode.emplace( itemEEPROM["extraInterfaces"][IBM_LOCATION_CODE_INF] ["LocationCode"] .get_ref(), itemEEPROM["inventoryPath"] .get_ref()); } } } TEST_F(vpdManagerEditorTest, InvalidFile) { Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y', 'D', 'A', 'T', 'A', 'O', 'K'}; Binary emptyVpdFile; try { // Invalid kwd name EditorImpl edit("VINI", "SN", std::move(emptyVpdFile)); edit.updateKeyword(dataToUodate, true); } catch (const std::exception& e) { EXPECT_EQ(std::string(e.what()), std::string("Invalid File")); } } TEST_F(vpdManagerEditorTest, InvalidHeader) { Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y', 'D', 'A', 'T', 'A', 'O', 'K'}; readFile("vpd-manager-test/invalidHeaderFile.dat"); try { // the path is dummy EditorImpl edit("VINI", "SN", std::move(vpd)); edit.updateKeyword(dataToUodate, true); } catch (const std::exception& e) { EXPECT_EQ(std::string(e.what()), std::string("VHDR record not found")); } } TEST_F(vpdManagerEditorTest, InvalidRecordName) { Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y', 'D', 'A', 'T', 'A', 'O', 'K'}; readFile("vpd-manager-test/vpdFile.dat"); try { // Invalid record name "VIN", path is dummy EditorImpl edit("VIN", "SN", std::move(vpd)); edit.updateKeyword(dataToUodate, true); } catch (const std::exception& e) { EXPECT_EQ(std::string(e.what()), std::string("Record not found")); } } TEST_F(vpdManagerEditorTest, InvalidKWdName) { Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y', 'D', 'A', 'T', 'A', 'O', 'K'}; readFile("vpd-manager-test/vpdFile.dat"); try { // All valid data EditorImpl edit("VINI", "Sn", std::move(vpd)); edit.updateKeyword(dataToUodate, true); } catch (std::runtime_error& e) { EXPECT_EQ(std::string(e.what()), std::string("Keyword not found")); } } TEST_F(vpdManagerEditorTest, UpdateKwd_Success) { Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y', 'D', 'A', 'T', 'A', 'O', 'K'}; readFile("vpd-manager-test/vpdFile.dat"); try { // All valid data EditorImpl edit("VINI", "SN", std::move(vpd)); edit.updateKeyword(dataToUodate, true); } catch (std::runtime_error& e) { EXPECT_EQ(std::string(e.what()), std::string("Data updated successfully")); } } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }