add dbus connection flush after emit signal 29/302529/3
authorSukhyungKang <shine.kang@samsung.com>
Fri, 8 Dec 2023 05:31:35 +0000 (14:31 +0900)
committerSukhyungKang <shine.kang@samsung.com>
Fri, 8 Dec 2023 06:52:43 +0000 (15:52 +0900)
Change-Id: I6ffa14f3ca4c30b21cd3c1c372f7c16506c0fe60
Signed-off-by: SukhyungKang <shine.kang@samsung.com>
src/service_common.cc
tests/mock/gio_mock.cc
tests/mock/gio_mock.h
tests/unit_tests/src/test_notification_service.cc

index 529ae5b..4983cce 100644 (file)
@@ -285,18 +285,24 @@ int send_notify(GVariant *body, char *cmd, GHashTable **monitoring_hash,
           &err) == FALSE) {
       if (err != nullptr) {
         ERR("Emit signal err [%s]", err->message);
-        g_error_free(err);
+        g_clear_error(&err);
       }
       is_existed = is_existed_busname(target_bus_name);
       if (is_existed == false)
         delete_monitoring_list(monitoring_hash, target_bus_name, uid);
       ERR("Fail, emit signal to [%s]", target_bus_name);
     }
+
+    if (g_dbus_connection_flush_sync(_gdbus_conn, NULL, &err) == FALSE) {
+      ERR("Failed to flush connection[%s]", err ? err->message : "");
+      g_clear_error(&err);
+    }
+
     monitoring_count++;
-    DBG("Success, emit signal to [%s]", target_bus_name);
+    WARN("Success, emit signal to [%s]", target_bus_name);
   }
 
-  DBG("Success, cmd[%s] monitoring count[%d]", cmd, monitoring_count);
+  WARN("Success, cmd[%s] monitoring count[%d]", cmd, monitoring_count);
   return SERVICE_COMMON_ERROR_NONE;
 }
 
@@ -317,12 +323,20 @@ int send_event_notify_by_busname(GVariant *body, char *cmd, char *busname,
     if (err != nullptr) {
       ERR("Emit signal err [%s]",
           err->message);
-      g_error_free(err);
+      g_clear_error(&err);
     }
     ERR("Failed to emit signal to [%s]", busname);
     return SERVICE_COMMON_ERROR_IO_ERROR;
   }
-  DBG("Success, Emit signal to [%s] cmd[%s]", busname, cmd);
+
+  if (g_dbus_connection_flush_sync(_gdbus_conn, NULL, &err) == FALSE) {
+    ERR("Failed to flush connection[%s]", err ? err->message : "");
+    g_clear_error(&err);
+
+    return SERVICE_COMMON_ERROR_IO_ERROR;
+  }
+
+  WARN("Success, Emit signal to [%s] cmd[%s]", busname, cmd);
   return SERVICE_COMMON_ERROR_NONE;
 }
 
index 38979e2..c0e071b 100644 (file)
@@ -126,3 +126,8 @@ extern "C" GDBusConnection* g_bus_get_sync(GBusType type,
     GCancellable* cancellable, GError** error) {
   return MOCK_HOOK_P3(GioMock, g_bus_get_sync, type, cancellable, error);
 }
+
+extern "C" gboolean g_dbus_connection_flush_sync(GDBusConnection* arg0,
+    GCancellable* arg1, GError** arg2) {
+  return MOCK_HOOK_P3(GioMock, g_dbus_connection_flush_sync, arg0, arg1, arg2);
+}
index 3792e0d..6804628 100644 (file)
@@ -86,6 +86,9 @@ class GioMock : public virtual ModuleMock {
   MOCK_METHOD3(g_bus_get_sync,
       GDBusConnection*(GBusType, GCancellable*, GError**));
 
+  MOCK_METHOD3(g_dbus_connection_flush_sync,
+      gboolean(GDBusConnection*, GCancellable*, GError**));
+
 };
 
 #endif  // MOCK_GIO_MOCK_H_
\ No newline at end of file
index 17c3d00..ab86258 100644 (file)
@@ -438,6 +438,9 @@ TEST_F(NotificationServiceTest, notification_send_noti_event) {
   EXPECT_CALL(GetMock<GioMock>(),
       g_bus_watch_name(_, _, _, _, _, _, _))
       .WillOnce(Return(1));
+  EXPECT_CALL(GetMock<GioMock>(), g_dbus_connection_flush_sync(_, _, _))
+      .WillRepeatedly(Return(true));
+
   int ret = notification_reset_event_receiver(param2, &reply2, "sender");
   EXPECT_EQ(ret, NOTIFICATION_ERROR_NONE);
   ret = notification_send_noti_event(param, &reply);
@@ -460,6 +463,8 @@ TEST_F(NotificationServiceTest, notification_send_noti_event_by_priv_id) {
       .WillOnce(Return(1));
   EXPECT_CALL(GetMock<NotificationMock>(), notification_create(_))
       .WillOnce(Return(info));
+  EXPECT_CALL(GetMock<GioMock>(), g_dbus_connection_flush_sync(_, _, _))
+      .WillRepeatedly(Return(true));
   GVariant* param2 = g_variant_new("(i)", 20);
   GVariant* reply2;
   int ret = notification_reset_event_receiver(param2, &reply2, "sender");