raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5b8e1a38f562ee3f1dd09075530ae155a16b0a99

commit 5b8e1a38f562ee3f1dd09075530ae155a16b0a99
Author: Mykola Solyanko <m.solya...@samsung.com>
Date:   Wed Feb 1 13:10:18 2017 +0900

    Eldbus: add test suite for eldbus (eldbus_object*)
    
    Summary:
    add tests for next API:
    eldbus_object_bus_name_get
    eldbus_object_connection_get
    eldbus_object_method_call_new
    eldbus_object_path_get
    eldbus_object_ref
    eldbus_object_send
    eldbus_object_get
    eldbus_object_introspect
    eldbus_object_peer_ping
    eldbus_object_peer_machine_id_get
    eldbus_object_get
    
    Reviewers: cedric, NikaWhite, myoungwoon, raster
    
    Subscribers: m.solyanko, jpeg, artem.popov
    
    Differential Revision: https://phab.enlightenment.org/D4635
---
 src/Makefile_Eldbus.am                       |   1 +
 src/tests/eldbus/CMakeLists.txt              |   1 +
 src/tests/eldbus/eldbus_suite.c              |   1 +
 src/tests/eldbus/eldbus_suite.h              |   1 +
 src/tests/eldbus/eldbus_test_eldbus_object.c | 409 +++++++++++++++++++++++++++
 5 files changed, 413 insertions(+)

diff --git a/src/Makefile_Eldbus.am b/src/Makefile_Eldbus.am
index b4e646c..e602042 100644
--- a/src/Makefile_Eldbus.am
+++ b/src/Makefile_Eldbus.am
@@ -131,6 +131,7 @@ tests/eldbus/eldbus_test_eldbus_model_object.c \
 tests/eldbus/eldbus_test_eldbus_model_proxy.c \
 tests/eldbus/eldbus_test_eldbus_model_method.c \
 tests/eldbus/eldbus_test_eldbus_model_signal.c \
+tests/eldbus/eldbus_test_eldbus_object.c \
 tests/eldbus/eldbus_test_fake_server_eldbus_model_proxy.c \
 tests/eldbus/eldbus_fake_server.c \
 tests/eldbus/eldbus_suite.h
diff --git a/src/tests/eldbus/CMakeLists.txt b/src/tests/eldbus/CMakeLists.txt
index df058f9..9192690 100644
--- a/src/tests/eldbus/CMakeLists.txt
+++ b/src/tests/eldbus/CMakeLists.txt
@@ -11,6 +11,7 @@ set(SOURCES
   eldbus_test_eldbus_model_object.c
   eldbus_test_eldbus_model_proxy.c
   eldbus_test_eldbus_model_signal.c
+  eldbus_test_eldbus_object.c
   eldbus_test_fake_server_eldbus_model_proxy.c
 )
 
diff --git a/src/tests/eldbus/eldbus_suite.c b/src/tests/eldbus/eldbus_suite.c
index dd79e33..4f3c6bb 100644
--- a/src/tests/eldbus/eldbus_suite.c
+++ b/src/tests/eldbus/eldbus_suite.c
@@ -14,6 +14,7 @@ static const Efl_Test_Case etc[] = {
   { "eldbus_test_fake_server_eldbus_model_proxy", 
eldbus_test_fake_server_eldbus_model_proxy },
   { "eldbus_model_method", eldbus_test_eldbus_model_method },
   { "eldbus_model_signal", eldbus_test_eldbus_model_signal },
+  { "eldbus_test_eldbus_object", eldbus_test_eldbus_object },
   { NULL, NULL }
 };
 
diff --git a/src/tests/eldbus/eldbus_suite.h b/src/tests/eldbus/eldbus_suite.h
index 5410fe4..efc47b3 100644
--- a/src/tests/eldbus/eldbus_suite.h
+++ b/src/tests/eldbus/eldbus_suite.h
@@ -11,5 +11,6 @@ void eldbus_test_eldbus_model_proxy(TCase *tc);
 void eldbus_test_fake_server_eldbus_model_proxy(TCase *tc);
 void eldbus_test_eldbus_model_method(TCase *tc);
 void eldbus_test_eldbus_model_signal(TCase *tc);
+void eldbus_test_eldbus_object(TCase *tc);
 
 #endif
diff --git a/src/tests/eldbus/eldbus_test_eldbus_object.c 
b/src/tests/eldbus/eldbus_test_eldbus_object.c
new file mode 100644
index 0000000..c679da4
--- /dev/null
+++ b/src/tests/eldbus/eldbus_test_eldbus_object.c
@@ -0,0 +1,409 @@
+#include <Eldbus.h>
+#include <Ecore.h>
+#include <string.h>
+#include <stdio.h>
+#include <Eina.h>
+
+#include "eldbus_suite.h"
+
+static Eina_Bool is_success = EINA_FALSE;
+static Eina_Bool is_register_service = EINA_FALSE;
+static Eina_Bool is_peer_ping = EINA_FALSE;
+
+static Ecore_Timer *timeout = NULL;
+
+static const char *empty_string = "";
+
+static const char *bus = "org.freedesktop.DBus";
+static const char *interface = "org.freedesktop.DBus";
+static const char *path = "/org/freedesktop/DBus";
+static const char *method_name = "GetId";
+
+static int cb_data = 5;
+
+/**
+* @addtogroup eldbus
+* @{
+* @defgroup eldbus_object
+*
+* @precondition
+* @step 1 Initialize ecore with ecore_init()
+* @step 2 Initialize eldbus with eldbus_init()
+*/
+
+static void
+_setup(void)
+{
+   ecore_init();
+   int ret = eldbus_init();
+   ck_assert_int_ge(ret, 1);
+}
+
+static void
+_teardown(void)
+{
+   ecore_shutdown();
+   int ret = eldbus_shutdown();
+   ck_assert_int_eq(ret, 0);
+}
+
+static Eina_Bool
+_ecore_loop_close(void *data EINA_UNUSED)
+{
+   ecore_main_loop_quit();
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_object_message_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending 
*pending EINA_UNUSED)
+{
+   if (timeout != NULL)
+     {
+        ecore_timer_del(timeout);
+        timeout = NULL;
+     }
+
+   const char *errname, *errmsg;
+   int *user_data = data;
+
+   if ((user_data) && (*user_data == cb_data))
+     {
+        if (!eldbus_message_error_get(msg, &errname, &errmsg))
+          {
+             char *txt;
+             if (eldbus_message_arguments_get(msg, "s", &txt))
+               {
+                  if ((txt) && strcmp(txt, empty_string))
+                    is_success = EINA_TRUE;
+               }
+          }
+     }
+
+   ecore_main_loop_quit();
+}
+
+static void
+_name_request(void *data EINA_UNUSED, const Eldbus_Message *msg, 
Eldbus_Pending *pending EINA_UNUSED)
+{
+   unsigned int reply;
+   const char *errname, *errmsg;
+   if (!eldbus_message_error_get(msg, &errname, &errmsg))
+     {
+        if (eldbus_message_arguments_get(msg, "u", &reply))
+          {
+             if (reply == ELDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
+               {
+                  is_register_service = EINA_TRUE;
+               }
+          }
+     }
+}
+
+static const Eldbus_Method methods[] = {
+      {
+        "Ping", NULL,
+        NULL, NULL, 0
+      },
+      {
+        "GetMachineId", NULL,
+        ELDBUS_ARGS({"s", "machine_id"}), NULL, 0
+      },
+      { }
+};
+
+static const Eldbus_Service_Interface_Desc iface_desc = {
+   "org.freedesktop.DBus.Peer", methods, NULL
+};
+
+static void
+_peer_ping_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending 
EINA_UNUSED)
+{
+   int *user_data = data;
+
+   if (user_data && (*user_data == cb_data))
+     {
+        if (!eldbus_message_error_get(msg, NULL, NULL))
+          {
+             is_peer_ping = EINA_TRUE;
+          }
+     }
+}
+
+static void
+_machine_id_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending 
EINA_UNUSED)
+{
+   int *user_data = data;
+
+   if (user_data && (*user_data == cb_data))
+     {
+        if (!eldbus_message_error_get(msg, NULL, NULL))
+          {
+             char *txt;
+             if (eldbus_message_arguments_get(msg, "s", &txt))
+               {
+                  if (txt && strcmp(txt, empty_string))
+                    {
+                       is_success = EINA_TRUE;
+                    }
+               }
+          }
+     }
+}
+
+/**
+ * @addtogroup eldbus_object
+ * @{
+ * @defgroup eldbus_object_send_info_get
+ * @li eldbus_object_bus_name_get()
+ * @li eldbus_object_connection_get()
+ * @li eldbus_object_method_call_new()
+ * @li eldbus_object_path_get()
+ * @li eldbus_object_ref()
+ * @li eldbus_object_send()
+ * @li eldbus_object_get()
+ * @{
+ * @objective Positive test case checks if functions get expected bus name,
+ * get Eldbus_Connection expected associated with Eldbus_Object object,
+ * get expected path associated with object,
+ * create message object and send a message to DBus service,
+ * increase object reference. Without segmentation fault.
+ *
+ * @n Input Data:
+ * @li the conn object connection with bus
+ * @li the obj Eldbus_Object object of the given bus and path.
+ *
+ * @procedure
+ * @step 1 Call eldbus_connection_get function to get connection object.
+ * @step 2 Check returned connection object on NULL.
+ * @step 3 Call eldbus_object_get get an object of the given bus and path.
+ * @step 4 Check returned object on NULL.
+ * @step 5 Call eldbus_object_bus_name_get function to get valid string and 
check on expected string.
+ * @step 6 Call eldbus_object_path_get function to get valid string and check 
on expected string.
+ * @step 7 Call eldbus_object_ref function to increase object reference.
+ * @step 8 Check two objects on the same address.
+ * @step 9 Call eldbus_object_unref function to decrease object reference.
+ * @step 10 Call eldbus_object_method_call_new function to call a dbus method 
on the object.
+ * @step 11 Check returned message object on NULL.
+ * @step 12 Call eldbus_object_send function to send a message.
+ * @step 13 Check returned pending object on NULL.
+ * @step 14 Set timer for preschedule termination of main loop if tested 
callback wasn't executed.
+ * @step 15 Start of main loop and wait for tested response in callback 
executing.
+ * @step 16 Check static variable named is_success.
+ * If is equal EINA_TRUE, that callback was executed and method send valid 
message response.
+ * @step 17 Call eldbus_message_unref function to delete message object
+ * @step 18 Call eldbus_object_unref function to delete connection dbus object
+ * @step 19 Call eldbus_connection_unref function to delete connection object
+ *
+ * @passcondition Function should get valid expected object information about 
service.
+ * Variables named is_success must equals EINA_TRUE. Without segmentation 
fault.
+ * @}
+ * @}
+ */
+
+START_TEST(utc_eldbus_object_send_info_get_p)
+{
+   is_success = EINA_FALSE;
+
+   Eldbus_Connection *conn = 
eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
+   ck_assert_ptr_ne(NULL, conn);
+
+   Eldbus_Object *obj = eldbus_object_get(conn, bus, path);
+   ck_assert_ptr_ne(NULL, obj);
+
+    const char *bus_from_object_ptr = eldbus_object_bus_name_get(obj);
+    ck_assert_msg((strcmp(bus, bus_from_object_ptr) == 0), "'%s' != '%s'", 
bus, bus_from_object_ptr);
+
+    const char *path_from_object_ptr = eldbus_object_path_get(obj);
+    ck_assert_msg((strcmp(path, path_from_object_ptr) == 0), "'%s' != '%s'", 
path, path_from_object_ptr);
+
+   Eldbus_Object *obj_ref = eldbus_object_ref(obj);
+   ck_assert_ptr_eq(obj_ref, obj);
+
+   eldbus_object_unref(obj_ref);
+
+   Eldbus_Connection *connection_obj = eldbus_object_connection_get(obj);
+   ck_assert_ptr_eq(connection_obj, conn);
+
+   Eldbus_Message *msg = eldbus_object_method_call_new(obj, interface, 
method_name);
+   ck_assert_ptr_ne(NULL, msg);
+
+   Eldbus_Pending *pending = eldbus_object_send(obj, msg, _object_message_cb, 
&cb_data, -1);
+   ck_assert_ptr_ne(NULL, pending);
+
+   timeout = ecore_timer_add(1.5, _ecore_loop_close, NULL);
+   ck_assert_ptr_ne(NULL, timeout);
+
+   ecore_main_loop_begin();
+
+   ck_assert_msg(is_success, "Method %s is not call", method_name);
+
+   eldbus_message_unref(msg);
+   eldbus_object_unref(obj);
+   eldbus_connection_unref(conn);
+}
+END_TEST
+
+/**
+ * @addtogroup eldbus_object
+ * @{
+ * @defgroup eldbus_introspect eldbus_object_introspect()
+ * @{
+ * @objective Positive test case checks if function call the method 
"Introspect"
+ * on the eldbus object and get valid response in callback function. Without 
segmentation fault.
+ *
+ * @n Input Data:
+ * @li the conn object connection with bus
+ * @li the obj Eldbus_Object object of the given bus and path.
+ *
+ * @procedure
+ * @step 1 Call eldbus_connection_get function to get connection object.
+ * @step 2 Check returned connection object on NULL.
+ * @step 3 Call eldbus_object_get to get an object of the given bus and path.
+ * @step 4 Check returned object on NULL.
+ * @step 5 Call eldbus_object_introspect functiont to call the method 
"Introspect" on the eldbus object.
+ * @step 6 Check returned pending object on NULL.
+ * @step 7 Set timer for preschedule termination of main loop if tested 
callback wasn't executed.
+ * @step 8 Start of main loop and wait for tested response in callback 
executing.
+ * @step 9 Check static variable named is_success.
+ * If is equal EINA_TRUE, that callback was executed and method send valid 
message response.
+ * @step 10 Call eldbus_object_unref function to delete connection dbus object.
+ * @step 11 Call eldbus_connection_unref function to delete connection object.
+ *
+ * @passcondition Variables named is_success must equals EINA_TRUE, and there 
is no segmentation fault.
+ * @}
+ * @}
+ */
+
+START_TEST(utc_eldbus_introspect_p)
+{
+   is_success = EINA_FALSE;
+
+   Eldbus_Connection *conn = 
eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
+   ck_assert_ptr_ne(NULL, conn);
+
+   Eldbus_Object *obj = eldbus_object_get(conn, bus, path);
+   ck_assert_ptr_ne(NULL, obj);
+
+   Eldbus_Pending *pending = eldbus_object_introspect(obj, _object_message_cb, 
&cb_data);
+   ck_assert_ptr_ne(NULL, pending);
+
+   timeout = ecore_timer_add(1.0, _ecore_loop_close, NULL);
+   ck_assert_ptr_ne(NULL, timeout);
+
+   ecore_main_loop_begin();
+
+   ck_assert_msg(is_success, "Method Introspect is not call");
+
+   eldbus_object_unref(obj);
+   eldbus_connection_unref(conn);
+}
+END_TEST
+
+/**
+ * @addtogroup eldbus_object
+ * @{
+ * @defgroup eldbus_object_peer
+ * @li eldbus_object_peer_ping()
+ * @li eldbus_object_peer_machine_id_get()
+ * @li eldbus_object_get()
+ * @{
+ * @objective Positive test case checks if function call the method "Ping",
+ * "GetMachineId" and get expected response without error. Without 
segmentation fault.
+ *
+ * @n Input Data:
+ * @li the conn_server object connection to server
+ * @li the conn_client object connection to client
+ * @li the iface object register an interface
+ *
+ * @procedure
+ * @step 1 Call eldbus_connection_get function to get server connection object.
+ * @step 2 Check returned connection object on NULL.
+ * @step 3 Call eldbus_service_interface_register function to register an 
interface.
+ * in the given path and connection.
+ * @step 4 Check returned interface object on NULL.
+ * @step 5 Call eldbus_name_request function to send a "RequestName" method 
call in proxy.
+ * @step 6 Check returned pending object on NULL.
+ * @step 7 Call eldbus_connection_get function to get client connection object.
+ * @step 8 Check returned connection object on NULL.
+ * @step 9 Call eldbus_object_get function to get an client object
+ * of the given bus and path.
+ * @step 10 Check returned object on NULL.
+ * @step 11 Call eldbus_object_peer_machine_id_get function to call the
+ * method "GetMachineId" on the dbus object.
+ * @step 12 Check returned pending object on NULL.
+ * @step 13 Call eldbus_object_peer_ping function to call the
+ * method "Ping" on the dbus object.
+ * @step 14 Check returned pending object on NULL.
+ * @step 15 Set timer for preschedule termination of main loop if tested 
callback wasn't executed.
+ * @step 16 Start of main loop and wait for tested response in callback 
executing.
+ * @step 17 Check static variables named is_success, is_register_service, 
is_peer_ping.
+ * If are equals 1, that callbacks were executed and methods send valid 
message response.
+ * In other cases error.
+ * @step 18 Call eldbus_object_unref function to delete connection dbus object.
+ * @step 19 Call eldbus_connection_unref function to delete client connection 
object.
+ * @step 20 Call eldbus_service_interface_unregister function to unregister a 
interface.
+ * @step 21 Call eldbus_connection_unref function to delete server connection 
object
+ *
+ * @passcondition Variables named is_success_cb, is_register_service, 
is_peer_ping must equals 1, and there is no segmentation fault.
+ * @}
+ * @}
+ */
+START_TEST(utc_eldbus_object_peer_p)
+{
+   const char *dbus_path = "/org/freedesktop/Test";
+   const char *bus_session = "org.freedesktop.Test";
+
+   is_success = EINA_FALSE;
+   is_register_service = EINA_FALSE;
+   is_peer_ping = EINA_FALSE;
+
+   Eldbus_Connection *conn_server = 
eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
+   ck_assert_ptr_ne(NULL, conn_server);
+
+   Eldbus_Service_Interface *iface = 
eldbus_service_interface_register(conn_server, dbus_path, &iface_desc);
+   ck_assert_ptr_ne(NULL, iface);
+
+   Eldbus_Pending *pending_name = eldbus_name_request(conn_server, 
bus_session, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
+                                                      _name_request, iface);
+   ck_assert_ptr_ne(NULL, pending_name);
+
+   Eldbus_Connection *conn_client = 
eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
+   ck_assert_ptr_ne(NULL, conn_client);
+
+   Eldbus_Object *obj = eldbus_object_get(conn_client, bus_session, dbus_path);
+   ck_assert_ptr_ne(NULL, obj);
+
+   Eldbus_Pending *pending1 = eldbus_object_peer_machine_id_get(obj, 
_machine_id_get, &cb_data);
+   ck_assert_ptr_ne(NULL, pending1);
+
+   Eldbus_Pending *pending2 = eldbus_object_peer_ping(obj, _peer_ping_cb, 
&cb_data);
+   ck_assert_ptr_ne(NULL, pending2);
+
+   timeout = ecore_timer_add(2.5, _ecore_loop_close, NULL);
+   ck_assert_ptr_ne(NULL, timeout);
+
+   ecore_main_loop_begin();
+
+   ck_assert_msg(is_register_service, "Can not register interface");
+   ck_assert_msg(is_peer_ping, "Method Ping is not call");
+   ck_assert_msg(is_success, "Method GetMachineId is not call");
+
+   eldbus_object_unref(obj);
+   eldbus_connection_unref(conn_client);
+   eldbus_service_interface_unregister(iface);
+   eldbus_connection_unref(conn_server);
+}
+END_TEST
+
+/**
+ *@}
+ */
+void
+eldbus_test_eldbus_object(TCase *tc)
+{
+   tcase_add_checked_fixture(tc, _setup, _teardown);
+   tcase_add_test(tc, utc_eldbus_object_send_info_get_p);
+   tcase_add_test(tc, utc_eldbus_introspect_p);
+   tcase_add_test(tc, utc_eldbus_object_peer_p);
+}

-- 


Reply via email to