From df13bdb6e1423b25e7b737f4bf431af3d5c08d8b Mon Sep 17 00:00:00 2001 From: Matt Spinler Date: Wed, 10 Jul 2019 16:54:13 -0500 Subject: PEL: Add function to generate unique PEL IDs Create generatePELID() to return a unique 4B PEL ID every time it is called. It will start at a base value, and then increment by 1 each time. It uses a file to save the next value to use. This will be used by the PEL handling code to create unique values for the error log ID field in the Private Header section. Signed-off-by: Matt Spinler Change-Id: I841a8dcc5dc48e2b663004be3dccfb114ba366f2 --- test/openpower-pels/Makefile.include | 10 +++++++++ test/openpower-pels/log_id_test.cpp | 42 ++++++++++++++++++++++++++++++++++++ test/openpower-pels/paths.cpp | 26 ++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 test/openpower-pels/log_id_test.cpp create mode 100644 test/openpower-pels/paths.cpp (limited to 'test/openpower-pels') diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include index f860db2..0e0257c 100644 --- a/test/openpower-pels/Makefile.include +++ b/test/openpower-pels/Makefile.include @@ -3,6 +3,7 @@ TESTS += $(check_PROGRAMS) check_PROGRAMS += \ additional_data_test \ bcd_time_test \ + log_id_test \ private_header_test \ section_header_test \ stream_test \ @@ -58,3 +59,12 @@ user_header_test_LDADD = \ $(test_ldadd) \ $(pel_objects) user_header_test_LDFLAGS = $(test_ldflags) + +log_id_test_SOURCES = \ + %reldir%/log_id_test.cpp %reldir%/paths.cpp +log_id_test_CPPFLAGS = $(test_cppflags) +log_id_test_CXXFLAGS = $(test_cxxflags) +log_id_test_LDADD = \ + $(test_ldadd) \ + $(top_builddir)/extensions/openpower-pels/log_id.o +log_id_test_LDFLAGS = $(test_ldflags) diff --git a/test/openpower-pels/log_id_test.cpp b/test/openpower-pels/log_id_test.cpp new file mode 100644 index 0000000..e5f2632 --- /dev/null +++ b/test/openpower-pels/log_id_test.cpp @@ -0,0 +1,42 @@ +#include "extensions/openpower-pels/log_id.hpp" +#include "extensions/openpower-pels/paths.hpp" + +#include + +#include + +#include + +using namespace openpower::pels; +namespace fs = std::filesystem; + +TEST(LogIdTest, TimeBasedIDTest) +{ + uint32_t lastID = 0; + for (int i = 0; i < 10; i++) + { + auto id = detail::getTimeBasedLogID(); + + EXPECT_EQ(id & 0xFF000000, 0x50000000); + EXPECT_NE(id, lastID); + lastID = id; + } +} + +TEST(LogIdTest, IDTest) +{ + EXPECT_EQ(generatePELID(), 0x50000001); + EXPECT_EQ(generatePELID(), 0x50000002); + EXPECT_EQ(generatePELID(), 0x50000003); + EXPECT_EQ(generatePELID(), 0x50000004); + EXPECT_EQ(generatePELID(), 0x50000005); + EXPECT_EQ(generatePELID(), 0x50000006); + + auto backingFile = getPELIDFile(); + fs::remove(backingFile); + EXPECT_EQ(generatePELID(), 0x50000001); + EXPECT_EQ(generatePELID(), 0x50000002); + EXPECT_EQ(generatePELID(), 0x50000003); + + fs::remove_all(fs::path{backingFile}.parent_path()); +} diff --git a/test/openpower-pels/paths.cpp b/test/openpower-pels/paths.cpp new file mode 100644 index 0000000..464b92c --- /dev/null +++ b/test/openpower-pels/paths.cpp @@ -0,0 +1,26 @@ +#include "extensions/openpower-pels/paths.hpp" + +#include + +namespace openpower +{ +namespace pels +{ + +// Use paths that work in unit tests. + +std::filesystem::path getPELIDFile() +{ + static std::string idFile; + + if (idFile.empty()) + { + char templ[] = "/tmp/logidtestXXXXXX"; + std::filesystem::path dir = mkdtemp(templ); + idFile = dir / "logid"; + } + return idFile; +} + +} // namespace pels +} // namespace openpower -- cgit v1.2.1