| #include "extensions/openpower-pels/paths.hpp" |
| |
| #include <filesystem> |
| #include <memory> |
| #include <vector> |
| |
| #include <gtest/gtest.h> |
| |
| /** |
| * @brief Test fixture to remove the pelID file that PELs use. |
| */ |
| class CleanLogID : public ::testing::Test |
| { |
| protected: |
| static void SetUpTestCase() |
| { |
| pelIDFile = openpower::pels::getPELIDFile(); |
| } |
| |
| static void TearDownTestCase() |
| { |
| std::filesystem::remove_all( |
| std::filesystem::path{pelIDFile}.parent_path()); |
| } |
| |
| static std::filesystem::path pelIDFile; |
| }; |
| |
| class CleanPELFiles : public ::testing::Test |
| { |
| protected: |
| void SetUp() override |
| { |
| pelIDFile = openpower::pels::getPELIDFile(); |
| repoPath = openpower::pels::getPELRepoPath(); |
| registryPath = openpower::pels::getPELReadOnlyDataPath(); |
| } |
| |
| void TearDown() override |
| { |
| std::filesystem::remove_all( |
| std::filesystem::path{pelIDFile}.parent_path()); |
| std::filesystem::remove_all(repoPath); |
| std::filesystem::remove_all(registryPath); |
| } |
| |
| static std::filesystem::path pelIDFile; |
| static std::filesystem::path repoPath; |
| static std::filesystem::path registryPath; |
| }; |
| |
| /** |
| * @brief Tells the factory which PEL to create |
| */ |
| enum class TestPELType |
| { |
| pelSimple, |
| privateHeaderSection, |
| userHeaderSection, |
| primarySRCSection, |
| primarySRCSection2Callouts, |
| failingMTMSSection, |
| extendedUserDataSection |
| }; |
| |
| /** |
| * @brief Tells the SRC factory which data to create |
| */ |
| enum class TestSRCType |
| { |
| fruIdentityStructure, |
| pceIdentityStructure, |
| mruStructure, |
| calloutStructureA, |
| calloutStructureB, |
| calloutSection2Callouts |
| }; |
| |
| /** |
| * @brief PEL data factory, for testing |
| * |
| * @param[in] type - the type of data to create |
| * |
| * @return std::vector<uint8_t> - the PEL data |
| */ |
| std::vector<uint8_t> pelDataFactory(TestPELType type); |
| |
| /** |
| * @brief PEL factory to create a PEL with the specified fields. |
| * |
| * The size is obtained by adding a UserData section of |
| * the size necessary after adding the 5 required sections. |
| * |
| * @param[in] id - The desired PEL ID |
| * @param[in] creatorID - The desired creator ID |
| * @param[in] severity - The desired severity |
| * @param[in] actionFlags - The desired action flags |
| * @param[in] size - The desired size. |
| * Must be: |
| * * 4B aligned |
| * * min 276 (size of the 5 required sections) |
| * * max 16834 |
| * |
| * @return std::vector<uint8_t> - The PEL data |
| */ |
| std::vector<uint8_t> pelFactory(uint32_t id, char creatorID, uint8_t severity, |
| uint16_t actionFlags, size_t size); |
| |
| /** |
| * @brief SRC data factory, for testing |
| * |
| * Provides pieces of the SRC PEL section, such as a callout. |
| * |
| * @param[in] type - the type of data to create |
| * |
| * @return std::vector<uint8_t> - The SRC data |
| */ |
| std::vector<uint8_t> srcDataFactory(TestSRCType type); |
| |
| /** |
| * @brief Helper function to read raw PEL data from a file |
| * |
| * @param[in] path - the path to read |
| * |
| * @return std::unique_ptr<std::vector<uint8_t>> - the data from the file |
| */ |
| std::unique_ptr<std::vector<uint8_t>> |
| readPELFile(const std::filesystem::path& path); |