Fix trigger type for OnChange triggers
Triggers with no threshold parameters should be treated as ones that
activate on change of monitored metric values', with `Discrete` property
value set to true. Otherwise they will be wrongly treated as numeric
triggers on Redfish side. This patch corrects this behavior.
Tested:
1. Created simple discrete trigger: `TestTriggerDiscreteOnChange`, with
`DiscreteTriggerCondition` set to `Changed`.
2. busctl introspect xyz.openbmc_project.Telemetry
/xyz/openbmc_project/Telemetry/Triggers/TelemetryService/
TestTriggerDiscreteOnChange
3. Verified that `Discrete` property is true
All unit tests have passed.
Change-Id: I06762c94b38a9da42a64c9a014d3f6dd47577176
Signed-off-by: Michal Orzel <michalx.orzel@intel.com>
diff --git a/src/trigger.cpp b/src/trigger.cpp
index f534dbd..f71e515 100644
--- a/src/trigger.cpp
+++ b/src/trigger.cpp
@@ -186,8 +186,8 @@
});
dbusIface.register_property_r(
- "Discrete", isDiscreate(), sdbusplus::vtable::property_::const_,
- [this](const auto& x) { return isDiscreate(); });
+ "Discrete", isDiscrete(), sdbusplus::vtable::property_::const_,
+ [this](const auto& x) { return isDiscrete(); });
dbusIface.register_property_rw(
"Name", name, sdbusplus::vtable::property_::emits_change,
@@ -278,9 +278,13 @@
});
}
-bool Trigger::isDiscreate() const
+bool Trigger::isDiscrete() const
{
const auto labeledThresholds = getLabeledThresholds();
+ if (labeledThresholds.empty())
+ {
+ return true;
+ }
return utils::isFirstElementOfType<std::monostate>(labeledThresholds) ||
utils::isFirstElementOfType<discrete::LabeledThresholdParam>(
diff --git a/src/trigger.hpp b/src/trigger.hpp
index e636334..c0b2845 100644
--- a/src/trigger.hpp
+++ b/src/trigger.hpp
@@ -48,7 +48,7 @@
private:
std::vector<LabeledSensorInfo> getLabeledSensorInfo() const;
std::vector<LabeledThresholdParam> getLabeledThresholds() const;
- bool isDiscreate() const;
+ bool isDiscrete() const;
const TriggerId id;
const sdbusplus::message::object_path path;
diff --git a/tests/src/test_trigger.cpp b/tests/src/test_trigger.cpp
index c2f7774..7764c8d 100644
--- a/tests/src/test_trigger.cpp
+++ b/tests/src/test_trigger.cpp
@@ -443,6 +443,26 @@
Eq(persistent));
}
+class TestOnChangeTrigger : public TestTrigger
+{
+ public:
+ TriggerParams onChangeTriggerParams =
+ TriggerParams()
+ .id("DiscreteOnChangeTrigger")
+ .name("My Discrete On Change Trigger")
+ .thresholdParams(std::vector<numeric::LabeledThresholdParam>{});
+
+ void SetUp() override
+ {
+ sut = makeTrigger(onChangeTriggerParams);
+ }
+};
+
+TEST_F(TestOnChangeTrigger, isDiscrete)
+{
+ EXPECT_THAT(getProperty<bool>(sut->getPath(), "Discrete"), Eq(true));
+}
+
class TestTriggerInitialization : public TestTrigger
{
public: