test: dbus: dbusactiveread

Add initial unit-tests.

Change-Id: Id62894faf56a645dc44c51a173a67185ea5d9cd6
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index d8056e2..6622169 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -14,7 +14,7 @@
 check_PROGRAMS = sensor_manager_unittest sensor_pluggable_unittest \
  sensor_host_unittest util_unittest pid_zone_unittest \
  pid_thermalcontroller_unittest pid_fancontroller_unittest \
- dbus_passive_unittest
+ dbus_passive_unittest dbus_active_unittest
 TESTS = $(check_PROGRAMS)
 
 # Until libconfig is mocked out or replaced, include it.
@@ -48,3 +48,6 @@
 dbus_passive_unittest_SOURCES = dbus_passive_unittest.cpp
 dbus_passive_unittest_LDADD = $(top_builddir)/dbus/util.o \
  $(top_builddir)/dbus/dbuspassive.o
+
+dbus_active_unittest_SOURCES = dbus_active_unittest.cpp
+dbus_active_unittest_LDADD = $(top_builddir)/dbus/dbusactiveread.o
diff --git a/test/dbus_active_unittest.cpp b/test/dbus_active_unittest.cpp
new file mode 100644
index 0000000..c83e9ce
--- /dev/null
+++ b/test/dbus_active_unittest.cpp
@@ -0,0 +1,52 @@
+#include "dbus/dbusactiveread.hpp"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <sdbusplus/test/sdbus_mock.hpp>
+#include <string>
+
+#include "test/dbushelper_mock.hpp"
+
+using ::testing::Invoke;
+using ::testing::NotNull;
+using ::testing::_;
+
+TEST(DbusActiveReadTest, BoringConstructorTest) {
+    // Verify we can construct it.
+
+    sdbusplus::SdBusMock sdbus_mock;
+    auto bus_mock = sdbusplus::get_mocked_new(&sdbus_mock);
+    DbusHelperMock helper;
+    std::string path = "/asdf";
+    std::string service = "asdfasdf.asdfasdf";
+
+    DbusActiveRead ar(bus_mock, path, service, &helper);
+}
+
+TEST(DbusActiveReadTest, Read_VerifyCallsToDbusForValue) {
+    // Verify it calls to get the value from dbus when requested.
+
+    sdbusplus::SdBusMock sdbus_mock;
+    auto bus_mock = sdbusplus::get_mocked_new(&sdbus_mock);
+    DbusHelperMock helper;
+    std::string path = "/asdf";
+    std::string service = "asdfasdf.asdfasdf";
+
+    DbusActiveRead ar(bus_mock, path, service, &helper);
+
+    EXPECT_CALL(helper, GetProperties(_, service, path, NotNull()))
+        .WillOnce(Invoke([&](sdbusplus::bus::bus& bus,
+                             const std::string& service,
+                             const std::string& path,
+                             struct SensorProperties* prop) {
+            prop->scale = -3;
+            prop->value = 10000;
+            prop->unit = "x";
+        }));
+
+    ReadReturn r = ar.read();
+    EXPECT_EQ(10, r.value);
+}
+
+// WARN: GetProperties will raise an exception on failure
+// Instead of just not updating the value.