Add DBus cmocka unit tests 53/220253/9
authorBaumann <a.baumann@samsung.com>
Mon, 18 Nov 2019 14:55:06 +0000 (15:55 +0100)
committerMaciej Slodczyk <m.slodczyk2@partner.samsung.com>
Tue, 21 Jan 2020 12:18:31 +0000 (13:18 +0100)
Change-Id: I62008486b3144f27d91ef91916bd32acef28eb8c
Signed-off-by: Baumann <a.baumann@samsung.com>
src/common/macro.h
src/proc-stat/include/proc-monitor.h
src/proc-stat/proc-main.c
src/proc-stat/proc-monitor.c
tests/CMakeLists.txt
tests/cmocka-proc-dbus-typecheck.c [new file with mode: 0644]

index c8e9a51..ea4c8cf 100644 (file)
 #define STRING_FORMAT_SPECIFIER_WITH_MACRO(macro) "%"#macro"s"
 #define STR_FS(macro) STRING_FORMAT_SPECIFIER_WITH_MACRO(macro)
 
+/* Some functions are supposed to be static for normal compilation,
+ * but we'd like to wrap them for unit tests which precludes that. */
+#ifndef _UNIT_TEST
+#define EXPORT_TEST static
+#else
+#define EXPORT_TEST
+#endif
+
 #endif /* _RESOURCED_MACRO_H_ */
index a56ec87..a51d0aa 100644 (file)
 
 void proc_set_watchdog_state(int state);
 
-#endif /* __RESOURCED_PROC_MONITOR_H__ */
+#ifdef _UNIT_TEST
+#include <gio/gio.h>
+void proc_dbus_aul_group(GVariant *params);
+void dbus_get_memory_lists(GDBusMethodInvocation *invocation, GVariant *params);
+void dbus_get_app_memory(GDBusMethodInvocation *invocation, GVariant *params);
+void dbus_get_app_cpu(GDBusMethodInvocation *invocation, GVariant *params);
+void proc_dbus_aul_launch(GVariant *params);
+void proc_dbus_exclude_appid_signal_handler(GVariant *params);
+void proc_dbus_exclude_signal_handler(GVariant *params);
+void proc_dbus_active_signal_handler(GVariant *params);
+void proc_dbus_aul_changestate(GVariant *params);
+void proc_dbus_aul_terminated(GVariant *params);
+void proc_dbus_aul_resume(GVariant *params);
+void proc_dbus_prelaunch_signal_handler(GVariant *params);
+void proc_dbus_aul_terminate(GVariant *params);
+void proc_dbus_lcd_on(GVariant *params);
+void proc_dbus_lcd_off(GVariant *params);
+void booting_done_signal_handler(GVariant *params);
+void low_battery_signal_handler(GVariant *params);
+void proc_dbus_suspend_hint(GVariant *params);
+void proc_dbus_exclude_method_handler(GDBusMethodInvocation *invocation, GVariant *params);
+#endif
 
+#endif /* __RESOURCED_PROC_MONITOR_H__ */
index b384e8d..7fb3d3c 100644 (file)
@@ -687,7 +687,7 @@ finish:
        return ret == -ENOENT ? 0 : ret;
 }
 
-static void proc_app_list_add_app_info(struct proc_app_info *pai)
+__attribute__((weak)) void proc_app_list_add_app_info(struct proc_app_info *pai)
 {
        GSList *proc_app_list = PAL_INIT_VALUE;
        int ret;
@@ -719,7 +719,7 @@ static GSList *proc_app_list_remove_app_info(struct proc_app_info *pai)
        return app_list.list;
 }
 
-static struct proc_app_info *proc_create_app_info(const char *appid,
+__attribute__((weak)) struct proc_app_info *proc_create_app_info(const char *appid,
                                           const char *pkgid,
                                           pid_t pid,
                                           int flags,
index aabc643..94a4e23 100644 (file)
@@ -235,7 +235,7 @@ null_reply:
        D_BUS_REPLY_NULL(invocation);
 }
 
-static void proc_dbus_active_signal_handler(GVariant *params)
+EXPORT_TEST void proc_dbus_active_signal_handler(GVariant *params)
 {
        int type;
        char *str = NULL;
@@ -258,7 +258,7 @@ static void proc_dbus_active_signal_handler(GVariant *params)
        resourced_proc_status_change(type, pid, NULL, NULL, PROC_TYPE_NONE);
 }
 
-static void dbus_get_app_cpu(GDBusMethodInvocation *invocation, GVariant *params)
+EXPORT_TEST void dbus_get_app_cpu(GDBusMethodInvocation *invocation, GVariant *params)
 {
        char *appid = NULL;
        unsigned long total, utime, stime, starttime;
@@ -291,7 +291,7 @@ failure:
        D_BUS_REPLY_NULL(invocation);
 }
 
-static void dbus_get_app_memory(GDBusMethodInvocation *invocation, GVariant *params)
+EXPORT_TEST void dbus_get_app_memory(GDBusMethodInvocation *invocation, GVariant *params)
 {
        char *appid;
        unsigned int usage = 0;
@@ -399,7 +399,7 @@ static void dbus_get_cpu_list(GDBusMethodInvocation *invocation, GVariant *param
        g_dbus_method_invocation_return_value(invocation, g_variant_builder_end(&builder));
 }
 
-static void dbus_get_memory_lists(GDBusMethodInvocation *invocation, GVariant *params)
+EXPORT_TEST void dbus_get_memory_lists(GDBusMethodInvocation *invocation, GVariant *params)
 {
        GSList *proc_app_list = PAL_INIT_VALUE;
        GSList *giter;
@@ -520,7 +520,7 @@ static void dbus_get_get_ram_size(GDBusMethodInvocation *invocation, GVariant *p
        g_dbus_method_invocation_return_value(invocation, g_variant_new("(u)", total));
 }
 
-static void proc_dbus_exclude_signal_handler(GVariant *params)
+EXPORT_TEST void proc_dbus_exclude_signal_handler(GVariant *params)
 {
        const char *str = NULL;
        pid_t pid = 0;
@@ -561,7 +561,7 @@ static void proc_dbus_exclude_signal_handler(GVariant *params)
                return;
 }
 
-static void proc_dbus_exclude_method_handler(GDBusMethodInvocation *invocation, GVariant *params)
+EXPORT_TEST void proc_dbus_exclude_method_handler(GDBusMethodInvocation *invocation, GVariant *params)
 {
        const char *str = NULL;
        pid_t pid = 0;
@@ -580,7 +580,7 @@ failure:
                G_DBUS_ERROR_INVALID_ARGS, "invalid arguments");
 }
 
-static void proc_dbus_exclude_appid_signal_handler(GVariant *params)
+EXPORT_TEST void proc_dbus_exclude_appid_signal_handler(GVariant *params)
 {
        char *str = NULL;
        char *appid = NULL;
@@ -647,7 +647,7 @@ static void proc_dbus_set_priority_signal_handler(GVariant *params)
                _W("Warning: invalid set priority request (%s)!", str);
 }
 
-static void proc_dbus_prelaunch_signal_handler(GVariant *params)
+EXPORT_TEST void proc_dbus_prelaunch_signal_handler(GVariant *params)
 {
        char *appid = NULL;
        char *pkgid = NULL;
@@ -813,26 +813,26 @@ static void proc_dbus_systemservice_handler(GVariant *params)
                    NULL, NULL, PROC_TYPE_NONE);
 }
 
-static void proc_dbus_lcd_on(GVariant *params)
+EXPORT_TEST void proc_dbus_lcd_on(GVariant *params)
 {
        current_lcd_state = LCD_STATE_ON;
        resourced_notify(RESOURCED_NOTIFIER_LCD_ON, NULL);
        /* nothing */
 }
 
-static void proc_dbus_lcd_off(GVariant *params)
+EXPORT_TEST void proc_dbus_lcd_off(GVariant *params)
 {
        current_lcd_state = LCD_STATE_OFF;
        resourced_notify(RESOURCED_NOTIFIER_LCD_OFF, NULL);
 }
 
-static void booting_done_signal_handler(GVariant *params)
+EXPORT_TEST void booting_done_signal_handler(GVariant *params)
 {
        _I("booting done");
        resourced_notify(RESOURCED_NOTIFIER_BOOTING_DONE, NULL);
 }
 
-static void low_battery_signal_handler(GVariant *params)
+EXPORT_TEST void low_battery_signal_handler(GVariant *params)
 {
        resourced_notify(RESOURCED_NOTIFIER_LOW_BATTERY, NULL);
 }
@@ -859,7 +859,7 @@ static void systemtime_changed_signal_handler(GVariant *params)
        resourced_notify(RESOURCED_NOTIFIER_SYSTEMTIME_CHANGED, NULL);
 }
 
-static void proc_dbus_aul_launch(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_launch(GVariant *params)
 {
        pid_t pid = 0;
        int status, apptype;
@@ -896,7 +896,7 @@ static void proc_dbus_aul_launch(GVariant *params)
        resourced_proc_status_change(status, pid, appid, pkgid, apptype);
 }
 
-static void proc_dbus_aul_resume(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_resume(GVariant *params)
 {
        pid_t pid = 0;
        int status = PROC_CGROUP_SET_RESUME_REQUEST, apptype;
@@ -922,7 +922,7 @@ static void proc_dbus_aul_resume(GVariant *params)
        resourced_proc_status_change(status, pid, appid, pkgid, apptype);
 }
 
-static void proc_dbus_aul_terminate(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_terminate(GVariant *params)
 {
        pid_t pid = 0;
        int status = PROC_CGROUP_SET_TERMINATE_REQUEST;
@@ -939,7 +939,7 @@ static void proc_dbus_aul_terminate(GVariant *params)
        resourced_proc_status_change(status, pid, appid, pkgid, PROC_TYPE_NONE);
 }
 
-static void proc_dbus_aul_changestate(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_changestate(GVariant *params)
 {
        pid_t pid = 0;
        int status, apptype;
@@ -973,7 +973,7 @@ static void proc_dbus_aul_changestate(GVariant *params)
        resourced_proc_status_change(status, pid, appid, pkgid, apptype);
 }
 
-static void proc_dbus_aul_group(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_group(GVariant *params)
 {
        pid_t ownerpid = 0;
        pid_t childpid = 0;
@@ -995,7 +995,7 @@ static void proc_dbus_aul_group(GVariant *params)
        proc_set_group(ownerpid, childpid, appid);
 }
 
-static void proc_dbus_aul_terminated(GVariant *params)
+EXPORT_TEST void proc_dbus_aul_terminated(GVariant *params)
 {
        pid_t pid = 0;
        int status = PROC_CGROUP_SET_TERMINATED;
@@ -1009,7 +1009,7 @@ static void proc_dbus_aul_terminated(GVariant *params)
        resourced_proc_status_change(status, pid, NULL, NULL, PROC_TYPE_NONE);
 }
 
-static void proc_dbus_suspend_hint(GVariant *params)
+EXPORT_TEST void proc_dbus_suspend_hint(GVariant *params)
 {
        pid_t pid = 0;
        struct proc_app_info *pai = NULL;
index 954e272..772c721 100644 (file)
@@ -25,6 +25,7 @@ ADD_CUSTOM_TARGET(do-test ALL make test
 
 # build unit test
 ADD_EXECUTABLE(cmocka-core cmocka-core.c)
+ADD_EXECUTABLE(cmocka-proc-dbus-typecheck cmocka-proc-dbus-typecheck.c)
 
 PKG_CHECK_MODULES(CMOCKA REQUIRED cmocka)
 
@@ -42,6 +43,11 @@ SET_TARGET_PROPERTIES(cmocka-core PROPERTIES COMPILE_FLAGS
 TARGET_LINK_LIBRARIES(cmocka-core resourced_shared_test cmocka dlog gio-2.0 gobject-2.0 glib-2.0
        "-Wl,--wrap=malloc,--wrap=free,--wrap=g_slist_append,--wrap=g_slist_remove,--wrap=strdup,--wrap=strndup -O0")
 
+SET_TARGET_PROPERTIES(cmocka-proc-dbus-typecheck PROPERTIES COMPILE_FLAGS
+       "-I${INCLUDE_COMMON_DIR} -I${INCLUDE_PUBLIC_DIR} -I${COMMON_SOURCE_DIR} -I${PROC-STAT_SOURCE_DIR}/include -I${PROC-STAT_SOURCE_DIR} -I${RESOURCED_SOURCE_DIR} -I${MEMORY_SOURCE_DIR} -I${SWAP_SOURCE_DIR} -I${MODULES_SOURCE_DIR} -I${FREEZER_SOURCE_DIR} -I${FREEZER_SOURCE_DIR}/include -I${HEART_SOURCE_DIR} -I${CPU_SOURCE_DIR} -I${VIP_SOURCE_DIR} -I${BLOCK_SOURCE_DIR} -I/usr/include/dlog ${GLIB2_CFLAGS} ${UNIT_TESTS_CFLAGS}")
+TARGET_LINK_LIBRARIES(cmocka-proc-dbus-typecheck resourced_shared_test cmocka dlog gio-2.0 gobject-2.0 glib-2.0
+       "-Wl,--wrap=fread_int,--wrap=fread_uint,--wrap=fread_ulong,--wrap=proc_set_group,--wrap=g_dbus_method_invocation_get_message,--wrap=g_dbus_message_new_method_reply,--wrap=d_bus_reply_message,--wrap=g_object_unref,--wrap=g_dbus_method_invocation_return_value,--wrap=find_app_info_by_appid,--wrap=proc_get_mem_usage,--wrap=proc_get_cpu_time,--wrap=resourced_proc_status_change,--wrap=resourced_notify,--wrap=proc_set_runtime_exclude_list,--wrap=find_app_info,--wrap=proc_add_app_info,--wrap=proc_create_app_info,--wrap=proc_app_list_add_app_info,--wrap=proc_check_suspend_state,--wrap=g_dbus_method_invocation_return_error,--wrap=proc_dbus_exclude_signal_handler -O0")
+
 # add unit test to test target
 ADD_TEST(core cmocka-core)
 ADD_DEPENDENCIES(do-test cmocka-core)
@@ -81,6 +87,9 @@ ADD_MEMORY_TESTS(lowmem-dbus-test "${GLIB2_LDFLAGS}" ""
                lowmem-dbus-test.cpp lowmem-dbus-mock.cpp lowmem-dbus-env.cpp lowmem-env.cpp lowmem-env-mock.cpp
                           ../src/memory/lowmem-dbus.c)
 
+ADD_TEST(proc-dbus-typecheck cmocka-proc-dbus-typecheck)
+ADD_DEPENDENCIES(do-test cmocka-proc-dbus-typecheck)
+
 INSTALL(TARGETS watchdog-test
   DESTINATION ${RD_TESTS_PATH})
 INSTALL(FILES run_tests.sh
diff --git a/tests/cmocka-proc-dbus-typecheck.c b/tests/cmocka-proc-dbus-typecheck.c
new file mode 100644 (file)
index 0000000..9c271dc
--- /dev/null
@@ -0,0 +1,700 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <setjmp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <cmocka.h>
+#include <assert.h>
+#include <gio/gio.h>
+
+#include "file-helper.h"
+#include "notifier.h"
+#include "proc-monitor.h"
+#include "proc-main.h"
+
+void __real_proc_dbus_exclude_signal_handler(GVariant *params);
+
+int __wrap_fread_uint(const char *path, u_int32_t *number)
+{
+       return 0;
+}
+
+int __wrap_fread_int(const char *path, int32_t *number)
+{
+       return 0;
+}
+
+int __wrap_fread_ulong(const char *path, unsigned long *number)
+{
+       return 0;
+}
+
+void __wrap_proc_set_group(pid_t ownerpid, pid_t childpid, char *pkgname)
+{
+       check_expected(ownerpid);
+       check_expected(childpid);
+       check_expected_ptr(pkgname);
+}
+
+static void test_proc_dbus_aul_group(void **state)
+{
+       GVariant *params = g_variant_new("(iis)", 0, 0, NULL);
+       proc_dbus_aul_group(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(iis)", 1, 2, "appid");
+       expect_value(__wrap_proc_set_group, ownerpid, 1);
+       expect_value(__wrap_proc_set_group, childpid, 2);
+       expect_string(__wrap_proc_set_group, pkgname, "appid");
+
+       proc_dbus_aul_group(params);
+}
+
+GDBusMessage *__wrap_g_dbus_method_invocation_get_message(GDBusMethodInvocation *invocation)
+{
+       check_expected_ptr(invocation);
+       return mock_ptr_type(GDBusMessage*);
+}
+
+GDBusMessage *__wrap_g_dbus_message_new_method_reply(GDBusMessage *method_call_message)
+{
+       check_expected_ptr(method_call_message);
+       return mock_ptr_type(GDBusMessage*);
+}
+
+resourced_ret_c __wrap_d_bus_reply_message(GDBusMessage *msg)
+{
+       check_expected_ptr(msg);
+       return mock_type(resourced_ret_c);
+}
+
+void __wrap_g_object_unref(gpointer object)
+{
+       check_expected(object);
+}
+
+void __wrap_g_dbus_method_invocation_return_value(GDBusMethodInvocation *invocation, GVariant *parameters)
+{
+       check_expected(invocation);
+}
+
+static void test_dbus_get_memory_lists(void **state)
+{
+       GDBusMethodInvocation *inv = (GDBusMethodInvocation*)0x123123;
+       GVariant *params = g_variant_new("(i)", 7); //PROC_TYPE_MAX = 7
+       expect_value(__wrap_g_dbus_method_invocation_get_message, invocation, 0x123123);
+       will_return(__wrap_g_dbus_method_invocation_get_message, (GDBusMessage*)0x123123);
+
+       expect_value(__wrap_g_dbus_message_new_method_reply, method_call_message, 0x123123);
+       will_return(__wrap_g_dbus_message_new_method_reply, (GDBusMessage *)0x123123);
+
+       expect_value(__wrap_d_bus_reply_message, msg, (GDBusMessage *)0x123123);
+       will_return(__wrap_d_bus_reply_message, (GDBusMessage *)0x123123);
+
+       expect_any(__wrap_g_object_unref, object);
+       expect_any(__wrap_g_object_unref, object);
+
+       dbus_get_memory_lists(inv, params);
+       g_variant_unref(params);
+
+
+       inv = NULL;
+       params = g_variant_new("(i)", 7);
+       expect_value(__wrap_g_dbus_method_invocation_get_message, invocation, NULL);
+       will_return(__wrap_g_dbus_method_invocation_get_message, (GDBusMessage*)0x101010);
+
+       expect_value(__wrap_g_dbus_message_new_method_reply, method_call_message, 0x101010);
+       will_return(__wrap_g_dbus_message_new_method_reply, (GDBusMessage *)0x101010);
+
+       expect_value(__wrap_d_bus_reply_message, msg, (GDBusMessage *)0x101010);
+       will_return(__wrap_d_bus_reply_message, (GDBusMessage *)0x101010);
+
+       expect_any(__wrap_g_object_unref, object);
+       expect_any(__wrap_g_object_unref, object);
+
+       dbus_get_memory_lists(inv, params);
+       g_variant_unref(params);
+
+       inv = NULL;
+       params = g_variant_new("(i)", 0);
+       expect_value(__wrap_g_dbus_method_invocation_return_value, invocation, inv);
+       dbus_get_memory_lists(inv, params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(i)", 0);
+       expect_value(__wrap_g_dbus_method_invocation_return_value, invocation, (GDBusMethodInvocation *)0x717171);
+       dbus_get_memory_lists((GDBusMethodInvocation *)0x717171, params);
+       g_variant_unref(params);
+}
+
+struct proc_app_info *__wrap_find_app_info_by_appid(const char *appid)
+{
+       check_expected_ptr(appid);
+       return mock_ptr_type(struct proc_app_info*);
+}
+
+int __wrap_proc_get_mem_usage(pid_t pid, unsigned int *usage)
+{
+       check_expected(pid);
+       return mock_type(int);
+}
+
+static void test_dbus_get_app_memory(void **state)
+{
+       GVariant * params = g_variant_new("(s)", "str");
+
+       expect_string(__wrap_find_app_info_by_appid, appid, "str");
+       struct proc_app_info pai;
+       pai.main_pid = 333;
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       expect_value(__wrap_proc_get_mem_usage, pid, 333);
+       will_return(__wrap_proc_get_mem_usage, RESOURCED_ERROR_NONE);
+
+       expect_value(__wrap_g_dbus_method_invocation_return_value, invocation, (GDBusMethodInvocation *)0x424242);
+       dbus_get_app_memory((GDBusMethodInvocation *)0x424242, params);
+}
+
+int __wrap_proc_get_cpu_time(pid_t pid, unsigned long *utime,
+               unsigned long *stime, unsigned long *starttime)
+{
+       check_expected(pid);
+       return mock_type(int);
+}
+
+static void test_dbus_get_app_cpu(void **state)
+{
+       GVariant *params = g_variant_new("(s)", "str");
+
+       expect_string(__wrap_find_app_info_by_appid, appid, "str");
+
+       struct proc_app_info pai;
+       pai.main_pid = 222;
+
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       expect_value(__wrap_proc_get_cpu_time, pid, 222);
+       will_return(__wrap_proc_get_cpu_time, RESOURCED_ERROR_NONE);
+
+       expect_value(__wrap_g_dbus_method_invocation_return_value, invocation, (GDBusMethodInvocation *)0x31337);
+
+       dbus_get_app_cpu((GDBusMethodInvocation *)0x31337, params);
+}
+
+int __wrap_resourced_proc_status_change(int status, pid_t pid, char *app_name, char *pkg_name, int apptype)
+{
+       check_expected(status);
+       check_expected(pid);
+       check_expected_ptr(app_name);
+       check_expected_ptr(pkg_name);
+       check_expected(apptype);
+
+       return 0;
+}
+
+static void test_proc_dbus_aul_launch(void **state)
+{
+       GVariant *params = g_variant_new("(isss)", 0, NULL, NULL, NULL);
+       proc_dbus_aul_launch(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(isss)", 123, "appid", "pkgid", "svc");
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_SERVICE_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 123);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_SERVICE);
+       proc_dbus_aul_launch(params);
+
+       params = g_variant_new("(isss)", 445, "appid", "pkgid", "ui");
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_LAUNCH_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 445);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_GUI);
+       proc_dbus_aul_launch(params);
+
+       params = g_variant_new("(isss)", 789, "appid", "pkgid", "widget");
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_LAUNCH_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 789);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_WIDGET);
+       proc_dbus_aul_launch(params);
+
+       params = g_variant_new("(isss)", 101, "appid", "pkgid", "watch");
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_LAUNCH_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 101);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_WATCH);
+       proc_dbus_aul_launch(params);
+}
+
+void __wrap_resourced_notify(enum notifier_type status, void *data)
+{
+       check_expected(status);
+       check_expected_ptr(data);
+}
+
+resourced_ret_c __wrap_proc_set_runtime_exclude_list(const int pid, int type)
+{
+       check_expected(pid);
+       check_expected(type);
+       return mock_type(resourced_ret_c);
+}
+
+int check_data_in_resourced_notify_wakeup(const LargestIntegralType value,
+                                   const LargestIntegralType check_value_data)
+{
+       struct proc_status *d = (struct proc_status *)((intptr_t)check_value_data);
+       struct proc_status *v = (struct proc_status *)((intptr_t)value);
+
+       if (v->pai == NULL)
+               return 0;
+
+       return v->pid == d->pid;
+}
+
+int check_data_in_resourced_notify_exclude(const LargestIntegralType value,
+                                    const LargestIntegralType check_value_data)
+{
+       struct proc_exclude *d = (struct proc_exclude *)((intptr_t)check_value_data);
+       struct proc_exclude *v = (struct proc_exclude *)((intptr_t)value);
+
+       return (v->pid == d->pid) && (v->type == d->type);
+}
+
+static void test_proc_dbus_exclude_appid_signal_handler(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(ss)", "wakeup", "appid");
+       expect_string(__wrap_find_app_info_by_appid, appid, "appid");
+
+       struct proc_app_info pai;
+       pai.main_pid = 130;
+       struct proc_status ps;
+       ps.pai = &pai;
+       ps.pid = ps.pai->main_pid;
+
+       will_return(__wrap_find_app_info_by_appid, &pai);
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_APP_WAKEUP);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_wakeup, &ps);
+       proc_dbus_exclude_appid_signal_handler(params);
+
+       params = g_variant_new("(ss)", "exclude", "appid2");
+       expect_string(__wrap_find_app_info_by_appid, appid, "appid2");
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       pai.main_pid = 155;
+       struct proc_exclude pe;
+       pe.pid = pai.main_pid;
+       pe.type = PROC_EXCLUDE;
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_exclude, &pe);
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, pe.pid);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, pe.type);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+       proc_dbus_exclude_appid_signal_handler(params);
+
+       params = g_variant_new("(ss)", "include", "appid3");
+       expect_string(__wrap_find_app_info_by_appid, appid, "appid3");
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       pai.main_pid = 199;
+       pe.pid = pai.main_pid;
+       pe.type = PROC_INCLUDE;
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_exclude, &pe);
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, pe.pid);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, pe.type);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+       proc_dbus_exclude_appid_signal_handler(params);
+
+       params = g_variant_new("(ss)", "include", NULL);
+       expect_any(__wrap_find_app_info_by_appid, appid);
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       pai.main_pid = 210;
+       pe.pid = pai.main_pid;
+       pe.type = PROC_INCLUDE;
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_exclude, &pe);
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, pe.pid);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, pe.type);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+
+       proc_dbus_exclude_appid_signal_handler(params);
+
+       params = g_variant_new("(ss)", "exclude", NULL);
+       expect_any(__wrap_find_app_info_by_appid, appid);
+       will_return(__wrap_find_app_info_by_appid, &pai);
+
+       pai.main_pid = 305;
+       pe.pid = pai.main_pid;
+       pe.type = PROC_EXCLUDE;
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_exclude, &pe);
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, pe.pid);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, pe.type);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+
+       proc_dbus_exclude_appid_signal_handler(params);
+}
+
+struct proc_app_info *__wrap_find_app_info(const pid_t pid)
+{
+       check_expected(pid);
+       return mock_type(struct proc_app_info*);
+}
+
+static void test_proc_dbus_exclude_signal_handler(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(si)", NULL, 0);
+       __real_proc_dbus_exclude_signal_handler(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(si)", "wakeup", 1286);
+       expect_value(__wrap_find_app_info, pid, 1286);
+       will_return(__wrap_find_app_info, (struct proc_app_info *)0x123456);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_APP_WAKEUP);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_wakeup, &((struct proc_status){.pid = 1286}));
+
+       __real_proc_dbus_exclude_signal_handler(params);
+
+       params = g_variant_new("(si)", "exclude", 1416);
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_check(__wrap_resourced_notify, data, check_data_in_resourced_notify_exclude, &((struct proc_exclude){.pid = 1416, .type = PROC_EXCLUDE}));
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, 1416);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, PROC_EXCLUDE);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+
+       __real_proc_dbus_exclude_signal_handler(params);
+
+       params = g_variant_new("(si)", "include", 3213);
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_CONTROL_EXCLUDE);
+       expect_memory(__wrap_resourced_notify, data, &((struct proc_exclude){.pid = 3213, .type = PROC_INCLUDE}), sizeof(struct proc_exclude));
+
+       expect_value(__wrap_proc_set_runtime_exclude_list, pid, 3213);
+       expect_value(__wrap_proc_set_runtime_exclude_list, type, PROC_INCLUDE);
+       will_return(__wrap_proc_set_runtime_exclude_list, RESOURCED_ERROR_NONE);
+
+       __real_proc_dbus_exclude_signal_handler(params);
+}
+
+static void test_proc_dbus_active_signal_handler(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(si)", NULL, 0);
+       proc_dbus_active_signal_handler(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(si)", "active", 1);
+
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_ACTIVE);
+       expect_value(__wrap_resourced_proc_status_change, pid, 1);
+       expect_any(__wrap_resourced_proc_status_change, app_name);
+       expect_any(__wrap_resourced_proc_status_change, pkg_name);
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_NONE);
+
+       proc_dbus_active_signal_handler(params);
+}
+
+static void test_proc_dbus_aul_changestate(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(issss)", 0, NULL, NULL, NULL, NULL);
+       proc_dbus_aul_changestate(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(issss)", 1, "appid", "pkgid", "fg", "svc");
+
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_FOREGRD);
+       expect_value(__wrap_resourced_proc_status_change, pid, 1);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_SERVICE);
+
+       proc_dbus_aul_changestate(params);
+}
+
+static void test_proc_dbus_aul_terminated(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(i)", 0);
+       proc_dbus_aul_terminated(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(i)", 1);
+
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_TERMINATED);
+       expect_value(__wrap_resourced_proc_status_change, pid, 1);
+       expect_any(__wrap_resourced_proc_status_change, app_name);
+       expect_any(__wrap_resourced_proc_status_change, pkg_name);
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_NONE);
+
+       proc_dbus_aul_terminated(params);
+}
+
+static void test_proc_dbus_aul_resume(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(isss)", 0, NULL, NULL, NULL);
+       proc_dbus_aul_resume(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(isss)", 1, "appid", "pkgid", "svc");
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_RESUME_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 1);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_SERVICE);
+
+       proc_dbus_aul_resume(params);
+}
+
+struct proc_app_info *__wrap_proc_create_app_info(const char *appid,
+                                          const char *pkgid,
+                                          pid_t pid,
+                                          int flags,
+                                          int categories,
+                                          enum application_type type,
+                                          enum proc_state state)
+{
+       check_expected_ptr(appid);
+       check_expected_ptr(pkgid);
+       check_expected(pid);
+       check_expected(flags);
+       check_expected(categories);
+       check_expected(type);
+       check_expected(state);
+
+       return mock_type(struct proc_app_info*);
+}
+
+void __wrap_proc_app_list_add_app_info(struct proc_app_info *pai)
+{
+       check_expected(pai);
+}
+
+struct proc_app_info *__wrap_proc_add_app_info(const char *appid,
+                                       const char *pkgid,
+                                       pid_t pid,
+                                       int flags,
+                                       int categories,
+                                       enum application_type type,
+                                       enum proc_state state)
+{
+       check_expected_ptr(appid);
+       check_expected_ptr(pkgid);
+       check_expected(pid);
+       check_expected(flags);
+       check_expected(categories);
+       check_expected(type);
+       check_expected(state);
+
+       return mock_type(struct proc_app_info*);
+}
+
+static void test_proc_dbus_prelaunch_signal_handler(void **state)
+{
+       GVariant *params = g_variant_new("(ssii)", NULL, NULL, -1, -1);
+       proc_dbus_prelaunch_signal_handler(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(ssii)", "appid", "pkgid", 0, 0);
+
+       expect_string(__wrap_proc_add_app_info, appid, "appid");
+       expect_string(__wrap_proc_add_app_info, pkgid, "pkgid");
+       expect_value(__wrap_proc_add_app_info, pid, 0);
+       expect_value(__wrap_proc_add_app_info, flags, 0);
+       expect_value(__wrap_proc_add_app_info, categories, 0);
+       expect_value(__wrap_proc_add_app_info, type, PROC_TYPE_READY);
+       expect_value(__wrap_proc_add_app_info, state, PROC_STATE_DEFAULT);
+       will_return(__wrap_proc_add_app_info, (struct proc_app_info*)0x12346);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_APP_PRELAUNCH);
+       expect_any(__wrap_resourced_notify, data);
+
+       proc_dbus_prelaunch_signal_handler(params);
+}
+
+static void test_proc_dbus_aul_terminate(void **state)
+{
+       (void) state; /*unused*/
+
+       GVariant *params = g_variant_new("(isss)", NULL, NULL, NULL, NULL);
+       proc_dbus_aul_terminate(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(isss)", 156562, "appid", "pkgid", PROC_TYPE_NONE);
+
+       expect_value(__wrap_resourced_proc_status_change, status, PROC_CGROUP_SET_TERMINATE_REQUEST);
+       expect_value(__wrap_resourced_proc_status_change, pid, 156562);
+       expect_string(__wrap_resourced_proc_status_change, app_name, "appid");
+       expect_string(__wrap_resourced_proc_status_change, pkg_name, "pkgid");
+       expect_value(__wrap_resourced_proc_status_change, apptype, PROC_TYPE_NONE);
+
+       proc_dbus_aul_terminate(params);
+}
+
+static void test_proc_dbus_lcd_on(void **state)
+{
+       GVariant *params = g_variant_new("(i)", 0);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_LCD_ON);
+       expect_any(__wrap_resourced_notify, data);
+       proc_dbus_lcd_on(params);
+}
+
+static void test_proc_dbus_lcd_off(void **state)
+{
+       GVariant *params = g_variant_new("(i)", 0);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_LCD_OFF);
+       expect_any(__wrap_resourced_notify, data);
+       proc_dbus_lcd_off(params);
+}
+
+static void test_booting_done_signal_handler(void **state)
+{
+       GVariant *params = g_variant_new("(i)", 0);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_BOOTING_DONE);
+       expect_any(__wrap_resourced_notify, data);
+       booting_done_signal_handler(params);
+}
+
+static void test_low_battery_signal_handler(void **state)
+{
+       GVariant *params = g_variant_new("(i)", 0);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_LOW_BATTERY);
+       expect_any(__wrap_resourced_notify, data);
+       low_battery_signal_handler(params);
+}
+
+enum proc_state __wrap_proc_check_suspend_state(struct proc_app_info *pai)
+{
+       check_expected(pai);
+       return mock_type(enum proc_state);
+}
+
+static void test_proc_dbus_suspend_hint(void **state)
+{
+       GVariant *params = g_variant_new("(i)", 0);
+       proc_dbus_suspend_hint(params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(i)", 1589);
+       struct proc_app_info pai;
+       pai.main_pid = 1589;
+
+       expect_value(__wrap_find_app_info, pid, 1589);
+       will_return(__wrap_find_app_info, &pai);
+
+       expect_value(__wrap_proc_check_suspend_state, pai, &pai);
+       will_return(__wrap_proc_check_suspend_state, PROC_STATE_DEFAULT);
+
+       proc_dbus_suspend_hint(params);
+
+       params = g_variant_new("(i)", 2589);
+       pai.main_pid = 2589;
+       expect_value(__wrap_find_app_info, pid, 2589);
+       will_return(__wrap_find_app_info, &pai);
+
+       expect_value(__wrap_proc_check_suspend_state, pai, &pai);
+       will_return(__wrap_proc_check_suspend_state, PROC_STATE_SUSPEND);
+
+       expect_value(__wrap_resourced_notify, status, RESOURCED_NOTIFIER_APP_SUSPEND);
+       expect_any(__wrap_resourced_notify, data);
+
+       proc_dbus_suspend_hint(params);
+}
+
+void __wrap_g_dbus_method_invocation_return_error(GDBusMethodInvocation *invocation, GQuark domain, gint code, const gchar *format)
+{
+       check_expected_ptr(invocation);
+       check_expected(domain);
+       check_expected(code);
+       check_expected_ptr(format);
+}
+
+void __wrap_proc_dbus_exclude_signal_handler(GVariant *params)
+{
+       check_expected_ptr(params);
+}
+
+static void test_proc_dbus_exclude_method_handler(void **state)
+{
+       GVariant *params = g_variant_new("(si)", NULL, 0);
+       GDBusMethodInvocation *inv = (GDBusMethodInvocation*)0x123123;
+
+       expect_value(__wrap_g_dbus_method_invocation_return_error, invocation, inv);
+       expect_value(__wrap_g_dbus_method_invocation_return_error, domain, G_DBUS_ERROR);
+       expect_value(__wrap_g_dbus_method_invocation_return_error, code, G_DBUS_ERROR_INVALID_ARGS);
+       expect_string(__wrap_g_dbus_method_invocation_return_error, format, "invalid arguments");
+
+       proc_dbus_exclude_method_handler(inv, params);
+       g_variant_unref(params);
+
+       params = g_variant_new("(si)", "str", 1);
+       expect_value(__wrap_g_dbus_method_invocation_get_message, invocation, inv);
+       will_return(__wrap_g_dbus_method_invocation_get_message, (GDBusMessage*)0x101010);
+
+       expect_value(__wrap_g_dbus_message_new_method_reply, method_call_message, 0x101010);
+       will_return(__wrap_g_dbus_message_new_method_reply, (GDBusMessage *)0x101010);
+
+       expect_value(__wrap_d_bus_reply_message, msg, (GDBusMessage *)0x101010);
+       will_return(__wrap_d_bus_reply_message, (GDBusMessage *)0x101010);
+
+       expect_any(__wrap_g_object_unref, object);
+       expect_any(__wrap_g_object_unref, object);
+
+       proc_dbus_exclude_method_handler(inv, params);
+       g_variant_unref(params);
+}
+
+int main(int argc, char* argv[])
+{
+       const struct CMUnitTest tests[] = {
+               cmocka_unit_test(test_proc_dbus_aul_group),
+               cmocka_unit_test(test_dbus_get_memory_lists),
+               cmocka_unit_test(test_dbus_get_app_memory),
+               cmocka_unit_test(test_dbus_get_app_cpu),
+               cmocka_unit_test(test_proc_dbus_aul_launch),
+               cmocka_unit_test(test_proc_dbus_exclude_appid_signal_handler),
+               cmocka_unit_test(test_proc_dbus_exclude_signal_handler),
+               cmocka_unit_test(test_proc_dbus_active_signal_handler),
+               cmocka_unit_test(test_proc_dbus_aul_changestate),
+               cmocka_unit_test(test_proc_dbus_aul_terminated),
+               cmocka_unit_test(test_proc_dbus_aul_resume),
+               cmocka_unit_test(test_proc_dbus_prelaunch_signal_handler),
+               cmocka_unit_test(test_proc_dbus_aul_terminate),
+               cmocka_unit_test(test_proc_dbus_lcd_on),
+               cmocka_unit_test(test_proc_dbus_lcd_off),
+               cmocka_unit_test(test_booting_done_signal_handler),
+               cmocka_unit_test(test_low_battery_signal_handler),
+               cmocka_unit_test(test_proc_dbus_suspend_hint),
+               cmocka_unit_test(test_proc_dbus_exclude_method_handler),
+       };
+       return cmocka_run_group_tests(tests, NULL, NULL);
+}