tests: add triggering for dbus signals 01/222101/4
authorAdrian Szyndela <adrian.s@samsung.com>
Thu, 9 Jan 2020 15:15:28 +0000 (16:15 +0100)
committerAdrian Szyndela <adrian.s@samsung.com>
Fri, 10 Jan 2020 15:15:55 +0000 (16:15 +0100)
This adds mocked dbus signals registration function, a registration,
and callback mechanisms. It allows checking if dbus signals handlers
do their thing.

Change-Id: Id6af42d25fd00985e8f84d759d10457e031d39b8

tests/CMakeLists.txt
tests/lowmem-env-mock.cpp
tests/lowmem-env.cpp
tests/lowmem-env.hpp

index fc4294e..b130b03 100644 (file)
@@ -67,7 +67,7 @@ function(ADD_MEMORY_TESTS name libs wraps sources)
 endfunction()
 
 # lowmem-limit unit test
-ADD_MEMORY_TESTS(lowmem-limit-test "glib-2.0"
+ADD_MEMORY_TESTS(lowmem-limit-test "${GLIB2_LDFLAGS}"
                       "-Wl,--wrap=kill,--wrap=read,--wrap=access"
                lowmem-limit-test.cpp lowmem-limit-mock.cpp lowmem-limit-env.cpp lowmem-env.cpp lowmem-env-mock.cpp
                ../src/memory/lowmem-limit.c)
index e0433a2..d0340e8 100644 (file)
@@ -6,4 +6,5 @@
 
 MOCK_LOWMEM(int, register_notifier, (enum notifier_type status, int (*func)(void *data)), (status, func))
 MOCK_LOWMEM(int, unregister_notifier, (enum notifier_type status, int (*func)(void *data)), (status, func))
-
+MOCK_LOWMEM(resourced_ret_c, d_bus_register_signals, (const struct d_bus_signal *signals, const size_t size),
+               (signals, size))
index 904d875..c786112 100644 (file)
@@ -1,6 +1,9 @@
 #include "lowmem-env.hpp"
 #include "cmocka_wrap.hpp"
 
+#include <iostream>
+#include <algorithm>
+
 LowmemEnv *global_test_lowmem_env{nullptr};
 
 LowmemEnv::LowmemEnv()
@@ -18,6 +21,7 @@ LowmemEnv::~LowmemEnv()
 void LowmemEnv::reinit()
 {
        notifiers.clear();
+       dbus_signals.clear();
 }
 
 int LowmemEnv::register_notifier(enum notifier_type status, NotifierCallbackFun func)
@@ -40,9 +44,33 @@ int LowmemEnv::unregister_notifier(enum notifier_type status, NotifierCallbackFu
        return 0;
 }
 
+resourced_ret_c LowmemEnv::d_bus_register_signals(const struct d_bus_signal *signals, size_t size)
+{
+       for (size_t i = 0; i < size; i++)
+               dbus_signals.insert(signals[i]);
+
+       auto s_or_not = [](size_t size) { return size != 1 ? "s" : ""; };
+
+       std::cerr << size << " signal" << s_or_not(size) << " registered, making it total "
+               << dbus_signals.size() << " signal" << s_or_not(dbus_signals.size()) << "\n";
+
+       return RESOURCED_ERROR_NONE;
+}
+
 void LowmemEnv::trigger_notifier(enum notifier_type status, void *data)
 {
        auto fun = notifiers[status];
        assert_non_null(fun);
        fun(data);
 }
+
+void LowmemEnv::trigger_d_bus_signal(const char *path, const char *interface, const char *name,
+               GVariant *params)
+{
+       auto run = [params](const d_bus_signal &s) {
+               s.callback(params);
+       };
+       auto range = dbus_signals.equal_range({.path=path, .interface = interface, .name = name});
+       std::for_each(range.first, range.second, run);
+       g_variant_unref(params);
+}
index 7b4c4aa..c411f84 100644 (file)
@@ -2,9 +2,14 @@
 
 extern "C" {
 #include "notifier.h"
+#include "resourced.h"
+#include "dbus-handler.h"
 }
 
 #include <map>
+#include <set>
+#include <string>
+#include <tuple>
 
 typedef int (*NotifierCallbackFun)(void *data);
 
@@ -15,12 +20,27 @@ public:
 
        void reinit();
 
+       // mocked functions
        int register_notifier(enum notifier_type status, NotifierCallbackFun func);
        int unregister_notifier(enum notifier_type status, NotifierCallbackFun func);
 
+       resourced_ret_c d_bus_register_signals(const struct d_bus_signal *signals, size_t size);
+
+       // events
        void trigger_notifier(enum notifier_type status, void *data);
+       void trigger_d_bus_signal(const char *path, const char *interface, const char *name,
+               GVariant *params);
 private:
+
+       struct d_bus_signal_less {
+               bool operator()(const d_bus_signal &lhs, const d_bus_signal &rhs) {
+                       return std::make_tuple<std::string, std::string, std::string>(lhs.path, lhs.interface, lhs.name) <
+                               std::make_tuple<std::string, std::string, std::string>(rhs.path, rhs.interface, rhs.name);
+               }
+       };
+
        std::map<notifier_type, NotifierCallbackFun> notifiers;
+       std::multiset<d_bus_signal, d_bus_signal_less> dbus_signals;
 };
 
 extern LowmemEnv *global_test_lowmem_env;