Add unittest for badge 49/241049/5
authorSukHyung, Kang <shine.kang@samsung.com>
Fri, 14 Aug 2020 06:14:18 +0000 (15:14 +0900)
committerSukHyung, Kang <shine.kang@samsung.com>
Mon, 24 Aug 2020 04:31:03 +0000 (13:31 +0900)
Change-Id: I398efb3a576ea7416448febbdead494464e45696
Signed-off-by: SukHyung, Kang <shine.kang@samsung.com>
CMakeLists.txt
packaging/badge.spec
tests/CMakeLists.txt
tests/mock/gio_mock.cc
tests/mock/gio_mock.h
tests/unit_tests/src/test_badge.cc

index 2398072..541863a 100644 (file)
@@ -63,4 +63,11 @@ INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/
 INSTALL(FILES ${CMAKE_BINARY_DIR}/11_badge-add.post DESTINATION ${SYSCONF_INSTALL_DIR}/gumd/useradd.d/)
 INSTALL(TARGETS badge_init DESTINATION bin)
 
+IF(NOT DEFINED MINIMUM_BUILD)
 ADD_SUBDIRECTORY(tests)
+ENABLE_TESTING()
+SET(BADGE_UNIT_TESTS badge_unittests)
+ADD_TEST(NAME ${BADGE_UNIT_TESTS} COMMAND ${BADGE_UNIT_TESTS})
+
+ADD_DEPENDENCIES(${BADGE_UNIT_TESTS} badge)
+ENDIF(NOT DEFINED MINIMUM_BUILD)
index a6e8564..234b925 100644 (file)
@@ -94,7 +94,7 @@ find . -name '*.gcno' -exec cp '{}' gcov-obj ';'
 %endif
 
 %check
-ctest --output-on-failure %{?_smp_mflags}
+ctest -V
 %if 0%{?gcov:1}
 lcov -c --ignore-errors graph --no-external -q -d . -o badge.info
 genhtml badge.info -o badge.out
index 848994b..c90fac8 100644 (file)
@@ -1,8 +1 @@
-IF(NOT DEFINED MINIMUM_BUILD)
-ENABLE_TESTING()
-SET(BADGE_UNIT_TESTS badge_unittests)
-ADD_TEST(NAME ${BADGE_UNIT_TESTS} COMMAND ${BADGE_UNIT_TESTS})
-
 ADD_SUBDIRECTORY(unit_tests)
-ADD_DEPENDENCIES(${BADGE_UNIT_TESTS} badge)
-ENDIF(NOT DEFINED MINIMUM_BUILD)
index cd176fb..67f4fde 100644 (file)
@@ -47,34 +47,6 @@ extern "C" GVariant* g_dbus_message_get_body(GDBusMessage* arg0) {
   return MOCK_HOOK_P1(GioMock, g_dbus_message_get_body, arg0);
 }
 
-extern "C" gboolean g_dbus_connection_emit_signal(GDBusConnection* arg0,
-    const gchar* arg1, const gchar* arg2, const gchar* arg3, const gchar* arg4,
-    GVariant* arg5, GError** arg6) {
-  return MOCK_HOOK_P7(GioMock, g_dbus_connection_emit_signal,
-      arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-}
-
-extern "C" GDBusNodeInfo* g_dbus_node_info_new_for_xml(
-    const gchar* arg0, GError** arg1) {
-  return MOCK_HOOK_P2(GioMock, g_dbus_node_info_new_for_xml, arg0, arg1);
-}
-
-extern "C" guint g_dbus_connection_register_object(GDBusConnection* arg0,
-    const gchar* arg1, GDBusInterfaceInfo* arg2,
-    const GDBusInterfaceVTable* arg3, gpointer arg4,
-    GDestroyNotify arg5, GError** arg6) {
-  return MOCK_HOOK_P7(GioMock, g_dbus_connection_register_object,
-      arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-}
-
-extern "C" guint g_bus_own_name_on_connection(GDBusConnection* arg0,
-    const gchar* arg1, GBusNameOwnerFlags arg2,
-    GBusNameAcquiredCallback arg3, GBusNameLostCallback arg4,
-    gpointer arg5, GDestroyNotify arg6) {
-  return MOCK_HOOK_P7(GioMock, g_bus_own_name_on_connection,
-      arg0, arg1, arg2, arg3, arg4, arg5, arg6);
-}
-
 extern "C" guint g_dbus_connection_signal_subscribe(GDBusConnection* arg0,
     const gchar* arg1, const gchar* arg2, const gchar* arg3, const gchar* arg4,
     const gchar* arg5, GDBusSignalFlags arg6, GDBusSignalCallback arg7,
@@ -91,8 +63,26 @@ extern "C" void g_dbus_connection_send_message_with_reply(GDBusConnection* arg0,
       arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
 }
 
-extern "C" GDBusMessage* g_dbus_connection_send_message_with_reply_finish(
-  GDBusConnection* arg0, GAsyncResult* arg1, GError** arg2) {
-  return MOCK_HOOK_P3(GioMock, g_dbus_connection_send_message_with_reply_finish,
-      arg0, arg1, arg2);
+extern "C" gboolean g_dbus_message_to_gerror(
+    GDBusMessage* arg0, GError** arg1) {
+  return MOCK_HOOK_P2(GioMock, g_dbus_message_to_gerror,
+      arg0, arg1);
+}
+
+extern "C" guint g_bus_watch_name_on_connection(
+    GDBusConnection* arg0, const gchar* arg1, GBusNameWatcherFlags arg2,
+    GBusNameAppearedCallback arg3, GBusNameVanishedCallback arg4,
+    gpointer arg5, GDestroyNotify arg6) {
+  return MOCK_HOOK_P7(GioMock, g_bus_watch_name_on_connection,
+      arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+extern "C" void g_bus_unwatch_name(guint arg0) {
+  return MOCK_HOOK_P1(GioMock, g_bus_unwatch_name, arg0);
+}
+
+extern "C" void g_dbus_connection_signal_unsubscribe(
+    GDBusConnection* arg0, guint arg1) {
+  return MOCK_HOOK_P2(GioMock, g_dbus_connection_signal_unsubscribe,
+      arg0, arg1);
 }
index ab343d0..298ce50 100644 (file)
@@ -28,25 +28,13 @@ class GioMock : public virtual ModuleMock {
 
   MOCK_METHOD3(g_bus_get_sync,
       GDBusConnection*(GBusType, GCancellable*, GError**));
-  MOCK_METHOD7(g_bus_own_name_on_connection,
-      guint(GDBusConnection*, const gchar*, GBusNameOwnerFlags,
-          GBusNameAcquiredCallback, GBusNameLostCallback,
-          gpointer, GDestroyNotify));
-
   MOCK_METHOD4(g_dbus_message_new_method_call,
       GDBusMessage*(const gchar*, const gchar*, const gchar*, const gchar*));
   MOCK_METHOD2(g_dbus_message_set_body, void(GDBusMessage*, GVariant*));
   MOCK_METHOD1(g_dbus_message_get_body, GVariant*(GDBusMessage*));
-
   MOCK_METHOD7(g_dbus_connection_send_message_with_reply_sync,
       GDBusMessage*(GDBusConnection*, GDBusMessage*, GDBusSendMessageFlags,
           gint, volatile guint32*, GCancellable*, GError**));
-  MOCK_METHOD7(g_dbus_connection_emit_signal,
-      gboolean(GDBusConnection*, const gchar*, const gchar*, const gchar*,
-          const gchar*, GVariant*, GError**));
-  MOCK_METHOD7(g_dbus_connection_register_object,
-      guint(GDBusConnection*, const gchar*, GDBusInterfaceInfo*,
-          const GDBusInterfaceVTable*, gpointer, GDestroyNotify, GError**));
   MOCK_METHOD10(g_dbus_connection_signal_subscribe,
       guint(GDBusConnection*, const gchar*, const gchar*, const gchar*,
           const gchar*, const gchar*, GDBusSignalFlags, GDBusSignalCallback,
@@ -54,14 +42,15 @@ class GioMock : public virtual ModuleMock {
   MOCK_METHOD8(g_dbus_connection_send_message_with_reply,
       void(GDBusConnection*, GDBusMessage*, GDBusSendMessageFlags, gint,
           volatile guint32*, GCancellable*, GAsyncReadyCallback, gpointer));
-  MOCK_METHOD3(g_dbus_connection_send_message_with_reply_finish,
-      GDBusMessage*(GDBusConnection*, GAsyncResult*, GError**));
-
-  MOCK_METHOD2(g_dbus_node_info_new_for_xml,
-      GDBusNodeInfo*(const gchar*, GError**));
-
-  MOCK_METHOD2(g_dbus_method_invocation_return_value,
-      GDBusNodeInfo*(GDBusMethodInvocation*, GVariant*));
+  MOCK_METHOD2(g_dbus_message_to_gerror,
+      gboolean(GDBusMessage*, GError**));
+  MOCK_METHOD7(g_bus_watch_name_on_connection,
+      guint(GDBusConnection*, const gchar*, GBusNameWatcherFlags,
+          GBusNameAppearedCallback, GBusNameVanishedCallback, gpointer,
+          GDestroyNotify));
+  MOCK_METHOD1(g_bus_unwatch_name, void(guint));
+  MOCK_METHOD2(g_dbus_connection_signal_unsubscribe,
+          void(GDBusConnection*, guint));
 };
 
 #endif  // MOCK_GIO_MOCK_H_
index cc531d5..0288c18 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <stdlib.h>
 #include <gtest/gtest.h>
-#include <badge.h>
+#include "badge.h"
 
 #include <memory>
 
@@ -30,14 +30,11 @@ using ::testing::_;
 using ::testing::DoAll;
 using ::testing::Return;
 using ::testing::SetArgPointee;
-using ::testing::Invoke;
-using ::testing::SetArrayArgument;
 
 class Mocks : public ::testing::NiceMock<SystemInfoMock>,
-  ::testing::NiceMock<GioMock>,
-  ::testing::NiceMock<AulMock>,
-  ::testing::NiceMock<PackageManagerMock> {
-};
+              public ::testing::NiceMock<GioMock>,
+              public ::testing::NiceMock<AulMock>,
+              public ::testing::NiceMock<PackageManagerMock> {};
 
 class BadgeTest : public TestFixture {
  public:
@@ -50,3 +47,374 @@ class BadgeTest : public TestFixture {
   virtual void TearDown() {
   }
 };
+
+TEST_F(BadgeTest, badge_new) {
+  int ret;
+  bool is_supported = true;
+  char *_pkgid = (char *)"mypkgid";
+  GDBusConnection *_conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                            Return(0)));
+
+  EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_pkgname_bypid(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_bus_get_sync(_, _, _)).
+      WillOnce(Return(_conn));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_new("testappid");
+
+  g_object_unref(_conn);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_add) {
+  int ret;
+  bool is_supported = true;
+  char *_pkgid = (char *)"mypkgid";
+  package_manager_compare_result_type_e comp_ret = PACKAGE_MANAGER_COMPARE_MATCH;
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_pkgname_bypid(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<PackageManagerMock>(),
+      package_manager_compare_app_cert_info(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<2>(comp_ret),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_add("myappid");
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_remove) {
+  int ret;
+  bool is_supported = true;
+  char *_pkgid = (char *)"mypkgid";
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_pkgname_bypid(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_remove("myappid");
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_set_count) {
+  int ret;
+  bool is_supported = true;
+  char *_pkgid = (char *)"mypkgid";
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_pkgname_bypid(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_set_count("myappid", 9);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_get_count) {
+  int ret;
+  bool is_supported = true;
+  unsigned int count = 0;
+  GVariant *body = g_variant_new("(i)", 3);
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_get_body(_)).
+      WillOnce(Return(body));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_get_count("myappid", &count);
+
+  if (body)
+    g_variant_unref(body);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_set_display) {
+  int ret;
+  bool is_supported = true;
+  char *_pkgid = (char *)"mypkgid";
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_pkgname_bypid(_, _, _)).
+      WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
+                      Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_set_display("myappid", 1);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_get_display) {
+  int ret;
+  bool is_supported = true;
+  unsigned int is_display = 0;
+  GVariant *body = g_variant_new("(i)", 1);
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_get_body(_)).
+      WillOnce(Return(body));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_get_display("myappid", &is_display);
+
+  if (body)
+    g_variant_unref(body);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+bool _badge_foreach_cb(const char *app_id, unsigned int count, void *user_data) {
+  return true;
+}
+
+TEST_F(BadgeTest, badge_foreach) {
+  int ret;
+  bool is_supported = true;
+  GVariant *body = g_variant_new("(a(v))", NULL);
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+          _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_get_body(_)).
+      WillOnce(Return(body));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillOnce(Return(FALSE));
+
+  ret = badge_foreach(_badge_foreach_cb, NULL);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+void _badge_change_cb(unsigned int action, const char *app_id,
+      unsigned int count, void *user_data) {
+}
+
+TEST_F(BadgeTest, badge_register_changed_cb) {
+  int ret;
+  bool is_supported = true;
+  GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+  GDBusMessage *_msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_signal_subscribe(
+        _, _, _, _, _, _, _, _, _, _)).
+      WillOnce(Return(99));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_new_method_call(_, _, _, _)).
+      WillOnce(Return(_msg)).
+      WillOnce(Return(_msg2));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_send_message_with_reply_sync(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(_msg3)).
+      WillOnce(Return(_msg4));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_message_to_gerror(_, _)).
+      WillRepeatedly(Return(FALSE));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_bus_watch_name_on_connection(
+        _, _, _, _, _, _, _)).
+      WillOnce(Return(88));
+
+  ret = badge_register_changed_cb(_badge_change_cb, NULL);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}
+
+TEST_F(BadgeTest, badge_unregister_changed_cb) {
+  int ret;
+  bool is_supported = true;
+
+  EXPECT_CALL(GetMock<SystemInfoMock>(),
+      system_info_get_platform_bool(_, _)).
+      WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
+                Return(0)));
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_bus_unwatch_name(_)).
+      Times(1);
+
+  EXPECT_CALL(GetMock<GioMock>(),
+      g_dbus_connection_signal_unsubscribe(_, _)).
+      Times(1);
+
+  ret = badge_unregister_changed_cb(_badge_change_cb);
+
+  EXPECT_EQ(ret, BADGE_ERROR_NONE);
+}