sysd_monitor: Monitor and log errors
Note some aspects of the code are non-optimal to allow better unit
testing.
Tested:
- Verified failure detected and correct error created in qemu
Change-Id: I1d4c9638fc13147508168278cc5ab90c37e1fb8e
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/test/Makefile.am.include b/test/Makefile.am.include
index 95bf636..ba8d106 100644
--- a/test/Makefile.am.include
+++ b/test/Makefile.am.include
@@ -1,4 +1,8 @@
test_systemd_parser_SOURCES = %reldir%/systemd_parser.cpp systemd_target_parser.cpp
+test_systemd_signal_SOURCES = %reldir%/systemd_signal.cpp systemd_target_signal.cpp
check_PROGRAMS += \
%reldir%/systemd_parser
+
+check_PROGRAMS += \
+ %reldir%/systemd_signal
diff --git a/test/systemd_signal.cpp b/test/systemd_signal.cpp
new file mode 100644
index 0000000..ce0a299
--- /dev/null
+++ b/test/systemd_signal.cpp
@@ -0,0 +1,44 @@
+#include <gtest/gtest.h>
+#include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
+#include <systemd_target_signal.hpp>
+
+#include <iostream>
+
+// Enable debug by default for debug when needed
+bool gVerbose = true;
+
+TEST(TargetSignalData, BasicPaths)
+{
+
+ // Create default data structure for testing
+ TargetErrorData targetData = {
+ {"multi-user.target",
+ {"xyz.openbmc_project.State.BMC.Error.MultiUserTargetFailure",
+ {"default"}}},
+ {"obmc-chassis-poweron@0.target",
+ {"xyz.openbmc_project.State.Chassis.Error.PowerOnTargetFailure",
+ {"timeout", "failed"}}}};
+
+ auto bus = sdbusplus::bus::new_default();
+ auto event = sdeventplus::Event::get_default();
+ bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+
+ phosphor::state::manager::SystemdTargetLogging targetMon(targetData, bus);
+
+ std::string invalidUnit = "invalid_unit";
+ std::string validError = "timeout";
+ const std::string* errorToLog =
+ targetMon.processError(invalidUnit, validError);
+ EXPECT_EQ(errorToLog, nullptr);
+
+ std::string validUnit = "obmc-chassis-poweron@0.target";
+ std::string invalidError = "invalid_error";
+ errorToLog = targetMon.processError(validUnit, invalidError);
+ EXPECT_EQ(errorToLog, nullptr);
+
+ errorToLog = targetMon.processError(validUnit, validError);
+ EXPECT_NE(errorToLog, nullptr);
+ EXPECT_EQ(*errorToLog,
+ "xyz.openbmc_project.State.Chassis.Error.PowerOnTargetFailure");
+}