Implemented sensor class
Sensor class was introduced, it monitors
xyz.openbmc_project.Sensor.Value, for change and notifies all
listeners.
Tested:
- Unit tested with service stub that provides dbus interface
xyz.openbmc_project.Sensor.Value
- All changes are delivered to listeners
- All other unit tests are passing
Change-Id: I8c9d58cc986c1fe2a4d2386815d559814016efa6
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
diff --git a/tests/src/stubs/dbus_sensor_object.cpp b/tests/src/stubs/dbus_sensor_object.cpp
new file mode 100644
index 0000000..c3d4170
--- /dev/null
+++ b/tests/src/stubs/dbus_sensor_object.cpp
@@ -0,0 +1,59 @@
+#include "dbus_sensor_object.hpp"
+
+#include <boost/asio.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+#include <sdbusplus/bus.hpp>
+
+namespace stubs
+{
+
+DbusSensorObject::DbusSensorObject(
+ boost::asio::io_context& ioc,
+ const std::shared_ptr<sdbusplus::asio::connection>& bus,
+ const std::shared_ptr<sdbusplus::asio::object_server>& objServer) :
+ ioc(ioc),
+ bus(bus), objServer(objServer)
+{
+ sensorIface = objServer->add_interface(path(), interface());
+
+ sensorIface->register_property_r(property.value(), double{},
+ sdbusplus::vtable::property_::emits_change,
+ [this](const auto&) { return value; });
+
+ sensorIface->initialize();
+}
+
+DbusSensorObject::~DbusSensorObject()
+{
+ objServer->remove_interface(sensorIface);
+}
+
+void DbusSensorObject::setValue(double v)
+{
+ value = v;
+
+ sensorIface->signal_property(property.value());
+}
+
+double DbusSensorObject::getValue() const
+{
+ return value;
+}
+
+const char* DbusSensorObject::path()
+{
+ return "/telemetry/ut/DbusSensorObject";
+}
+
+const char* DbusSensorObject::interface()
+{
+ return "xyz.openbmc_project.Sensor.Value";
+}
+
+const char* DbusSensorObject::Properties::value()
+{
+ return "Value";
+}
+
+} // namespace stubs
diff --git a/tests/src/stubs/dbus_sensor_object.hpp b/tests/src/stubs/dbus_sensor_object.hpp
new file mode 100644
index 0000000..99271fa
--- /dev/null
+++ b/tests/src/stubs/dbus_sensor_object.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+#include <boost/asio.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+#include <sdbusplus/bus.hpp>
+
+namespace stubs
+{
+
+class DbusSensorObject
+{
+ public:
+ DbusSensorObject(
+ boost::asio::io_context& ioc,
+ const std::shared_ptr<sdbusplus::asio::connection>& bus,
+ const std::shared_ptr<sdbusplus::asio::object_server>& objServer);
+ ~DbusSensorObject();
+
+ static const char* path();
+ static const char* interface();
+
+ void setValue(double);
+ double getValue() const;
+
+ struct Properties
+ {
+ static const char* value();
+ };
+
+ static constexpr Properties property = {};
+
+ private:
+ boost::asio::io_context& ioc;
+ std::shared_ptr<sdbusplus::asio::connection> bus;
+ std::shared_ptr<sdbusplus::asio::object_server> objServer;
+
+ std::shared_ptr<sdbusplus::asio::dbus_interface> sensorIface;
+
+ double value = 0.0;
+};
+
+} // namespace stubs