[ACR-1659] Add cion UTC 48/266348/2
authorSangyoon Jang <jeremy.jang@samsung.com>
Thu, 23 Sep 2021 10:12:53 +0000 (19:12 +0900)
committerSukhyungKang <shine.kang@samsung.com>
Thu, 11 Nov 2021 06:37:50 +0000 (15:37 +0900)
Change-Id: I071c200f3ac44f8997c13632d713a8ce4517576b
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
Signed-off-by: jusung <jusung07.son@samsung.com>
16 files changed:
packaging/utc/core-cion-tests.xml [new file with mode: 0644]
src/utc/cion/CMakeLists.txt [new file with mode: 0644]
src/utc/cion/assert_common.h [new file with mode: 0755]
src/utc/cion/tct-cion-core.c [new file with mode: 0644]
src/utc/cion/tct-cion-core_mobile.h [new file with mode: 0644]
src/utc/cion/tct-cion-core_tizeniot.h [new file with mode: 0644]
src/utc/cion/tct-cion-core_tv.h [new file with mode: 0644]
src/utc/cion/tct-cion-core_wearable.h [new file with mode: 0644]
src/utc/cion/utc-cion-client.c [new file with mode: 0644]
src/utc/cion/utc-cion-connection_result.c [new file with mode: 0644]
src/utc/cion/utc-cion-group.c [new file with mode: 0644]
src/utc/cion/utc-cion-payload.c [new file with mode: 0644]
src/utc/cion/utc-cion-payload_async_result.c [new file with mode: 0644]
src/utc/cion/utc-cion-peer_info.c [new file with mode: 0644]
src/utc/cion/utc-cion-security.c [new file with mode: 0644]
src/utc/cion/utc-cion-server.c [new file with mode: 0644]

diff --git a/packaging/utc/core-cion-tests.xml b/packaging/utc/core-cion-tests.xml
new file mode 100644 (file)
index 0000000..d364487
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="core-cion-tests" version="0.1.0" api-version="3.0">
+       <label>CoreCionTest</label>
+       <author email="test@tizen.org" href="www.tizen.org">test</author>
+       <description>Core API test Application</description>
+       <ui-application appid="core.cion-tests" exec="/usr/apps/core-cion-tests/bin/tct-cion-core" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+               <background-category value="background-network"/>
+               <background-category value="download"/>
+               <background-category value="iot-communication"/>
+               <background-category value="location"/>
+               <background-category value="media"/>
+               <background-category value="sensor"/>
+       </ui-application>
+       <privileges>
+               <privilege>http://tizen.org/privilege/d2d.datasharing</privilege>
+               <privilege>http://tizen.org/privilege/d2d.remotelaunch</privilege>
+               <privilege>http://tizen.org/privilege/internet</privilege>
+       </privileges>
+</manifest>
diff --git a/src/utc/cion/CMakeLists.txt b/src/utc/cion/CMakeLists.txt
new file mode 100644 (file)
index 0000000..60ffbde
--- /dev/null
@@ -0,0 +1,49 @@
+SET(PKG_NAME "cion")
+
+SET(EXEC_NAME "tct-${PKG_NAME}-core")
+SET(RPM_NAME "core-${PKG_NAME}-tests")
+
+SET(CAPI_LIB "cion")
+SET(TC_SOURCES
+       utc-cion.c
+       utc-cion-client.c
+       utc-cion-connection_result.c
+       utc-cion-group.c
+       utc-cion-security.c
+       utc-cion-server.c
+       utc-cion-payload.c
+       utc-cion-payload_async_result.c
+       utc-cion-peer_info.c
+)
+
+PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED
+       ${CAPI_LIB}
+       capi-appfw-application
+       capi-system-info
+       glib-2.0
+       bundle
+       dlog
+       elementary
+)
+
+INCLUDE_DIRECTORIES(
+       ${${CAPI_LIB}_INCLUDE_DIRS}
+)
+
+ADD_EXECUTABLE(${EXEC_NAME} ${EXEC_NAME}.c ${TC_SOURCES} ${COMMON_FILE})
+TARGET_LINK_LIBRARIES(${EXEC_NAME}
+       ${${CAPI_LIB}_LIBRARIES}
+       bundle
+)
+
+INSTALL(PROGRAMS ${EXEC_NAME}
+       DESTINATION ${BIN_DIR}/${RPM_NAME}/bin
+)
+
+IF( DEFINED ASAN )
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -pie -g -fsanitize=address -fsanitize-recover=address -U_FORTIFY_SOURCE -fno-omit-frame-pointer")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -Wl,-fsanitize=address")
+ELSE()
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fPIE -Wall")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib -pie")
+ENDIF()
diff --git a/src/utc/cion/assert_common.h b/src/utc/cion/assert_common.h
new file mode 100755 (executable)
index 0000000..40e748e
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef __ASSERT_COMMON_H__
+#define __ASSERT_COMMON_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <app.h>
+#include <dlog.h>
+
+int utc_result;
+
+#define assert_with_exit(exp) do { \
+               if (!(exp)) { \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Following expression is not true:\n" \
+                               "%s\n", #exp); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_eq_with_exit(var, ref) do { \
+               if (var != ref) { \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Values \"%s\" and \"%s\" are not equal:\n" \
+                               "%s == %d, %s == %d\n", \
+                               #var, #ref, #var, var, #ref, ref); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_neq_with_exit(var, ref) do { \
+               if (var == ref) { \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Values \"%s\" and \"%s\" are equal:\n" \
+                               "%s == %s == %d\n", \
+                               #var, #ref, #var, #ref, ref); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_eq_without_exit(var, ref) do { \
+               if (var != ref) { \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Values \"%s\" and \"%s\" are not equal:\n" \
+                               "%s == %d, %s == %d\n", \
+                               #var, #ref, #var, var, #ref, ref); \
+                       utc_result = 1; \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_neq_without_exit(var, ref) do { \
+               if (var == ref) { \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       dlog_print(DLOG_ERROR, LOG_TAG, \
+                               "Values \"%s\" and \"%s\" are equal:\n" \
+                               "%s == %s == %d\n", \
+                               #var, #ref, #var, #ref, ref); \
+                       utc_result = 1; \
+                       return 1; \
+               } \
+       } while (0)
+
+#define normal_exit(result) do { \
+               utc_result = result; \
+               ui_app_exit(); \
+       } while (0)
+
+#endif /* __ASSERT_COMMON_H__ */
diff --git a/src/utc/cion/tct-cion-core.c b/src/utc/cion/tct-cion-core.c
new file mode 100644 (file)
index 0000000..e29f1b7
--- /dev/null
@@ -0,0 +1,136 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "tct_common.h"
+
+#ifdef MOBILE  //Starts MOBILE
+#include "tct-cion-core_mobile.h"
+#endif  //MOBILE       //End MOBILE
+
+#ifdef WEARABLE        //Starts WEARABLE
+#include "tct-cion-core_wearable.h"
+#endif  //WEARABLE     //End WEARABLE
+
+#ifdef TV      //Starts TV
+#include "tct-cion-core_tv.h"
+#endif  //TV   //End TV
+
+#ifdef TIZENIOT        //Starts TIZENIOT
+#include "tct-cion-core_tizeniot.h"
+#endif  //TIZENIOT     //End TIZENIOT
+
+#include <stdio.h>
+#include <string.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <glib.h>
+#include <stdbool.h>
+#include <app.h>
+#include <dlog.h>
+
+#include <Elementary.h>
+
+typedef struct appdata {
+       Evas_Object *win;
+       Evas_Object *conform;
+       Evas_Object *label;
+} appdata_s;
+
+static bool app_create(void *data)
+{
+       return true;
+}
+
+static void app_control(app_control_h app_control, void *data)
+{
+       char* pszGetTCName = NULL;
+       int i=0, result=0, nRet=0;
+       nRet = app_control_get_extra_data(app_control, "testcase_name", &pszGetTCName);
+       if(nRet != APP_CONTROL_ERROR_NONE)
+       {
+               return;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName);
+       for ( i = 0; tc_array[i].name; i++ )
+       {
+               if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) )
+               {
+                       DUMP_UTC_ERRLOG();
+                       if ( tc_array[i].startup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Start up", pszGetTCName);
+                               tc_array[i].startup();
+                       }
+
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body", pszGetTCName);
+                       result = tc_array[i].function();
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result);
+
+                       if ( tc_array[i].cleanup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Clean up", pszGetTCName);
+                               tc_array[i].cleanup();
+                       }
+
+                       CLOSE_UTC_ERRLOG();
+                       PRINT_TC_RESULT("%d",result);
+                       FREE_MEMORY_TC(pszGetTCName);
+                       return;
+               }
+       }
+
+       dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] Unable to execute %s : Unknown Test Case Name", __FUNCTION__, __LINE__, pszGetTCName);
+       PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to execute %s : Unknown Test Case Name\\n", __FILE__, __LINE__, pszGetTCName);
+       PRINT_TC_RESULT("%d",1);
+       FREE_MEMORY_TC(pszGetTCName);
+       return;
+}
+
+static void app_terminate(void *data)
+{
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is now Terminating", __FUNCTION__, __LINE__);
+}
+
+int main(int argc, char *argv[])
+{
+       int ret = 0;
+       appdata_s ad = {0,};
+
+       ui_app_lifecycle_callback_s event_callback = {0,};
+       event_callback.create = app_create;
+       event_callback.terminate = app_terminate;
+       event_callback.app_control = app_control;
+
+       //setting gcda file location for coverage
+       setenv("GCOV_PREFIX","/tmp",1);
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Coverage *.gcda File location set to /tmp/home/abuild/rpmbuild/BUILD/ ", __FUNCTION__, __LINE__);
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Main Function is Invoked", __FUNCTION__, __LINE__);
+       ret = ui_app_main(argc, argv, &event_callback, &ad);
+       if (ret != APP_ERROR_NONE)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "Application ui_app_main call gets failed. err = %d", ret);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Application ui_app_main call gets failed. err = %d\\n", __FILE__, __LINE__, ret);
+               PRINT_TC_RESULT("%d",1);
+               return ret;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is Terminated", __FUNCTION__, __LINE__);
+       return ret;
+}
diff --git a/src/utc/cion/tct-cion-core_mobile.h b/src/utc/cion/tct-cion-core_mobile.h
new file mode 100644 (file)
index 0000000..9da6b88
--- /dev/null
@@ -0,0 +1,358 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_CION_NATIVE_H__
+#define __TCT_CION_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+extern void utc_cion_group_startup(void);
+extern void utc_cion_group_cleanup(void);
+extern int utc_cion_group_create_p(void);
+extern int utc_cion_group_create_n(void);
+extern int utc_cion_group_destroy_p(void);
+extern int utc_cion_group_destroy_n(void);
+extern int utc_cion_group_subscribe_p(void);
+extern int utc_cion_group_subscribe_n(void);
+extern int utc_cion_group_unsubscribe_p(void);
+extern int utc_cion_group_unsubscribe_n(void);
+extern int utc_cion_group_publish_p(void);
+extern int utc_cion_group_publish_n(void);
+
+extern void utc_cion_server_startup(void);
+extern void utc_cion_server_cleanup(void);
+extern int utc_cion_server_create_p(void);
+extern int utc_cion_server_create_n(void);
+extern int utc_cion_server_destroy_p(void);
+extern int utc_cion_server_destroy_n(void);
+extern int utc_cion_server_listen_p(void);
+extern int utc_cion_server_listen_n(void);
+extern int utc_cion_server_stop_p(void);
+extern int utc_cion_server_stop_n(void);
+extern int utc_cion_server_disconnect_p(void);
+extern int utc_cion_server_disconnect_n(void);
+extern int utc_cion_server_send_payload_async_p(void);
+extern int utc_cion_server_send_payload_async_n(void);
+extern int utc_cion_server_foreach_connected_peer_info_p(void);
+extern int utc_cion_server_foreach_connected_peer_info_n(void);
+extern int utc_cion_server_add_connection_result_cb_p(void);
+extern int utc_cion_server_add_connection_result_cb_n(void);
+extern int utc_cion_server_remove_connection_result_cb_p(void);
+extern int utc_cion_server_remove_connection_result_cb_n(void);
+extern int utc_cion_server_add_payload_received_cb_p(void);
+extern int utc_cion_server_add_payload_received_cb_n(void);
+extern int utc_cion_server_remove_payload_received_cb_p(void);
+extern int utc_cion_server_remove_payload_received_cb_n(void);
+extern int utc_cion_server_set_data_received_cb_p(void);
+extern int utc_cion_server_set_data_received_cb_n(void);
+extern int utc_cion_server_unset_data_received_cb_p(void);
+extern int utc_cion_server_unset_data_received_cb_n(void);
+extern int utc_cion_server_add_disconnected_cb_p(void);
+extern int utc_cion_server_add_disconnected_cb_n(void);
+extern int utc_cion_server_remove_disconnected_cb_p(void);
+extern int utc_cion_server_remove_disconnected_cb_n(void);
+extern int utc_cion_server_accept_p(void);
+extern int utc_cion_server_accept_n(void);
+extern int utc_cion_server_reject_p(void);
+extern int utc_cion_server_reject_n(void);
+extern int utc_cion_server_set_display_name_p(void);
+extern int utc_cion_server_set_display_name_n(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_p(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_n(void);
+
+extern void utc_cion_client_startup(void);
+extern void utc_cion_client_cleanup(void);
+extern int utc_cion_client_create_p(void);
+extern int utc_cion_client_create_n(void);
+extern int utc_cion_client_destroy_p(void);
+extern int utc_cion_client_destroy_n(void);
+extern int utc_cion_client_try_discovery_p(void);
+extern int utc_cion_client_try_discovery_n(void);
+extern int utc_cion_client_stop_discovery_p(void);
+extern int utc_cion_client_stop_discovery_n(void);
+extern int utc_cion_client_connect_p(void);
+extern int utc_cion_client_connect_n(void);
+extern int utc_cion_client_disconnect_p(void);
+extern int utc_cion_client_disconnect_n(void);
+extern int utc_cion_client_send_data_p(void);
+extern int utc_cion_client_send_data_n(void);
+extern int utc_cion_client_send_payload_async_p(void);
+extern int utc_cion_client_send_payload_async_n(void);
+extern int utc_cion_client_add_connection_result_cb_p(void);
+extern int utc_cion_client_add_connection_result_cb_n(void);
+extern int utc_cion_client_remove_connection_result_cb_p(void);
+extern int utc_cion_client_remove_connection_result_cb_n(void);
+extern int utc_cion_client_add_payload_received_cb_p(void);
+extern int utc_cion_client_add_payload_received_cb_n(void);
+extern int utc_cion_client_remove_payload_received_cb_p(void);
+extern int utc_cion_client_remove_payload_received_cb_n(void);
+extern int utc_cion_client_add_disconnected_cb_p(void);
+extern int utc_cion_client_add_disconnected_cb_n(void);
+extern int utc_cion_client_remove_disconnected_cb_p(void);
+extern int utc_cion_client_remove_disconnected_cb_n(void);
+
+extern void utc_cion_peer_info_startup(void);
+extern void utc_cion_peer_info_cleanup(void);
+extern int utc_cion_peer_info_clone_p(void);
+extern int utc_cion_peer_info_clone_n(void);
+
+extern int utc_cion_peer_info_get_device_id_p(void);
+extern int utc_cion_peer_info_get_device_id_n(void);
+extern int utc_cion_peer_info_get_device_name_p(void);
+extern int utc_cion_peer_info_get_device_name_n(void);
+extern int utc_cion_peer_info_get_device_platform_p(void);
+extern int utc_cion_peer_info_get_device_platform_n(void);
+extern int utc_cion_peer_info_get_device_platform_version_p(void);
+extern int utc_cion_peer_info_get_device_platform_version_n(void);
+extern int utc_cion_peer_info_get_device_type_p(void);
+extern int utc_cion_peer_info_get_device_type_n(void);
+extern int utc_cion_peer_info_get_app_id_p(void);
+extern int utc_cion_peer_info_get_app_id_n(void);
+extern int utc_cion_peer_info_get_app_version_p(void);
+extern int utc_cion_peer_info_get_app_version_n(void);
+extern int utc_cion_peer_info_get_uuid_p(void);
+extern int utc_cion_peer_info_get_uuid_n(void);
+extern int utc_cion_peer_info_get_display_name_p(void);
+extern int utc_cion_peer_info_get_display_name_n(void);
+
+extern int utc_cion_peer_info_destroy_p(void);
+extern int utc_cion_peer_info_destroy_n(void);
+
+extern void utc_cion_payload_startup(void);
+extern void utc_cion_payload_cleanup(void);
+extern int utc_cion_payload_create_p(void);
+extern int utc_cion_payload_create_n(void);
+extern int utc_cion_payload_destroy_p(void);
+extern int utc_cion_payload_destroy_n(void);
+extern int utc_cion_payload_get_type_p(void);
+extern int utc_cion_payload_get_type_n(void);
+extern int utc_cion_payload_get_data_p(void);
+extern int utc_cion_payload_get_data_n(void);
+extern int utc_cion_payload_set_data_p(void);
+extern int utc_cion_payload_set_data_n(void);
+extern int utc_cion_payload_save_as_file_p(void);
+extern int utc_cion_payload_save_as_file_n(void);
+extern int utc_cion_payload_get_received_file_name_p(void);
+extern int utc_cion_payload_get_received_file_name_n(void);
+extern int utc_cion_payload_get_received_bytes_p(void);
+extern int utc_cion_payload_get_received_bytes_n(void);
+extern int utc_cion_payload_get_total_bytes_p(void);
+extern int utc_cion_payload_get_total_bytes_n(void);
+extern int utc_cion_payload_set_file_path_p(void);
+extern int utc_cion_payload_set_file_path_n(void);
+extern int utc_cion_payload_get_payload_id_p(void);
+extern int utc_cion_payload_get_payload_id_n(void);
+
+extern void utc_cion_payload_async_result_startup(void);
+extern void utc_cion_payload_async_result_cleanup(void);
+extern int utc_cion_payload_async_result_clone_p(void);
+extern int utc_cion_payload_async_result_clone_n(void);
+extern int utc_cion_payload_async_result_destroy_p(void);
+extern int utc_cion_payload_async_result_destroy_n(void);
+extern int utc_cion_payload_async_result_get_peer_info_p(void);
+extern int utc_cion_payload_async_result_get_peer_info_n(void);
+extern int utc_cion_payload_async_result_get_payload_id_p(void);
+extern int utc_cion_payload_async_result_get_payload_id_n(void);
+
+extern void utc_cion_connection_result_startup(void);
+extern void utc_cion_connection_result_cleanup(void);
+extern int utc_cion_connection_result_get_status_p(void);
+extern int utc_cion_connection_result_get_status_n(void);
+extern int utc_cion_connection_result_get_reason_p(void);
+extern int utc_cion_connection_result_get_reason_n(void);
+
+extern void utc_cion_security_startup(void);
+extern void utc_cion_security_cleanup(void);
+extern int utc_cion_security_create_p(void);
+extern int utc_cion_security_create_n(void);
+extern int utc_cion_security_destory_p(void);
+extern int utc_cion_security_destory_n(void);
+extern int utc_cion_security_set_ca_path_p(void);
+extern int utc_cion_security_set_ca_path_n(void);
+extern int utc_cion_security_set_cert_path_p(void);
+extern int utc_cion_security_set_cert_path_n(void);
+extern int utc_cion_security_set_private_key_path_p(void);
+extern int utc_cion_security_set_private_key_path_n(void);
+extern int utc_cion_security_get_ca_path_p(void);
+extern int utc_cion_security_get_ca_path_n(void);
+extern int utc_cion_security_get_cert_path_p(void);
+extern int utc_cion_security_get_cert_path_n(void);
+extern int utc_cion_security_get_private_key_path_p(void);
+extern int utc_cion_security_get_private_key_path_n(void);
+
+testcase tc_array[] = {
+    {"utc_cion_group_create_p", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_create_n", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_p", utc_cion_group_destroy_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_n", utc_cion_group_destroy_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_p", utc_cion_group_subscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_n", utc_cion_group_subscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_p", utc_cion_group_unsubscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_n", utc_cion_group_unsubscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_p", utc_cion_group_publish_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_n", utc_cion_group_publish_n, utc_cion_group_startup, utc_cion_group_cleanup},
+
+    {"utc_cion_server_create_p", utc_cion_server_create_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_create_n", utc_cion_server_create_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_p", utc_cion_server_destroy_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_n", utc_cion_server_destroy_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_p", utc_cion_server_listen_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_n", utc_cion_server_listen_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_p", utc_cion_server_stop_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_n", utc_cion_server_stop_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_p", utc_cion_server_disconnect_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_n", utc_cion_server_disconnect_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_p", utc_cion_server_send_payload_async_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_n", utc_cion_server_send_payload_async_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_p", utc_cion_server_foreach_connected_peer_info_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_n", utc_cion_server_foreach_connected_peer_info_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_p", utc_cion_server_add_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_n", utc_cion_server_add_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_p", utc_cion_server_remove_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_n", utc_cion_server_remove_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_p", utc_cion_server_add_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_n", utc_cion_server_add_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_p", utc_cion_server_remove_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_n", utc_cion_server_remove_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_p", utc_cion_server_set_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_n", utc_cion_server_set_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_p", utc_cion_server_unset_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_n", utc_cion_server_unset_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_p", utc_cion_server_add_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_n", utc_cion_server_add_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_p", utc_cion_server_remove_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_n", utc_cion_server_remove_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_p", utc_cion_server_accept_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_n", utc_cion_server_accept_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_p", utc_cion_server_reject_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_n", utc_cion_server_reject_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_p", utc_cion_server_set_display_name_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_n", utc_cion_server_set_display_name_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_p", utc_cion_server_set_on_demand_launch_enabled_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_n", utc_cion_server_set_on_demand_launch_enabled_n, utc_cion_server_startup, utc_cion_server_cleanup},
+
+    {"utc_cion_client_create_p", utc_cion_client_create_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_create_n", utc_cion_client_create_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_p", utc_cion_client_destroy_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_n", utc_cion_client_destroy_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_p", utc_cion_client_try_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_n", utc_cion_client_try_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_p", utc_cion_client_stop_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_n", utc_cion_client_stop_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_p", utc_cion_client_connect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_n", utc_cion_client_connect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_p", utc_cion_client_disconnect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_n", utc_cion_client_disconnect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_p", utc_cion_client_send_data_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_n", utc_cion_client_send_data_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_p", utc_cion_client_send_payload_async_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_n", utc_cion_client_send_payload_async_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_p", utc_cion_client_add_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_n", utc_cion_client_add_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_p", utc_cion_client_remove_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_n", utc_cion_client_remove_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_p", utc_cion_client_add_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_n", utc_cion_client_add_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_p", utc_cion_client_remove_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_n", utc_cion_client_remove_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_p", utc_cion_client_add_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_n", utc_cion_client_add_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_p", utc_cion_client_remove_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_n", utc_cion_client_remove_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+
+    {"utc_cion_peer_info_clone_p", utc_cion_peer_info_clone_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_clone_n", utc_cion_peer_info_clone_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_get_device_id_p", utc_cion_peer_info_get_device_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_id_n", utc_cion_peer_info_get_device_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_p", utc_cion_peer_info_get_device_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_n", utc_cion_peer_info_get_device_name_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_p", utc_cion_peer_info_get_device_platform_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_n", utc_cion_peer_info_get_device_platform_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_p", utc_cion_peer_info_get_device_platform_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_n", utc_cion_peer_info_get_device_platform_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_p", utc_cion_peer_info_get_device_type_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_n", utc_cion_peer_info_get_device_type_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_p", utc_cion_peer_info_get_app_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_n", utc_cion_peer_info_get_app_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_p", utc_cion_peer_info_get_app_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_n", utc_cion_peer_info_get_app_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_p", utc_cion_peer_info_get_uuid_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_n", utc_cion_peer_info_get_uuid_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_p", utc_cion_peer_info_get_display_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_n", utc_cion_peer_info_get_display_name_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_destroy_p", utc_cion_peer_info_destroy_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_destroy_n", utc_cion_peer_info_destroy_n, utc_cion_peer_info_startup, utc_cion_peer_info_cleanup},
+
+    {"utc_cion_payload_create_p", utc_cion_payload_create_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_create_n", utc_cion_payload_create_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_p", utc_cion_payload_destroy_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_n", utc_cion_payload_destroy_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_p", utc_cion_payload_get_type_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_n", utc_cion_payload_get_type_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_p", utc_cion_payload_get_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_n", utc_cion_payload_get_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_p", utc_cion_payload_set_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_n", utc_cion_payload_set_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_p", utc_cion_payload_save_as_file_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_n", utc_cion_payload_save_as_file_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_p", utc_cion_payload_get_received_file_name_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_n", utc_cion_payload_get_received_file_name_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_p", utc_cion_payload_get_received_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_n", utc_cion_payload_get_received_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_p", utc_cion_payload_get_total_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_n", utc_cion_payload_get_total_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_p", utc_cion_payload_set_file_path_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_n", utc_cion_payload_set_file_path_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_p", utc_cion_payload_get_payload_id_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_n", utc_cion_payload_get_payload_id_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+
+    {"utc_cion_payload_async_result_clone_p", utc_cion_payload_async_result_clone_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_clone_n", utc_cion_payload_async_result_clone_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_p", utc_cion_payload_async_result_destroy_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_n", utc_cion_payload_async_result_destroy_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_p", utc_cion_payload_async_result_get_peer_info_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_n", utc_cion_payload_async_result_get_peer_info_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_p", utc_cion_payload_async_result_get_payload_id_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_n", utc_cion_payload_async_result_get_payload_id_n, utc_cion_payload_async_result_startup, utc_cion_payload_async_result_cleanup},
+
+    {"utc_cion_connection_result_get_status_p", utc_cion_connection_result_get_status_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_status_n", utc_cion_connection_result_get_status_n, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_p", utc_cion_connection_result_get_reason_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_n", utc_cion_connection_result_get_reason_n, utc_cion_connection_result_startup, utc_cion_connection_result_cleanup},
+
+    {"utc_cion_security_create_p", utc_cion_security_create_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_create_n", utc_cion_security_create_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_p", utc_cion_security_destory_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_n", utc_cion_security_destory_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_p", utc_cion_security_set_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_n", utc_cion_security_set_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_p", utc_cion_security_set_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_n", utc_cion_security_set_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_p", utc_cion_security_set_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_n", utc_cion_security_set_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_p", utc_cion_security_get_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_n", utc_cion_security_get_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_p", utc_cion_security_get_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_n", utc_cion_security_get_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_p", utc_cion_security_get_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_n", utc_cion_security_get_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+
+    {NULL, NULL}
+};
+
+#endif // __TCT_CION_NATIVE_H__
diff --git a/src/utc/cion/tct-cion-core_tizeniot.h b/src/utc/cion/tct-cion-core_tizeniot.h
new file mode 100644 (file)
index 0000000..9da6b88
--- /dev/null
@@ -0,0 +1,358 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_CION_NATIVE_H__
+#define __TCT_CION_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+extern void utc_cion_group_startup(void);
+extern void utc_cion_group_cleanup(void);
+extern int utc_cion_group_create_p(void);
+extern int utc_cion_group_create_n(void);
+extern int utc_cion_group_destroy_p(void);
+extern int utc_cion_group_destroy_n(void);
+extern int utc_cion_group_subscribe_p(void);
+extern int utc_cion_group_subscribe_n(void);
+extern int utc_cion_group_unsubscribe_p(void);
+extern int utc_cion_group_unsubscribe_n(void);
+extern int utc_cion_group_publish_p(void);
+extern int utc_cion_group_publish_n(void);
+
+extern void utc_cion_server_startup(void);
+extern void utc_cion_server_cleanup(void);
+extern int utc_cion_server_create_p(void);
+extern int utc_cion_server_create_n(void);
+extern int utc_cion_server_destroy_p(void);
+extern int utc_cion_server_destroy_n(void);
+extern int utc_cion_server_listen_p(void);
+extern int utc_cion_server_listen_n(void);
+extern int utc_cion_server_stop_p(void);
+extern int utc_cion_server_stop_n(void);
+extern int utc_cion_server_disconnect_p(void);
+extern int utc_cion_server_disconnect_n(void);
+extern int utc_cion_server_send_payload_async_p(void);
+extern int utc_cion_server_send_payload_async_n(void);
+extern int utc_cion_server_foreach_connected_peer_info_p(void);
+extern int utc_cion_server_foreach_connected_peer_info_n(void);
+extern int utc_cion_server_add_connection_result_cb_p(void);
+extern int utc_cion_server_add_connection_result_cb_n(void);
+extern int utc_cion_server_remove_connection_result_cb_p(void);
+extern int utc_cion_server_remove_connection_result_cb_n(void);
+extern int utc_cion_server_add_payload_received_cb_p(void);
+extern int utc_cion_server_add_payload_received_cb_n(void);
+extern int utc_cion_server_remove_payload_received_cb_p(void);
+extern int utc_cion_server_remove_payload_received_cb_n(void);
+extern int utc_cion_server_set_data_received_cb_p(void);
+extern int utc_cion_server_set_data_received_cb_n(void);
+extern int utc_cion_server_unset_data_received_cb_p(void);
+extern int utc_cion_server_unset_data_received_cb_n(void);
+extern int utc_cion_server_add_disconnected_cb_p(void);
+extern int utc_cion_server_add_disconnected_cb_n(void);
+extern int utc_cion_server_remove_disconnected_cb_p(void);
+extern int utc_cion_server_remove_disconnected_cb_n(void);
+extern int utc_cion_server_accept_p(void);
+extern int utc_cion_server_accept_n(void);
+extern int utc_cion_server_reject_p(void);
+extern int utc_cion_server_reject_n(void);
+extern int utc_cion_server_set_display_name_p(void);
+extern int utc_cion_server_set_display_name_n(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_p(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_n(void);
+
+extern void utc_cion_client_startup(void);
+extern void utc_cion_client_cleanup(void);
+extern int utc_cion_client_create_p(void);
+extern int utc_cion_client_create_n(void);
+extern int utc_cion_client_destroy_p(void);
+extern int utc_cion_client_destroy_n(void);
+extern int utc_cion_client_try_discovery_p(void);
+extern int utc_cion_client_try_discovery_n(void);
+extern int utc_cion_client_stop_discovery_p(void);
+extern int utc_cion_client_stop_discovery_n(void);
+extern int utc_cion_client_connect_p(void);
+extern int utc_cion_client_connect_n(void);
+extern int utc_cion_client_disconnect_p(void);
+extern int utc_cion_client_disconnect_n(void);
+extern int utc_cion_client_send_data_p(void);
+extern int utc_cion_client_send_data_n(void);
+extern int utc_cion_client_send_payload_async_p(void);
+extern int utc_cion_client_send_payload_async_n(void);
+extern int utc_cion_client_add_connection_result_cb_p(void);
+extern int utc_cion_client_add_connection_result_cb_n(void);
+extern int utc_cion_client_remove_connection_result_cb_p(void);
+extern int utc_cion_client_remove_connection_result_cb_n(void);
+extern int utc_cion_client_add_payload_received_cb_p(void);
+extern int utc_cion_client_add_payload_received_cb_n(void);
+extern int utc_cion_client_remove_payload_received_cb_p(void);
+extern int utc_cion_client_remove_payload_received_cb_n(void);
+extern int utc_cion_client_add_disconnected_cb_p(void);
+extern int utc_cion_client_add_disconnected_cb_n(void);
+extern int utc_cion_client_remove_disconnected_cb_p(void);
+extern int utc_cion_client_remove_disconnected_cb_n(void);
+
+extern void utc_cion_peer_info_startup(void);
+extern void utc_cion_peer_info_cleanup(void);
+extern int utc_cion_peer_info_clone_p(void);
+extern int utc_cion_peer_info_clone_n(void);
+
+extern int utc_cion_peer_info_get_device_id_p(void);
+extern int utc_cion_peer_info_get_device_id_n(void);
+extern int utc_cion_peer_info_get_device_name_p(void);
+extern int utc_cion_peer_info_get_device_name_n(void);
+extern int utc_cion_peer_info_get_device_platform_p(void);
+extern int utc_cion_peer_info_get_device_platform_n(void);
+extern int utc_cion_peer_info_get_device_platform_version_p(void);
+extern int utc_cion_peer_info_get_device_platform_version_n(void);
+extern int utc_cion_peer_info_get_device_type_p(void);
+extern int utc_cion_peer_info_get_device_type_n(void);
+extern int utc_cion_peer_info_get_app_id_p(void);
+extern int utc_cion_peer_info_get_app_id_n(void);
+extern int utc_cion_peer_info_get_app_version_p(void);
+extern int utc_cion_peer_info_get_app_version_n(void);
+extern int utc_cion_peer_info_get_uuid_p(void);
+extern int utc_cion_peer_info_get_uuid_n(void);
+extern int utc_cion_peer_info_get_display_name_p(void);
+extern int utc_cion_peer_info_get_display_name_n(void);
+
+extern int utc_cion_peer_info_destroy_p(void);
+extern int utc_cion_peer_info_destroy_n(void);
+
+extern void utc_cion_payload_startup(void);
+extern void utc_cion_payload_cleanup(void);
+extern int utc_cion_payload_create_p(void);
+extern int utc_cion_payload_create_n(void);
+extern int utc_cion_payload_destroy_p(void);
+extern int utc_cion_payload_destroy_n(void);
+extern int utc_cion_payload_get_type_p(void);
+extern int utc_cion_payload_get_type_n(void);
+extern int utc_cion_payload_get_data_p(void);
+extern int utc_cion_payload_get_data_n(void);
+extern int utc_cion_payload_set_data_p(void);
+extern int utc_cion_payload_set_data_n(void);
+extern int utc_cion_payload_save_as_file_p(void);
+extern int utc_cion_payload_save_as_file_n(void);
+extern int utc_cion_payload_get_received_file_name_p(void);
+extern int utc_cion_payload_get_received_file_name_n(void);
+extern int utc_cion_payload_get_received_bytes_p(void);
+extern int utc_cion_payload_get_received_bytes_n(void);
+extern int utc_cion_payload_get_total_bytes_p(void);
+extern int utc_cion_payload_get_total_bytes_n(void);
+extern int utc_cion_payload_set_file_path_p(void);
+extern int utc_cion_payload_set_file_path_n(void);
+extern int utc_cion_payload_get_payload_id_p(void);
+extern int utc_cion_payload_get_payload_id_n(void);
+
+extern void utc_cion_payload_async_result_startup(void);
+extern void utc_cion_payload_async_result_cleanup(void);
+extern int utc_cion_payload_async_result_clone_p(void);
+extern int utc_cion_payload_async_result_clone_n(void);
+extern int utc_cion_payload_async_result_destroy_p(void);
+extern int utc_cion_payload_async_result_destroy_n(void);
+extern int utc_cion_payload_async_result_get_peer_info_p(void);
+extern int utc_cion_payload_async_result_get_peer_info_n(void);
+extern int utc_cion_payload_async_result_get_payload_id_p(void);
+extern int utc_cion_payload_async_result_get_payload_id_n(void);
+
+extern void utc_cion_connection_result_startup(void);
+extern void utc_cion_connection_result_cleanup(void);
+extern int utc_cion_connection_result_get_status_p(void);
+extern int utc_cion_connection_result_get_status_n(void);
+extern int utc_cion_connection_result_get_reason_p(void);
+extern int utc_cion_connection_result_get_reason_n(void);
+
+extern void utc_cion_security_startup(void);
+extern void utc_cion_security_cleanup(void);
+extern int utc_cion_security_create_p(void);
+extern int utc_cion_security_create_n(void);
+extern int utc_cion_security_destory_p(void);
+extern int utc_cion_security_destory_n(void);
+extern int utc_cion_security_set_ca_path_p(void);
+extern int utc_cion_security_set_ca_path_n(void);
+extern int utc_cion_security_set_cert_path_p(void);
+extern int utc_cion_security_set_cert_path_n(void);
+extern int utc_cion_security_set_private_key_path_p(void);
+extern int utc_cion_security_set_private_key_path_n(void);
+extern int utc_cion_security_get_ca_path_p(void);
+extern int utc_cion_security_get_ca_path_n(void);
+extern int utc_cion_security_get_cert_path_p(void);
+extern int utc_cion_security_get_cert_path_n(void);
+extern int utc_cion_security_get_private_key_path_p(void);
+extern int utc_cion_security_get_private_key_path_n(void);
+
+testcase tc_array[] = {
+    {"utc_cion_group_create_p", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_create_n", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_p", utc_cion_group_destroy_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_n", utc_cion_group_destroy_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_p", utc_cion_group_subscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_n", utc_cion_group_subscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_p", utc_cion_group_unsubscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_n", utc_cion_group_unsubscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_p", utc_cion_group_publish_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_n", utc_cion_group_publish_n, utc_cion_group_startup, utc_cion_group_cleanup},
+
+    {"utc_cion_server_create_p", utc_cion_server_create_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_create_n", utc_cion_server_create_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_p", utc_cion_server_destroy_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_n", utc_cion_server_destroy_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_p", utc_cion_server_listen_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_n", utc_cion_server_listen_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_p", utc_cion_server_stop_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_n", utc_cion_server_stop_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_p", utc_cion_server_disconnect_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_n", utc_cion_server_disconnect_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_p", utc_cion_server_send_payload_async_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_n", utc_cion_server_send_payload_async_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_p", utc_cion_server_foreach_connected_peer_info_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_n", utc_cion_server_foreach_connected_peer_info_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_p", utc_cion_server_add_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_n", utc_cion_server_add_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_p", utc_cion_server_remove_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_n", utc_cion_server_remove_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_p", utc_cion_server_add_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_n", utc_cion_server_add_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_p", utc_cion_server_remove_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_n", utc_cion_server_remove_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_p", utc_cion_server_set_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_n", utc_cion_server_set_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_p", utc_cion_server_unset_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_n", utc_cion_server_unset_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_p", utc_cion_server_add_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_n", utc_cion_server_add_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_p", utc_cion_server_remove_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_n", utc_cion_server_remove_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_p", utc_cion_server_accept_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_n", utc_cion_server_accept_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_p", utc_cion_server_reject_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_n", utc_cion_server_reject_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_p", utc_cion_server_set_display_name_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_n", utc_cion_server_set_display_name_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_p", utc_cion_server_set_on_demand_launch_enabled_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_n", utc_cion_server_set_on_demand_launch_enabled_n, utc_cion_server_startup, utc_cion_server_cleanup},
+
+    {"utc_cion_client_create_p", utc_cion_client_create_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_create_n", utc_cion_client_create_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_p", utc_cion_client_destroy_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_n", utc_cion_client_destroy_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_p", utc_cion_client_try_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_n", utc_cion_client_try_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_p", utc_cion_client_stop_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_n", utc_cion_client_stop_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_p", utc_cion_client_connect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_n", utc_cion_client_connect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_p", utc_cion_client_disconnect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_n", utc_cion_client_disconnect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_p", utc_cion_client_send_data_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_n", utc_cion_client_send_data_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_p", utc_cion_client_send_payload_async_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_n", utc_cion_client_send_payload_async_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_p", utc_cion_client_add_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_n", utc_cion_client_add_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_p", utc_cion_client_remove_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_n", utc_cion_client_remove_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_p", utc_cion_client_add_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_n", utc_cion_client_add_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_p", utc_cion_client_remove_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_n", utc_cion_client_remove_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_p", utc_cion_client_add_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_n", utc_cion_client_add_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_p", utc_cion_client_remove_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_n", utc_cion_client_remove_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+
+    {"utc_cion_peer_info_clone_p", utc_cion_peer_info_clone_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_clone_n", utc_cion_peer_info_clone_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_get_device_id_p", utc_cion_peer_info_get_device_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_id_n", utc_cion_peer_info_get_device_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_p", utc_cion_peer_info_get_device_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_n", utc_cion_peer_info_get_device_name_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_p", utc_cion_peer_info_get_device_platform_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_n", utc_cion_peer_info_get_device_platform_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_p", utc_cion_peer_info_get_device_platform_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_n", utc_cion_peer_info_get_device_platform_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_p", utc_cion_peer_info_get_device_type_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_n", utc_cion_peer_info_get_device_type_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_p", utc_cion_peer_info_get_app_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_n", utc_cion_peer_info_get_app_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_p", utc_cion_peer_info_get_app_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_n", utc_cion_peer_info_get_app_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_p", utc_cion_peer_info_get_uuid_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_n", utc_cion_peer_info_get_uuid_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_p", utc_cion_peer_info_get_display_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_n", utc_cion_peer_info_get_display_name_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_destroy_p", utc_cion_peer_info_destroy_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_destroy_n", utc_cion_peer_info_destroy_n, utc_cion_peer_info_startup, utc_cion_peer_info_cleanup},
+
+    {"utc_cion_payload_create_p", utc_cion_payload_create_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_create_n", utc_cion_payload_create_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_p", utc_cion_payload_destroy_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_n", utc_cion_payload_destroy_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_p", utc_cion_payload_get_type_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_n", utc_cion_payload_get_type_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_p", utc_cion_payload_get_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_n", utc_cion_payload_get_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_p", utc_cion_payload_set_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_n", utc_cion_payload_set_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_p", utc_cion_payload_save_as_file_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_n", utc_cion_payload_save_as_file_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_p", utc_cion_payload_get_received_file_name_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_n", utc_cion_payload_get_received_file_name_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_p", utc_cion_payload_get_received_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_n", utc_cion_payload_get_received_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_p", utc_cion_payload_get_total_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_n", utc_cion_payload_get_total_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_p", utc_cion_payload_set_file_path_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_n", utc_cion_payload_set_file_path_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_p", utc_cion_payload_get_payload_id_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_n", utc_cion_payload_get_payload_id_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+
+    {"utc_cion_payload_async_result_clone_p", utc_cion_payload_async_result_clone_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_clone_n", utc_cion_payload_async_result_clone_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_p", utc_cion_payload_async_result_destroy_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_n", utc_cion_payload_async_result_destroy_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_p", utc_cion_payload_async_result_get_peer_info_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_n", utc_cion_payload_async_result_get_peer_info_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_p", utc_cion_payload_async_result_get_payload_id_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_n", utc_cion_payload_async_result_get_payload_id_n, utc_cion_payload_async_result_startup, utc_cion_payload_async_result_cleanup},
+
+    {"utc_cion_connection_result_get_status_p", utc_cion_connection_result_get_status_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_status_n", utc_cion_connection_result_get_status_n, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_p", utc_cion_connection_result_get_reason_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_n", utc_cion_connection_result_get_reason_n, utc_cion_connection_result_startup, utc_cion_connection_result_cleanup},
+
+    {"utc_cion_security_create_p", utc_cion_security_create_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_create_n", utc_cion_security_create_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_p", utc_cion_security_destory_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_n", utc_cion_security_destory_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_p", utc_cion_security_set_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_n", utc_cion_security_set_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_p", utc_cion_security_set_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_n", utc_cion_security_set_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_p", utc_cion_security_set_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_n", utc_cion_security_set_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_p", utc_cion_security_get_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_n", utc_cion_security_get_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_p", utc_cion_security_get_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_n", utc_cion_security_get_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_p", utc_cion_security_get_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_n", utc_cion_security_get_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+
+    {NULL, NULL}
+};
+
+#endif // __TCT_CION_NATIVE_H__
diff --git a/src/utc/cion/tct-cion-core_tv.h b/src/utc/cion/tct-cion-core_tv.h
new file mode 100644 (file)
index 0000000..9da6b88
--- /dev/null
@@ -0,0 +1,358 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_CION_NATIVE_H__
+#define __TCT_CION_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+extern void utc_cion_group_startup(void);
+extern void utc_cion_group_cleanup(void);
+extern int utc_cion_group_create_p(void);
+extern int utc_cion_group_create_n(void);
+extern int utc_cion_group_destroy_p(void);
+extern int utc_cion_group_destroy_n(void);
+extern int utc_cion_group_subscribe_p(void);
+extern int utc_cion_group_subscribe_n(void);
+extern int utc_cion_group_unsubscribe_p(void);
+extern int utc_cion_group_unsubscribe_n(void);
+extern int utc_cion_group_publish_p(void);
+extern int utc_cion_group_publish_n(void);
+
+extern void utc_cion_server_startup(void);
+extern void utc_cion_server_cleanup(void);
+extern int utc_cion_server_create_p(void);
+extern int utc_cion_server_create_n(void);
+extern int utc_cion_server_destroy_p(void);
+extern int utc_cion_server_destroy_n(void);
+extern int utc_cion_server_listen_p(void);
+extern int utc_cion_server_listen_n(void);
+extern int utc_cion_server_stop_p(void);
+extern int utc_cion_server_stop_n(void);
+extern int utc_cion_server_disconnect_p(void);
+extern int utc_cion_server_disconnect_n(void);
+extern int utc_cion_server_send_payload_async_p(void);
+extern int utc_cion_server_send_payload_async_n(void);
+extern int utc_cion_server_foreach_connected_peer_info_p(void);
+extern int utc_cion_server_foreach_connected_peer_info_n(void);
+extern int utc_cion_server_add_connection_result_cb_p(void);
+extern int utc_cion_server_add_connection_result_cb_n(void);
+extern int utc_cion_server_remove_connection_result_cb_p(void);
+extern int utc_cion_server_remove_connection_result_cb_n(void);
+extern int utc_cion_server_add_payload_received_cb_p(void);
+extern int utc_cion_server_add_payload_received_cb_n(void);
+extern int utc_cion_server_remove_payload_received_cb_p(void);
+extern int utc_cion_server_remove_payload_received_cb_n(void);
+extern int utc_cion_server_set_data_received_cb_p(void);
+extern int utc_cion_server_set_data_received_cb_n(void);
+extern int utc_cion_server_unset_data_received_cb_p(void);
+extern int utc_cion_server_unset_data_received_cb_n(void);
+extern int utc_cion_server_add_disconnected_cb_p(void);
+extern int utc_cion_server_add_disconnected_cb_n(void);
+extern int utc_cion_server_remove_disconnected_cb_p(void);
+extern int utc_cion_server_remove_disconnected_cb_n(void);
+extern int utc_cion_server_accept_p(void);
+extern int utc_cion_server_accept_n(void);
+extern int utc_cion_server_reject_p(void);
+extern int utc_cion_server_reject_n(void);
+extern int utc_cion_server_set_display_name_p(void);
+extern int utc_cion_server_set_display_name_n(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_p(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_n(void);
+
+extern void utc_cion_client_startup(void);
+extern void utc_cion_client_cleanup(void);
+extern int utc_cion_client_create_p(void);
+extern int utc_cion_client_create_n(void);
+extern int utc_cion_client_destroy_p(void);
+extern int utc_cion_client_destroy_n(void);
+extern int utc_cion_client_try_discovery_p(void);
+extern int utc_cion_client_try_discovery_n(void);
+extern int utc_cion_client_stop_discovery_p(void);
+extern int utc_cion_client_stop_discovery_n(void);
+extern int utc_cion_client_connect_p(void);
+extern int utc_cion_client_connect_n(void);
+extern int utc_cion_client_disconnect_p(void);
+extern int utc_cion_client_disconnect_n(void);
+extern int utc_cion_client_send_data_p(void);
+extern int utc_cion_client_send_data_n(void);
+extern int utc_cion_client_send_payload_async_p(void);
+extern int utc_cion_client_send_payload_async_n(void);
+extern int utc_cion_client_add_connection_result_cb_p(void);
+extern int utc_cion_client_add_connection_result_cb_n(void);
+extern int utc_cion_client_remove_connection_result_cb_p(void);
+extern int utc_cion_client_remove_connection_result_cb_n(void);
+extern int utc_cion_client_add_payload_received_cb_p(void);
+extern int utc_cion_client_add_payload_received_cb_n(void);
+extern int utc_cion_client_remove_payload_received_cb_p(void);
+extern int utc_cion_client_remove_payload_received_cb_n(void);
+extern int utc_cion_client_add_disconnected_cb_p(void);
+extern int utc_cion_client_add_disconnected_cb_n(void);
+extern int utc_cion_client_remove_disconnected_cb_p(void);
+extern int utc_cion_client_remove_disconnected_cb_n(void);
+
+extern void utc_cion_peer_info_startup(void);
+extern void utc_cion_peer_info_cleanup(void);
+extern int utc_cion_peer_info_clone_p(void);
+extern int utc_cion_peer_info_clone_n(void);
+
+extern int utc_cion_peer_info_get_device_id_p(void);
+extern int utc_cion_peer_info_get_device_id_n(void);
+extern int utc_cion_peer_info_get_device_name_p(void);
+extern int utc_cion_peer_info_get_device_name_n(void);
+extern int utc_cion_peer_info_get_device_platform_p(void);
+extern int utc_cion_peer_info_get_device_platform_n(void);
+extern int utc_cion_peer_info_get_device_platform_version_p(void);
+extern int utc_cion_peer_info_get_device_platform_version_n(void);
+extern int utc_cion_peer_info_get_device_type_p(void);
+extern int utc_cion_peer_info_get_device_type_n(void);
+extern int utc_cion_peer_info_get_app_id_p(void);
+extern int utc_cion_peer_info_get_app_id_n(void);
+extern int utc_cion_peer_info_get_app_version_p(void);
+extern int utc_cion_peer_info_get_app_version_n(void);
+extern int utc_cion_peer_info_get_uuid_p(void);
+extern int utc_cion_peer_info_get_uuid_n(void);
+extern int utc_cion_peer_info_get_display_name_p(void);
+extern int utc_cion_peer_info_get_display_name_n(void);
+
+extern int utc_cion_peer_info_destroy_p(void);
+extern int utc_cion_peer_info_destroy_n(void);
+
+extern void utc_cion_payload_startup(void);
+extern void utc_cion_payload_cleanup(void);
+extern int utc_cion_payload_create_p(void);
+extern int utc_cion_payload_create_n(void);
+extern int utc_cion_payload_destroy_p(void);
+extern int utc_cion_payload_destroy_n(void);
+extern int utc_cion_payload_get_type_p(void);
+extern int utc_cion_payload_get_type_n(void);
+extern int utc_cion_payload_get_data_p(void);
+extern int utc_cion_payload_get_data_n(void);
+extern int utc_cion_payload_set_data_p(void);
+extern int utc_cion_payload_set_data_n(void);
+extern int utc_cion_payload_save_as_file_p(void);
+extern int utc_cion_payload_save_as_file_n(void);
+extern int utc_cion_payload_get_received_file_name_p(void);
+extern int utc_cion_payload_get_received_file_name_n(void);
+extern int utc_cion_payload_get_received_bytes_p(void);
+extern int utc_cion_payload_get_received_bytes_n(void);
+extern int utc_cion_payload_get_total_bytes_p(void);
+extern int utc_cion_payload_get_total_bytes_n(void);
+extern int utc_cion_payload_set_file_path_p(void);
+extern int utc_cion_payload_set_file_path_n(void);
+extern int utc_cion_payload_get_payload_id_p(void);
+extern int utc_cion_payload_get_payload_id_n(void);
+
+extern void utc_cion_payload_async_result_startup(void);
+extern void utc_cion_payload_async_result_cleanup(void);
+extern int utc_cion_payload_async_result_clone_p(void);
+extern int utc_cion_payload_async_result_clone_n(void);
+extern int utc_cion_payload_async_result_destroy_p(void);
+extern int utc_cion_payload_async_result_destroy_n(void);
+extern int utc_cion_payload_async_result_get_peer_info_p(void);
+extern int utc_cion_payload_async_result_get_peer_info_n(void);
+extern int utc_cion_payload_async_result_get_payload_id_p(void);
+extern int utc_cion_payload_async_result_get_payload_id_n(void);
+
+extern void utc_cion_connection_result_startup(void);
+extern void utc_cion_connection_result_cleanup(void);
+extern int utc_cion_connection_result_get_status_p(void);
+extern int utc_cion_connection_result_get_status_n(void);
+extern int utc_cion_connection_result_get_reason_p(void);
+extern int utc_cion_connection_result_get_reason_n(void);
+
+extern void utc_cion_security_startup(void);
+extern void utc_cion_security_cleanup(void);
+extern int utc_cion_security_create_p(void);
+extern int utc_cion_security_create_n(void);
+extern int utc_cion_security_destory_p(void);
+extern int utc_cion_security_destory_n(void);
+extern int utc_cion_security_set_ca_path_p(void);
+extern int utc_cion_security_set_ca_path_n(void);
+extern int utc_cion_security_set_cert_path_p(void);
+extern int utc_cion_security_set_cert_path_n(void);
+extern int utc_cion_security_set_private_key_path_p(void);
+extern int utc_cion_security_set_private_key_path_n(void);
+extern int utc_cion_security_get_ca_path_p(void);
+extern int utc_cion_security_get_ca_path_n(void);
+extern int utc_cion_security_get_cert_path_p(void);
+extern int utc_cion_security_get_cert_path_n(void);
+extern int utc_cion_security_get_private_key_path_p(void);
+extern int utc_cion_security_get_private_key_path_n(void);
+
+testcase tc_array[] = {
+    {"utc_cion_group_create_p", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_create_n", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_p", utc_cion_group_destroy_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_n", utc_cion_group_destroy_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_p", utc_cion_group_subscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_n", utc_cion_group_subscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_p", utc_cion_group_unsubscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_n", utc_cion_group_unsubscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_p", utc_cion_group_publish_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_n", utc_cion_group_publish_n, utc_cion_group_startup, utc_cion_group_cleanup},
+
+    {"utc_cion_server_create_p", utc_cion_server_create_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_create_n", utc_cion_server_create_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_p", utc_cion_server_destroy_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_n", utc_cion_server_destroy_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_p", utc_cion_server_listen_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_n", utc_cion_server_listen_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_p", utc_cion_server_stop_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_n", utc_cion_server_stop_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_p", utc_cion_server_disconnect_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_n", utc_cion_server_disconnect_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_p", utc_cion_server_send_payload_async_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_n", utc_cion_server_send_payload_async_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_p", utc_cion_server_foreach_connected_peer_info_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_n", utc_cion_server_foreach_connected_peer_info_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_p", utc_cion_server_add_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_n", utc_cion_server_add_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_p", utc_cion_server_remove_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_n", utc_cion_server_remove_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_p", utc_cion_server_add_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_n", utc_cion_server_add_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_p", utc_cion_server_remove_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_n", utc_cion_server_remove_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_p", utc_cion_server_set_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_n", utc_cion_server_set_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_p", utc_cion_server_unset_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_n", utc_cion_server_unset_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_p", utc_cion_server_add_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_n", utc_cion_server_add_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_p", utc_cion_server_remove_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_n", utc_cion_server_remove_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_p", utc_cion_server_accept_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_n", utc_cion_server_accept_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_p", utc_cion_server_reject_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_n", utc_cion_server_reject_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_p", utc_cion_server_set_display_name_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_n", utc_cion_server_set_display_name_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_p", utc_cion_server_set_on_demand_launch_enabled_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_n", utc_cion_server_set_on_demand_launch_enabled_n, utc_cion_server_startup, utc_cion_server_cleanup},
+
+    {"utc_cion_client_create_p", utc_cion_client_create_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_create_n", utc_cion_client_create_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_p", utc_cion_client_destroy_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_n", utc_cion_client_destroy_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_p", utc_cion_client_try_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_n", utc_cion_client_try_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_p", utc_cion_client_stop_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_n", utc_cion_client_stop_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_p", utc_cion_client_connect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_n", utc_cion_client_connect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_p", utc_cion_client_disconnect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_n", utc_cion_client_disconnect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_p", utc_cion_client_send_data_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_n", utc_cion_client_send_data_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_p", utc_cion_client_send_payload_async_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_n", utc_cion_client_send_payload_async_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_p", utc_cion_client_add_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_n", utc_cion_client_add_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_p", utc_cion_client_remove_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_n", utc_cion_client_remove_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_p", utc_cion_client_add_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_n", utc_cion_client_add_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_p", utc_cion_client_remove_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_n", utc_cion_client_remove_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_p", utc_cion_client_add_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_n", utc_cion_client_add_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_p", utc_cion_client_remove_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_n", utc_cion_client_remove_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+
+    {"utc_cion_peer_info_clone_p", utc_cion_peer_info_clone_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_clone_n", utc_cion_peer_info_clone_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_get_device_id_p", utc_cion_peer_info_get_device_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_id_n", utc_cion_peer_info_get_device_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_p", utc_cion_peer_info_get_device_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_n", utc_cion_peer_info_get_device_name_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_p", utc_cion_peer_info_get_device_platform_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_n", utc_cion_peer_info_get_device_platform_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_p", utc_cion_peer_info_get_device_platform_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_n", utc_cion_peer_info_get_device_platform_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_p", utc_cion_peer_info_get_device_type_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_n", utc_cion_peer_info_get_device_type_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_p", utc_cion_peer_info_get_app_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_n", utc_cion_peer_info_get_app_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_p", utc_cion_peer_info_get_app_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_n", utc_cion_peer_info_get_app_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_p", utc_cion_peer_info_get_uuid_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_n", utc_cion_peer_info_get_uuid_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_p", utc_cion_peer_info_get_display_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_n", utc_cion_peer_info_get_display_name_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_destroy_p", utc_cion_peer_info_destroy_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_destroy_n", utc_cion_peer_info_destroy_n, utc_cion_peer_info_startup, utc_cion_peer_info_cleanup},
+
+    {"utc_cion_payload_create_p", utc_cion_payload_create_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_create_n", utc_cion_payload_create_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_p", utc_cion_payload_destroy_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_n", utc_cion_payload_destroy_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_p", utc_cion_payload_get_type_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_n", utc_cion_payload_get_type_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_p", utc_cion_payload_get_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_n", utc_cion_payload_get_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_p", utc_cion_payload_set_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_n", utc_cion_payload_set_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_p", utc_cion_payload_save_as_file_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_n", utc_cion_payload_save_as_file_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_p", utc_cion_payload_get_received_file_name_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_n", utc_cion_payload_get_received_file_name_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_p", utc_cion_payload_get_received_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_n", utc_cion_payload_get_received_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_p", utc_cion_payload_get_total_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_n", utc_cion_payload_get_total_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_p", utc_cion_payload_set_file_path_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_n", utc_cion_payload_set_file_path_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_p", utc_cion_payload_get_payload_id_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_n", utc_cion_payload_get_payload_id_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+
+    {"utc_cion_payload_async_result_clone_p", utc_cion_payload_async_result_clone_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_clone_n", utc_cion_payload_async_result_clone_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_p", utc_cion_payload_async_result_destroy_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_n", utc_cion_payload_async_result_destroy_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_p", utc_cion_payload_async_result_get_peer_info_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_n", utc_cion_payload_async_result_get_peer_info_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_p", utc_cion_payload_async_result_get_payload_id_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_n", utc_cion_payload_async_result_get_payload_id_n, utc_cion_payload_async_result_startup, utc_cion_payload_async_result_cleanup},
+
+    {"utc_cion_connection_result_get_status_p", utc_cion_connection_result_get_status_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_status_n", utc_cion_connection_result_get_status_n, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_p", utc_cion_connection_result_get_reason_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_n", utc_cion_connection_result_get_reason_n, utc_cion_connection_result_startup, utc_cion_connection_result_cleanup},
+
+    {"utc_cion_security_create_p", utc_cion_security_create_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_create_n", utc_cion_security_create_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_p", utc_cion_security_destory_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_n", utc_cion_security_destory_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_p", utc_cion_security_set_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_n", utc_cion_security_set_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_p", utc_cion_security_set_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_n", utc_cion_security_set_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_p", utc_cion_security_set_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_n", utc_cion_security_set_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_p", utc_cion_security_get_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_n", utc_cion_security_get_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_p", utc_cion_security_get_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_n", utc_cion_security_get_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_p", utc_cion_security_get_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_n", utc_cion_security_get_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+
+    {NULL, NULL}
+};
+
+#endif // __TCT_CION_NATIVE_H__
diff --git a/src/utc/cion/tct-cion-core_wearable.h b/src/utc/cion/tct-cion-core_wearable.h
new file mode 100644 (file)
index 0000000..9da6b88
--- /dev/null
@@ -0,0 +1,358 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __TCT_CION_NATIVE_H__
+#define __TCT_CION_NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+extern void utc_cion_group_startup(void);
+extern void utc_cion_group_cleanup(void);
+extern int utc_cion_group_create_p(void);
+extern int utc_cion_group_create_n(void);
+extern int utc_cion_group_destroy_p(void);
+extern int utc_cion_group_destroy_n(void);
+extern int utc_cion_group_subscribe_p(void);
+extern int utc_cion_group_subscribe_n(void);
+extern int utc_cion_group_unsubscribe_p(void);
+extern int utc_cion_group_unsubscribe_n(void);
+extern int utc_cion_group_publish_p(void);
+extern int utc_cion_group_publish_n(void);
+
+extern void utc_cion_server_startup(void);
+extern void utc_cion_server_cleanup(void);
+extern int utc_cion_server_create_p(void);
+extern int utc_cion_server_create_n(void);
+extern int utc_cion_server_destroy_p(void);
+extern int utc_cion_server_destroy_n(void);
+extern int utc_cion_server_listen_p(void);
+extern int utc_cion_server_listen_n(void);
+extern int utc_cion_server_stop_p(void);
+extern int utc_cion_server_stop_n(void);
+extern int utc_cion_server_disconnect_p(void);
+extern int utc_cion_server_disconnect_n(void);
+extern int utc_cion_server_send_payload_async_p(void);
+extern int utc_cion_server_send_payload_async_n(void);
+extern int utc_cion_server_foreach_connected_peer_info_p(void);
+extern int utc_cion_server_foreach_connected_peer_info_n(void);
+extern int utc_cion_server_add_connection_result_cb_p(void);
+extern int utc_cion_server_add_connection_result_cb_n(void);
+extern int utc_cion_server_remove_connection_result_cb_p(void);
+extern int utc_cion_server_remove_connection_result_cb_n(void);
+extern int utc_cion_server_add_payload_received_cb_p(void);
+extern int utc_cion_server_add_payload_received_cb_n(void);
+extern int utc_cion_server_remove_payload_received_cb_p(void);
+extern int utc_cion_server_remove_payload_received_cb_n(void);
+extern int utc_cion_server_set_data_received_cb_p(void);
+extern int utc_cion_server_set_data_received_cb_n(void);
+extern int utc_cion_server_unset_data_received_cb_p(void);
+extern int utc_cion_server_unset_data_received_cb_n(void);
+extern int utc_cion_server_add_disconnected_cb_p(void);
+extern int utc_cion_server_add_disconnected_cb_n(void);
+extern int utc_cion_server_remove_disconnected_cb_p(void);
+extern int utc_cion_server_remove_disconnected_cb_n(void);
+extern int utc_cion_server_accept_p(void);
+extern int utc_cion_server_accept_n(void);
+extern int utc_cion_server_reject_p(void);
+extern int utc_cion_server_reject_n(void);
+extern int utc_cion_server_set_display_name_p(void);
+extern int utc_cion_server_set_display_name_n(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_p(void);
+extern int utc_cion_server_set_on_demand_launch_enabled_n(void);
+
+extern void utc_cion_client_startup(void);
+extern void utc_cion_client_cleanup(void);
+extern int utc_cion_client_create_p(void);
+extern int utc_cion_client_create_n(void);
+extern int utc_cion_client_destroy_p(void);
+extern int utc_cion_client_destroy_n(void);
+extern int utc_cion_client_try_discovery_p(void);
+extern int utc_cion_client_try_discovery_n(void);
+extern int utc_cion_client_stop_discovery_p(void);
+extern int utc_cion_client_stop_discovery_n(void);
+extern int utc_cion_client_connect_p(void);
+extern int utc_cion_client_connect_n(void);
+extern int utc_cion_client_disconnect_p(void);
+extern int utc_cion_client_disconnect_n(void);
+extern int utc_cion_client_send_data_p(void);
+extern int utc_cion_client_send_data_n(void);
+extern int utc_cion_client_send_payload_async_p(void);
+extern int utc_cion_client_send_payload_async_n(void);
+extern int utc_cion_client_add_connection_result_cb_p(void);
+extern int utc_cion_client_add_connection_result_cb_n(void);
+extern int utc_cion_client_remove_connection_result_cb_p(void);
+extern int utc_cion_client_remove_connection_result_cb_n(void);
+extern int utc_cion_client_add_payload_received_cb_p(void);
+extern int utc_cion_client_add_payload_received_cb_n(void);
+extern int utc_cion_client_remove_payload_received_cb_p(void);
+extern int utc_cion_client_remove_payload_received_cb_n(void);
+extern int utc_cion_client_add_disconnected_cb_p(void);
+extern int utc_cion_client_add_disconnected_cb_n(void);
+extern int utc_cion_client_remove_disconnected_cb_p(void);
+extern int utc_cion_client_remove_disconnected_cb_n(void);
+
+extern void utc_cion_peer_info_startup(void);
+extern void utc_cion_peer_info_cleanup(void);
+extern int utc_cion_peer_info_clone_p(void);
+extern int utc_cion_peer_info_clone_n(void);
+
+extern int utc_cion_peer_info_get_device_id_p(void);
+extern int utc_cion_peer_info_get_device_id_n(void);
+extern int utc_cion_peer_info_get_device_name_p(void);
+extern int utc_cion_peer_info_get_device_name_n(void);
+extern int utc_cion_peer_info_get_device_platform_p(void);
+extern int utc_cion_peer_info_get_device_platform_n(void);
+extern int utc_cion_peer_info_get_device_platform_version_p(void);
+extern int utc_cion_peer_info_get_device_platform_version_n(void);
+extern int utc_cion_peer_info_get_device_type_p(void);
+extern int utc_cion_peer_info_get_device_type_n(void);
+extern int utc_cion_peer_info_get_app_id_p(void);
+extern int utc_cion_peer_info_get_app_id_n(void);
+extern int utc_cion_peer_info_get_app_version_p(void);
+extern int utc_cion_peer_info_get_app_version_n(void);
+extern int utc_cion_peer_info_get_uuid_p(void);
+extern int utc_cion_peer_info_get_uuid_n(void);
+extern int utc_cion_peer_info_get_display_name_p(void);
+extern int utc_cion_peer_info_get_display_name_n(void);
+
+extern int utc_cion_peer_info_destroy_p(void);
+extern int utc_cion_peer_info_destroy_n(void);
+
+extern void utc_cion_payload_startup(void);
+extern void utc_cion_payload_cleanup(void);
+extern int utc_cion_payload_create_p(void);
+extern int utc_cion_payload_create_n(void);
+extern int utc_cion_payload_destroy_p(void);
+extern int utc_cion_payload_destroy_n(void);
+extern int utc_cion_payload_get_type_p(void);
+extern int utc_cion_payload_get_type_n(void);
+extern int utc_cion_payload_get_data_p(void);
+extern int utc_cion_payload_get_data_n(void);
+extern int utc_cion_payload_set_data_p(void);
+extern int utc_cion_payload_set_data_n(void);
+extern int utc_cion_payload_save_as_file_p(void);
+extern int utc_cion_payload_save_as_file_n(void);
+extern int utc_cion_payload_get_received_file_name_p(void);
+extern int utc_cion_payload_get_received_file_name_n(void);
+extern int utc_cion_payload_get_received_bytes_p(void);
+extern int utc_cion_payload_get_received_bytes_n(void);
+extern int utc_cion_payload_get_total_bytes_p(void);
+extern int utc_cion_payload_get_total_bytes_n(void);
+extern int utc_cion_payload_set_file_path_p(void);
+extern int utc_cion_payload_set_file_path_n(void);
+extern int utc_cion_payload_get_payload_id_p(void);
+extern int utc_cion_payload_get_payload_id_n(void);
+
+extern void utc_cion_payload_async_result_startup(void);
+extern void utc_cion_payload_async_result_cleanup(void);
+extern int utc_cion_payload_async_result_clone_p(void);
+extern int utc_cion_payload_async_result_clone_n(void);
+extern int utc_cion_payload_async_result_destroy_p(void);
+extern int utc_cion_payload_async_result_destroy_n(void);
+extern int utc_cion_payload_async_result_get_peer_info_p(void);
+extern int utc_cion_payload_async_result_get_peer_info_n(void);
+extern int utc_cion_payload_async_result_get_payload_id_p(void);
+extern int utc_cion_payload_async_result_get_payload_id_n(void);
+
+extern void utc_cion_connection_result_startup(void);
+extern void utc_cion_connection_result_cleanup(void);
+extern int utc_cion_connection_result_get_status_p(void);
+extern int utc_cion_connection_result_get_status_n(void);
+extern int utc_cion_connection_result_get_reason_p(void);
+extern int utc_cion_connection_result_get_reason_n(void);
+
+extern void utc_cion_security_startup(void);
+extern void utc_cion_security_cleanup(void);
+extern int utc_cion_security_create_p(void);
+extern int utc_cion_security_create_n(void);
+extern int utc_cion_security_destory_p(void);
+extern int utc_cion_security_destory_n(void);
+extern int utc_cion_security_set_ca_path_p(void);
+extern int utc_cion_security_set_ca_path_n(void);
+extern int utc_cion_security_set_cert_path_p(void);
+extern int utc_cion_security_set_cert_path_n(void);
+extern int utc_cion_security_set_private_key_path_p(void);
+extern int utc_cion_security_set_private_key_path_n(void);
+extern int utc_cion_security_get_ca_path_p(void);
+extern int utc_cion_security_get_ca_path_n(void);
+extern int utc_cion_security_get_cert_path_p(void);
+extern int utc_cion_security_get_cert_path_n(void);
+extern int utc_cion_security_get_private_key_path_p(void);
+extern int utc_cion_security_get_private_key_path_n(void);
+
+testcase tc_array[] = {
+    {"utc_cion_group_create_p", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_create_n", utc_cion_group_create_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_p", utc_cion_group_destroy_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_destroy_n", utc_cion_group_destroy_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_p", utc_cion_group_subscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_subscribe_n", utc_cion_group_subscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_p", utc_cion_group_unsubscribe_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_unsubscribe_n", utc_cion_group_unsubscribe_n, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_p", utc_cion_group_publish_p, utc_cion_group_startup, utc_cion_group_cleanup},
+    {"utc_cion_group_publish_n", utc_cion_group_publish_n, utc_cion_group_startup, utc_cion_group_cleanup},
+
+    {"utc_cion_server_create_p", utc_cion_server_create_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_create_n", utc_cion_server_create_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_p", utc_cion_server_destroy_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_destroy_n", utc_cion_server_destroy_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_p", utc_cion_server_listen_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_listen_n", utc_cion_server_listen_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_p", utc_cion_server_stop_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_stop_n", utc_cion_server_stop_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_p", utc_cion_server_disconnect_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_disconnect_n", utc_cion_server_disconnect_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_p", utc_cion_server_send_payload_async_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_send_payload_async_n", utc_cion_server_send_payload_async_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_p", utc_cion_server_foreach_connected_peer_info_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_foreach_connected_peer_info_n", utc_cion_server_foreach_connected_peer_info_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_p", utc_cion_server_add_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_connection_result_cb_n", utc_cion_server_add_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_p", utc_cion_server_remove_connection_result_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_connection_result_cb_n", utc_cion_server_remove_connection_result_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_p", utc_cion_server_add_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_payload_received_cb_n", utc_cion_server_add_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_p", utc_cion_server_remove_payload_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_payload_received_cb_n", utc_cion_server_remove_payload_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_p", utc_cion_server_set_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_data_received_cb_n", utc_cion_server_set_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_p", utc_cion_server_unset_data_received_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_unset_data_received_cb_n", utc_cion_server_unset_data_received_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_p", utc_cion_server_add_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_add_disconnected_cb_n", utc_cion_server_add_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_p", utc_cion_server_remove_disconnected_cb_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_remove_disconnected_cb_n", utc_cion_server_remove_disconnected_cb_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_p", utc_cion_server_accept_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_accept_n", utc_cion_server_accept_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_p", utc_cion_server_reject_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_reject_n", utc_cion_server_reject_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_p", utc_cion_server_set_display_name_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_display_name_n", utc_cion_server_set_display_name_n, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_p", utc_cion_server_set_on_demand_launch_enabled_p, utc_cion_server_startup, utc_cion_server_cleanup},
+    {"utc_cion_server_set_on_demand_launch_enabled_n", utc_cion_server_set_on_demand_launch_enabled_n, utc_cion_server_startup, utc_cion_server_cleanup},
+
+    {"utc_cion_client_create_p", utc_cion_client_create_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_create_n", utc_cion_client_create_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_p", utc_cion_client_destroy_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_destroy_n", utc_cion_client_destroy_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_p", utc_cion_client_try_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_try_discovery_n", utc_cion_client_try_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_p", utc_cion_client_stop_discovery_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_stop_discovery_n", utc_cion_client_stop_discovery_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_p", utc_cion_client_connect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_connect_n", utc_cion_client_connect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_p", utc_cion_client_disconnect_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_disconnect_n", utc_cion_client_disconnect_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_p", utc_cion_client_send_data_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_data_n", utc_cion_client_send_data_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_p", utc_cion_client_send_payload_async_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_send_payload_async_n", utc_cion_client_send_payload_async_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_p", utc_cion_client_add_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_connection_result_cb_n", utc_cion_client_add_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_p", utc_cion_client_remove_connection_result_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_connection_result_cb_n", utc_cion_client_remove_connection_result_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_p", utc_cion_client_add_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_payload_received_cb_n", utc_cion_client_add_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_p", utc_cion_client_remove_payload_received_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_payload_received_cb_n", utc_cion_client_remove_payload_received_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_p", utc_cion_client_add_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_add_disconnected_cb_n", utc_cion_client_add_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_p", utc_cion_client_remove_disconnected_cb_p, utc_cion_client_startup, utc_cion_client_cleanup},
+    {"utc_cion_client_remove_disconnected_cb_n", utc_cion_client_remove_disconnected_cb_n, utc_cion_client_startup, utc_cion_client_cleanup},
+
+    {"utc_cion_peer_info_clone_p", utc_cion_peer_info_clone_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_clone_n", utc_cion_peer_info_clone_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_get_device_id_p", utc_cion_peer_info_get_device_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_id_n", utc_cion_peer_info_get_device_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_p", utc_cion_peer_info_get_device_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_name_n", utc_cion_peer_info_get_device_name_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_p", utc_cion_peer_info_get_device_platform_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_n", utc_cion_peer_info_get_device_platform_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_p", utc_cion_peer_info_get_device_platform_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_platform_version_n", utc_cion_peer_info_get_device_platform_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_p", utc_cion_peer_info_get_device_type_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_device_type_n", utc_cion_peer_info_get_device_type_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_p", utc_cion_peer_info_get_app_id_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_id_n", utc_cion_peer_info_get_app_id_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_p", utc_cion_peer_info_get_app_version_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_app_version_n", utc_cion_peer_info_get_app_version_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_p", utc_cion_peer_info_get_uuid_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_uuid_n", utc_cion_peer_info_get_uuid_n, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_p", utc_cion_peer_info_get_display_name_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_get_display_name_n", utc_cion_peer_info_get_display_name_n, utc_cion_peer_info_startup, NULL},
+
+    {"utc_cion_peer_info_destroy_p", utc_cion_peer_info_destroy_p, utc_cion_peer_info_startup, NULL},
+    {"utc_cion_peer_info_destroy_n", utc_cion_peer_info_destroy_n, utc_cion_peer_info_startup, utc_cion_peer_info_cleanup},
+
+    {"utc_cion_payload_create_p", utc_cion_payload_create_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_create_n", utc_cion_payload_create_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_p", utc_cion_payload_destroy_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_destroy_n", utc_cion_payload_destroy_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_p", utc_cion_payload_get_type_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_type_n", utc_cion_payload_get_type_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_p", utc_cion_payload_get_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_data_n", utc_cion_payload_get_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_p", utc_cion_payload_set_data_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_data_n", utc_cion_payload_set_data_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_p", utc_cion_payload_save_as_file_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_save_as_file_n", utc_cion_payload_save_as_file_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_p", utc_cion_payload_get_received_file_name_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_file_name_n", utc_cion_payload_get_received_file_name_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_p", utc_cion_payload_get_received_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_received_bytes_n", utc_cion_payload_get_received_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_p", utc_cion_payload_get_total_bytes_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_total_bytes_n", utc_cion_payload_get_total_bytes_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_p", utc_cion_payload_set_file_path_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_set_file_path_n", utc_cion_payload_set_file_path_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_p", utc_cion_payload_get_payload_id_p, utc_cion_payload_startup, utc_cion_payload_cleanup},
+    {"utc_cion_payload_get_payload_id_n", utc_cion_payload_get_payload_id_n, utc_cion_payload_startup, utc_cion_payload_cleanup},
+
+    {"utc_cion_payload_async_result_clone_p", utc_cion_payload_async_result_clone_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_clone_n", utc_cion_payload_async_result_clone_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_p", utc_cion_payload_async_result_destroy_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_destroy_n", utc_cion_payload_async_result_destroy_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_p", utc_cion_payload_async_result_get_peer_info_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_peer_info_n", utc_cion_payload_async_result_get_peer_info_n, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_p", utc_cion_payload_async_result_get_payload_id_p, utc_cion_payload_async_result_startup, NULL},
+    {"utc_cion_payload_async_result_get_payload_id_n", utc_cion_payload_async_result_get_payload_id_n, utc_cion_payload_async_result_startup, utc_cion_payload_async_result_cleanup},
+
+    {"utc_cion_connection_result_get_status_p", utc_cion_connection_result_get_status_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_status_n", utc_cion_connection_result_get_status_n, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_p", utc_cion_connection_result_get_reason_p, utc_cion_connection_result_startup, NULL},
+    {"utc_cion_connection_result_get_reason_n", utc_cion_connection_result_get_reason_n, utc_cion_connection_result_startup, utc_cion_connection_result_cleanup},
+
+    {"utc_cion_security_create_p", utc_cion_security_create_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_create_n", utc_cion_security_create_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_p", utc_cion_security_destory_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_destory_n", utc_cion_security_destory_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_p", utc_cion_security_set_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_ca_path_n", utc_cion_security_set_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_p", utc_cion_security_set_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_cert_path_n", utc_cion_security_set_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_p", utc_cion_security_set_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_set_private_key_path_n", utc_cion_security_set_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_p", utc_cion_security_get_ca_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_ca_path_n", utc_cion_security_get_ca_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_p", utc_cion_security_get_cert_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_cert_path_n", utc_cion_security_get_cert_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_p", utc_cion_security_get_private_key_path_p, utc_cion_security_startup, utc_cion_security_cleanup},
+    {"utc_cion_security_get_private_key_path_n", utc_cion_security_get_private_key_path_n, utc_cion_security_startup, utc_cion_security_cleanup},
+
+    {NULL, NULL}
+};
+
+#endif // __TCT_CION_NATIVE_H__
diff --git a/src/utc/cion/utc-cion-client.c b/src/utc/cion/utc-cion-client.c
new file mode 100644 (file)
index 0000000..329625b
--- /dev/null
@@ -0,0 +1,915 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+
+struct cbdata {
+       cion_client_h client;
+       bool connected;
+};
+
+struct send_data {
+       cion_client_h client;
+       unsigned char *return_data;
+       unsigned int return_data_size;
+       int ret;
+};
+
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(10000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+static void __client_connection_result_cb(const char *service_name,
+               const cion_peer_info_h peer_info,
+               const cion_connection_result_h result, void *user_data)
+{
+}
+
+static void __client_connection_result_cb1(const char *service_name,
+               const cion_peer_info_h peer_info,
+               const cion_connection_result_h result, void *user_data)
+{
+       sleep(2);
+       __stop_polling_loop();
+}
+
+void utc_cion_client_startup(void)
+{
+}
+
+void utc_cion_client_cleanup(void)
+{
+}
+
+/**
+ * @testcase           utc_cion_client_create_p
+ * @since_tizen                6.5
+ * @description                Creates a cion client.
+ */
+int utc_cion_client_create_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client, "utc_cion_client_create_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_create_n
+ * @since_tizen                6.5
+ * @description                Creates a cion client for negative case.
+ */
+int utc_cion_client_create_n(void)
+{
+       int ret;
+       cion_client_h client = NULL;
+
+       ret = cion_client_create(NULL, "utc_cion_client_create_n", NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_create(&client, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys a cion client.
+ */
+int utc_cion_client_destroy_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client, "utc_cion_client_destroy_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_destroy(client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys a cion client for negative case.
+ */
+int utc_cion_client_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_client_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __client_server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_client_try_discovery_p
+ * @since_tizen                6.5
+ * @description                Tries to discovery cion server.
+ */
+int utc_cion_client_try_discovery_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client, "utc_cion_client_try_discovery_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_try_discovery_n
+ * @since_tizen                6.5
+ * @description                Tries to discovery cion server for negative case.
+ */
+int utc_cion_client_try_discovery_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_try_discovery(NULL, __client_server_discovered_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_try_discovery(client, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_stop_discovery_p
+ * @since_tizen                6.5
+ * @description                Stops to discovery cion server.
+ */
+int utc_cion_client_stop_discovery_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client, "utc_cion_client_stop_discovery_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_stop_discovery(client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_stop_discovery_n
+ * @since_tizen                6.5
+ * @description                Stops to discovery cion server for nagative case.
+ */
+int utc_cion_client_stop_discovery_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_stop_discovery(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_create(&client, "utc_cion_client_stop_discovery_n", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_stop_discovery(client);
+       assert_eq(ret, CION_ERROR_INVALID_OPERATION);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+static void __server_connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+static void __client_server_discovered_cb2(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_peer_info_h *peer = (cion_peer_info_h *)user_data;
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] server discovered", __func__);
+       ret = cion_peer_info_clone(peer_info, peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "[%s] Failed to clone peer info", __func__);
+
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_client_connect_p
+ * @since_tizen                6.5
+ * @description                Connects to a cion server.
+ */
+int utc_cion_client_connect_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       cion_peer_info_h peer = NULL;
+
+       ret = cion_server_create(&server, "utc_cion_client_connect_p",
+                       "utc_cion_client_connect_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client, "utc_cion_client_connect_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __client_connection_result_cb1, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb2,
+                       &peer);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+
+       assert_neq(peer, NULL);
+
+       ret = cion_client_connect(client, peer);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       __run_polling_loop();
+
+       cion_peer_info_destroy(peer);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_connect_n
+ * @since_tizen                6.5
+ * @description                Connects to a cion server for negative case.
+ */
+int utc_cion_client_connect_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+       cion_peer_info_h peer = (cion_peer_info_h)1;
+
+       ret = cion_client_connect(NULL, peer);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_connect(client, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_connection_request_cb2(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)user_data;
+
+       ret = cion_server_accept(server, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "[%s] Failed to accept client", __func__);
+}
+
+static void __client_server_discovered_cb3(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       struct cbdata *cbdata = (struct cbdata *)user_data;
+
+       ret = cion_client_connect(cbdata->client, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "[%s] Failed to connect to server", __func__);
+       else
+               cbdata->connected = true;
+
+       __stop_polling_loop();
+}
+
+
+static void __client_server_discovered_cb4(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       struct cbdata *cbdata = (struct cbdata *)user_data;
+
+       ret = cion_client_connect(cbdata->client, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "[%s] Failed to connect to server", __func__);
+       else
+               cbdata->connected = true;
+}
+
+void __server_data_received_cb(const char *service_name,
+               const cion_peer_info_h peer_info, const unsigned char *data,
+               unsigned int data_size, unsigned char **return_data,
+               unsigned int *return_data_size, void *user_data) {
+       char str[] ="data_result";
+       *return_data = (unsigned char *)strdup(str);
+       *return_data_size = strlen(str);
+}
+
+static gpointer __send_data_thread(gpointer data)
+{
+       unsigned char str[] = "data_test";
+       struct send_data *send_data = (struct send_data *)data;
+
+       send_data->ret = cion_client_send_data(send_data->client, str,
+                       strlen((const char*)str), 5000,
+                       &send_data->return_data, &send_data->return_data_size);
+
+       __stop_polling_loop();
+
+       return NULL;
+}
+
+/**
+ * @testcase           utc_cion_client_disconnect_p
+ * @since_tizen                6.5
+ * @description                Disonnects to a cion server.
+ */
+int utc_cion_client_disconnect_p(void)
+{
+       int ret;
+       cion_server_h server;
+       struct cbdata cbdata = { 0 };
+
+       ret = cion_server_create(&server, "utc_cion_client_disconnect_p",
+                       "utc_cion_client_disconnect_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&cbdata.client, "utc_cion_client_disconnect_p",
+                       NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb2, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(cbdata.client, __client_server_discovered_cb3,
+                       &cbdata);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       assert_eq(cbdata.connected, true);
+
+       ret = cion_client_disconnect(cbdata.client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(cbdata.client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_disconnect_n
+ * @since_tizen                6.5
+ * @description                Disonnects to a cion server for negative case.
+ */
+int utc_cion_client_disconnect_n(void)
+{
+       int ret;
+
+       ret = cion_client_disconnect(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_send_data_p
+ * @since_tizen                6.5
+ * @description                Sends data to a cion server.
+ */
+int utc_cion_client_send_data_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       GThread *thread;
+       struct send_data cbdata = { 0 };
+       struct send_data send_data = { 0 };
+
+       ret = cion_server_create(&server,
+                       "utc_cion_client_send_data_p",
+                       "utc_cion_client_send_data_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_send_data_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_set_data_received_cb(server, __server_data_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb2, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __client_connection_result_cb1, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cbdata.client = client;
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb4,
+                       &cbdata);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+
+       __run_polling_loop();
+
+       send_data.client = client;
+       thread = g_thread_new("send_data", __send_data_thread, &send_data);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for send data result", __func__);
+
+       __run_polling_loop();
+
+       assert_eq(send_data.ret, CION_ERROR_NONE);
+       assert_eq(strncmp((const char *)send_data.return_data, "data_result",
+                       send_data.return_data_size), 0);
+
+       free(send_data.return_data);
+       g_thread_unref(thread);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       /* cannot test sync API */
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_send_data_n
+ * @since_tizen                6.5
+ * @description                Sends data to a cion server for negative case.
+ */
+int utc_cion_client_send_data_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+       unsigned char data[] = { 0 };
+       unsigned char *return_data;
+       unsigned int return_data_size;
+
+       ret = cion_client_send_data(NULL, data, sizeof(data), 5, &return_data,
+                       &return_data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_send_data(client, NULL, sizeof(data), 5, &return_data,
+                       &return_data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_send_data(client, data, 0, 5, &return_data,
+                       &return_data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_send_data(client, data, sizeof(data), 5, NULL,
+                       &return_data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_send_data(client, data, sizeof(data), 5, &return_data,
+                       NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_send_payload_async_p
+ * @since_tizen                6.5
+ * @description                Sends payload to a cion server asynchronously.
+ */
+int utc_cion_client_send_payload_async_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       cion_payload_h payload;
+       unsigned char data[] = "utc_cion_client_send_payload_async_p";
+       struct cbdata cbdata;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_client_send_payload_async_p",
+                       "utc_cion_client_send_payload_async_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_send_payload_async_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb2, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cbdata.client = client;
+       cbdata.connected = false;
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb3,
+                       &cbdata);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_send_payload_async(client, payload, NULL, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+       cion_payload_destroy(payload);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+static void __client_payload_async_result_cb(
+               const cion_payload_async_result_h result, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_client_send_payload_async_n
+ * @since_tizen                6.5
+ * @description                Sends payload to a cion server asynchronously for negative case.
+ */
+int utc_cion_client_send_payload_async_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+       cion_payload_h payload = (cion_payload_h)1;
+
+       ret = cion_client_send_payload_async(NULL, payload,
+                       __client_payload_async_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_send_payload_async(client, NULL,
+                       __client_payload_async_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_add_connection_result_cb_p
+ * @since_tizen                6.5
+ * @description                Adds a connection result callback function.
+ */
+int utc_cion_client_add_connection_result_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_add_connection_result_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __client_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_add_connection_result_cb_n
+ * @since_tizen                6.5
+ * @description                Adds a connection result callback function for negative case.
+ */
+int utc_cion_client_add_connection_result_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_add_connection_result_cb(NULL,
+                       __client_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_add_connection_result_cb(client, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_remove_connection_result_cb_p
+ * @since_tizen                6.5
+ * @description                Removes a connection result callback function.
+ */
+int utc_cion_client_remove_connection_result_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_remove_connection_result_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __client_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_remove_connection_result_cb(client,
+                       __client_connection_result_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_remove_connection_result_cb_n
+ * @since_tizen                6.5
+ * @description                Removes a connection result callback function for negative case.
+ */
+int utc_cion_client_remove_connection_result_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_remove_connection_result_cb(NULL,
+                       __client_connection_result_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_remove_connection_result_cb(client, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __client_payload_received_cb(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status,
+               void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_client_add_payload_received_cb_p
+ * @since_tizen                6.5
+ * @description                Adds a callback function to receive payload.
+ */
+int utc_cion_client_add_payload_received_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_add_payload_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_payload_received_cb(client,
+                       __client_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_add_payload_received_cb_n
+ * @since_tizen                6.5
+ * @description                Adds a callback function to receive payload for negative case.
+ */
+int utc_cion_client_add_payload_received_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_add_payload_received_cb(NULL,
+                       __client_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_add_payload_received_cb(client, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_remove_payload_received_cb_p
+ * @since_tizen                6.5
+ * @description                Removes a callback function to receive payload.
+ */
+int utc_cion_client_remove_payload_received_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_remove_payload_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_payload_received_cb(client,
+                       __client_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_remove_payload_received_cb(client,
+                       __client_payload_received_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_remove_payload_received_cb_n
+ * @since_tizen                6.5
+ * @description                Removes a callback function to receive payload for negative case.
+ */
+int utc_cion_client_remove_payload_received_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_remove_payload_received_cb(NULL,
+                       __client_payload_received_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_remove_connection_result_cb(client, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __client_disconnected_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_client_add_disconnected_cb_p
+ * @since_tizen                6.5
+ * @description                Adds a callback function to get disconnected info.
+ */
+int utc_cion_client_add_disconnected_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_add_disconnected_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_disconnected_cb(client,
+                       __client_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_add_disconnected_cb_n
+ * @since_tizen                6.5
+ * @description                Adds a callback function to get disconnected info for nagative case.
+ */
+int utc_cion_client_add_disconnected_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_add_disconnected_cb(NULL,
+                       __client_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_add_disconnected_cb(client, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+
+/**
+ * @testcase           utc_cion_client_remove_disconnected_cb_p
+ * @since_tizen                6.5
+ * @description                Removes a callback function to get disconnected info.
+ */
+int utc_cion_client_remove_disconnected_cb_p(void)
+{
+       int ret;
+       cion_client_h client;
+
+       ret = cion_client_create(&client,
+                       "utc_cion_client_remove_disconnected_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_disconnected_cb(client,
+                       __client_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_remove_disconnected_cb(client, __client_disconnected_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_client_destroy(client);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_client_remove_disconnected_cb_n
+ * @since_tizen                6.5
+ * @description                Removes a callback function to get disconnected info for negative case.
+ */
+int utc_cion_client_remove_disconnected_cb_n(void)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)1;
+
+       ret = cion_client_remove_disconnected_cb(NULL,
+                       __client_disconnected_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_client_remove_disconnected_cb(client, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-connection_result.c b/src/utc/cion/utc-cion-connection_result.c
new file mode 100644 (file)
index 0000000..de85cf8
--- /dev/null
@@ -0,0 +1,236 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(10000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+cion_server_h server;
+cion_client_h client;
+cion_peer_info_h peer;
+int get_status_test_result;
+int get_reason_test_result;
+cion_connection_status_e status = CION_CONNECTION_STATUS_ERROR;
+bool connected;
+
+static void __connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+
+       ret = cion_server_reject(server, peer_info, "test reason");
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to accept client");
+}
+
+static void __server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+
+       ret = cion_client_connect(client, peer_info);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to connect");
+           return;
+       }
+
+       dlog_print(DLOG_INFO, LOG_TAG, "Found server and connect");
+}
+
+static void __connection_result_cb(const char * service_name,
+                const cion_peer_info_h peer_info,
+                const cion_connection_result_h result, void * user_data)
+{
+       char *reason = NULL;
+
+       get_status_test_result = cion_connection_result_get_status(result, &status);
+
+       get_reason_test_result = cion_connection_result_get_reason(result, &reason);
+       if (reason)
+               free(reason);
+
+       connected = true;
+       __stop_polling_loop();
+}
+
+void utc_cion_connection_result_startup(void)
+{
+       int ret;
+
+       if (connected)
+       return;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_connection_result_startup",
+                       "utc_cion_connection_result_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create server");
+               return;
+       }
+
+       ret = cion_client_create(&client, "utc_cion_connection_result_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create client");
+               return;
+       }
+
+       ret = cion_server_listen(server, __connection_request_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to listen");
+               return;
+       }
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+               "Failed to add connection result cb");
+               return;
+       }
+
+       ret = cion_client_try_discovery(client, __server_discovered_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to try discovery");
+               return;
+       }
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+}
+
+void utc_cion_connection_result_cleanup(void)
+{
+       int ret;
+
+       connected = false;
+       if (peer) {
+               ret = cion_peer_info_destroy(peer);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy peer info");
+               peer = NULL;
+       }
+
+       if (client) {
+               ret = cion_client_destroy(client);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy client");
+               client = NULL;
+       }
+
+       if (server) {
+               ret = cion_server_destroy(server);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy server");
+               server = NULL;
+       }
+
+}
+
+/**
+ * @testcase           utc_cion_connection_result_get_status_p
+ * @since_tizen                6.5
+ * @description                Gets connection result status.
+ */
+int utc_cion_connection_result_get_status_p(void)
+{
+       int ret;
+
+       assert_eq(get_status_test_result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_connection_result_get_status_n
+ * @since_tizen                6.5
+ * @description                Gets connection result status for negative case.
+ */
+int utc_cion_connection_result_get_status_n(void)
+{
+       int ret;
+       cion_connection_result_h result = (cion_connection_result_h)1;
+       cion_connection_status_e status;
+
+       ret = cion_connection_result_get_status(NULL, &status);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_connection_result_get_status(&result, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_connection_result_get_reason_p
+ * @since_tizen                6.5
+ * @description                Gets connection result reason.
+ */
+int utc_cion_connection_result_get_reason_p(void)
+{
+       int ret;
+
+       assert_eq(get_reason_test_result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_connection_result_get_reason_n
+ * @since_tizen                6.5
+ * @description                Gets connection result reason for negative case.
+ */
+int utc_cion_connection_result_get_reason_n(void)
+{
+       int ret;
+       cion_connection_result_h result = (cion_connection_result_h)1;
+       char *reason = NULL;
+
+       ret = cion_connection_result_get_reason(NULL, &reason);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_connection_result_get_reason(&result, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-group.c b/src/utc/cion/utc-cion-group.c
new file mode 100644 (file)
index 0000000..72fa14a
--- /dev/null
@@ -0,0 +1,260 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+
+//& set: Cion
+
+void utc_cion_group_startup(void)
+{
+}
+
+void utc_cion_group_cleanup(void)
+{
+}
+
+/**
+ * @testcase           utc_cion_group_create_p
+ * @since_tizen                6.5
+ * @description                Creates a cion group with topic.
+ */
+int utc_cion_group_create_p(void)
+{
+       int ret;
+       cion_group_h group;
+
+       ret = cion_group_create(&group, "utc_cion_group_create_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_group_destroy(group);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_create_n
+ * @since_tizen                6.5
+ * @description                Creates a cion group for negative case.
+ */
+int utc_cion_group_create_n(void)
+{
+       int ret;
+       cion_group_h group = NULL;
+
+       ret = cion_group_create(NULL, "utc_cion_group_create_n", NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_group_create(&group, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_group_create(NULL, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys a cion group.
+ */
+int utc_cion_group_destroy_p(void)
+{
+       int ret;
+       cion_group_h group;
+
+       ret = cion_group_create(&group, "utc_cion_group_destroy_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_destroy(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys a cion group for negative case.
+ */
+int utc_cion_group_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_group_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_subscribe_p
+ * @since_tizen                6.5
+ * @description                Subscribes to a topic that the group handle has.
+ */
+int utc_cion_group_subscribe_p(void)
+{
+       int ret;
+       cion_group_h group;
+
+       ret = cion_group_create(&group, "utc_cion_group_subscribe_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_subscribe(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_group_destroy(group);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_subscribe_n
+ * @since_tizen                6.5
+ * @description                Subscribes to a topic that the group handle has for negative case.
+ */
+int utc_cion_group_subscribe_n(void)
+{
+       int ret;
+
+       ret = cion_group_subscribe(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_unsubscribe_p
+ * @since_tizen                6.5
+ * @description                Unsubscribes a topic that the group handle has.
+ */
+int utc_cion_group_unsubscribe_p(void)
+{
+       int ret;
+       cion_group_h group;
+
+       ret = cion_group_create(&group, "utc_cion_group_unsubscribe_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_subscribe(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_unsubscribe(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_group_destroy(group);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_unsubscribe_p
+ * @since_tizen                6.5
+ * @description                Unsubscribes a topic that the group handle has for negative case.
+ */
+int utc_cion_group_unsubscribe_n(void)
+{
+       int ret;
+       cion_group_h group = (cion_group_h)1;
+
+       ret = cion_group_unsubscribe(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_group_create(&group, "utc_cion_group_unsubscribe_n", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       /* test unsubscribe without subscribe */
+       ret = cion_group_unsubscribe(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_group_destroy(group);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_publish_p
+ * @since_tizen                6.5
+ * @description                Publishes the payload.
+ */
+int utc_cion_group_publish_p(void)
+{
+       int ret;
+       cion_group_h group;
+       cion_payload_h payload;
+       unsigned char data[] = "test data";
+
+       ret = cion_group_create(&group, "utc_cion_group_publish_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_subscribe(group);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_publish(group, payload);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_group_destroy(group);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_group_publish_n
+ * @since_tizen                6.5
+ * @description                Publishes the payload for negative case.
+ */
+int utc_cion_group_publish_n(void)
+{
+       int ret;
+       cion_group_h group = (cion_group_h)1;
+       cion_payload_h payload = (cion_payload_h)1;
+
+       ret = cion_group_publish(NULL, payload);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_group_create(&group, "utc_cion_group_publish_n", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_publish(group, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_publish(group, payload);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       cion_payload_destroy(payload);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_group_publish(group, payload);
+       assert_eq(ret, CION_ERROR_INVALID_OPERATION);
+
+       cion_payload_destroy(payload);
+       cion_group_destroy(group);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-payload.c b/src/utc/cion/utc-cion-payload.c
new file mode 100644 (file)
index 0000000..4dc5fdc
--- /dev/null
@@ -0,0 +1,824 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <app_common.h>
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(5000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+cion_server_h server;
+cion_client_h client;
+cion_payload_h payload;
+
+void utc_cion_payload_startup(void)
+{
+       int ret;
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create payload");
+}
+
+void utc_cion_payload_cleanup(void)
+{
+       cion_payload_destroy(payload);
+       payload = NULL;
+}
+
+/**
+ * @testcase           utc_cion_payload_create_p
+ * @since_tizen                6.5
+ * @description                Creates payload.
+ */
+int utc_cion_payload_create_p(void)
+{
+    int ret;
+    cion_payload_h datapayload = NULL;
+
+    ret = cion_payload_create(&datapayload, CION_PAYLOAD_TYPE_DATA);
+    assert_eq(ret, CION_ERROR_NONE);
+
+    cion_payload_destroy(datapayload);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_create_n
+ * @since_tizen                6.5
+ * @description                Creates payload for negative case.
+ */
+int utc_cion_payload_create_n(void)
+{
+       int ret;
+
+       ret = cion_payload_create(NULL, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys payload.
+ */
+int utc_cion_payload_destroy_p(void)
+{
+       int ret;
+       cion_payload_h datapayload = NULL;
+
+       ret = cion_payload_create(&datapayload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_destroy(datapayload);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys payload for negative case.
+ */
+int utc_cion_payload_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_payload_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_type_p
+ * @since_tizen                6.5
+ * @description                Gets payload type.
+ */
+int utc_cion_payload_get_type_p(void)
+{
+       int ret;
+       cion_payload_type_e type;
+
+       ret = cion_payload_get_type(payload, &type);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_type_n
+ * @since_tizen                6.5
+ * @description                Gets payload type for negative case.
+ */
+int utc_cion_payload_get_type_n(void)
+{
+       int ret;
+       cion_payload_type_e type;
+
+       ret = cion_payload_get_type(NULL, &type);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_type(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_data_p
+ * @since_tizen                6.5
+ * @description                Gets data.
+ */
+int utc_cion_payload_get_data_p(void)
+{
+       int ret;
+       unsigned char data[] = "utc_cion_payload_get_data_p";
+       unsigned char *get_data = NULL;
+       unsigned int data_size = 0;
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_get_data(payload, &get_data, &data_size);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(get_data, NULL);
+       assert_eq(data_size, sizeof(data));
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_data_n
+ * @since_tizen                6.5
+ * @description                Gets data for negative case.
+ */
+int utc_cion_payload_get_data_n(void)
+{
+       int ret;
+       unsigned char *data;
+       unsigned int data_size;
+
+       ret = cion_payload_get_data(NULL, &data, &data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_data(payload, NULL, &data_size);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_data(payload, &data, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_set_data_p
+ * @since_tizen                6.5
+ * @description                Sets data.
+ */
+int utc_cion_payload_set_data_p(void)
+{
+       int ret;
+       unsigned char data[] = "utc_cion_payload_set_data_p";
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_set_data_n
+ * @since_tizen                6.5
+ * @description                Sets data for negative case.
+ */
+int utc_cion_payload_set_data_n(void)
+{
+       int ret;
+       unsigned char data[] = "utc_cion_payload_set_data_n";
+
+       ret = cion_payload_set_data(NULL, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_set_data(payload, NULL, sizeof(data));
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_set_data(payload, data, 0);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+struct cbdata {
+       cion_client_h client;
+       bool connected;
+};
+
+static void __server_connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)user_data;
+       ret = cion_server_accept(server, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to accept client");
+}
+
+static void __client_server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)user_data;
+
+       ret = cion_client_connect(client, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to connect server");
+}
+
+static void __connection_result_cb(const char *service_name,
+               const cion_peer_info_h peer_info,
+               const cion_connection_result_h result, void *user_data)
+{
+       int ret;
+       cion_connection_status_e status = CION_CONNECTION_STATUS_ERROR;
+       bool *connected = (bool *)user_data;
+
+       ret = cion_connection_result_get_status(result, &status);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to get connection result");
+
+       if (status == CION_CONNECTION_STATUS_OK) {
+               dlog_print(DLOG_INFO, LOG_TAG, "CONNECTED");
+               *connected = true;
+       } else {
+               dlog_print(DLOG_INFO, LOG_TAG, "NOT CONNECTED");
+               *connected = false;
+       }
+
+       __stop_polling_loop();
+}
+
+static void __server_payload_received_cb(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status, void *user_data)
+{
+       char *data_path;
+       char save_as[PATH_MAX];
+       int *result = (int *)user_data;
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_FAILURE) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+               "Payload transfer status failure");
+               return;
+       }
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_IN_PROGRESS) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Payload transfer is in progress");
+               return;
+       }
+
+       data_path = app_get_data_path();
+       snprintf(save_as, sizeof(save_as), "%s/download.png", data_path);
+       free(data_path);
+
+       *result = cion_payload_save_as_file(payload, save_as);
+
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_payload_save_as_file_p
+ * @since_tizen                6.5
+ * @description                Saves a received file payload as a file.
+ */
+int utc_cion_payload_save_as_file_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       bool connected = false;
+       cion_payload_h payload;
+       char icon_path[PATH_MAX];
+       char *shared_res_path;
+       int result = CION_ERROR_OPERATION_FAILED;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_payload_save_as_file_p",
+                       "utc_cion_payload_save_as_file_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_payload_save_as_file_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, &connected);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb, client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       shared_res_path = app_get_shared_resource_path();
+       snprintf(icon_path, sizeof(icon_path), "%s/cion-native-utc.png",
+       shared_res_path);
+       free(shared_res_path);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_file_path(payload, icon_path);
+
+       ret = cion_client_send_payload_async(client, payload, NULL, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for sending file to server", __func__);
+       __run_polling_loop();
+
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       assert_eq(result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_save_as_file_n
+ * @since_tizen                6.5
+ * @description                Saves a received file payload as a file for negative case.
+ */
+int utc_cion_payload_save_as_file_n(void)
+{
+       int ret;
+
+       ret = cion_payload_save_as_file(NULL, "path");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_save_as_file(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_payload_received_cb2(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status, void *user_data)
+{
+       int *result = (int *)user_data;
+       char *file_name;
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_FAILURE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Payload transfer status failure");
+               return;
+       }
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_IN_PROGRESS) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Payload transfer is in progress");
+               return;
+       }
+
+       *result = cion_payload_get_received_file_name(payload, &file_name);
+       dlog_print(DLOG_INFO, LOG_TAG, "Received file name: %s", file_name);
+       free(file_name);
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_payload_get_received_file_name_p
+ * @since_tizen                6.5
+ * @description                Gets a received file name.
+ */
+int utc_cion_payload_get_received_file_name_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       bool connected = false;
+       cion_payload_h payload;
+       char icon_path[PATH_MAX];
+       char *shared_res_path;
+       int result = CION_ERROR_OPERATION_FAILED;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_payload_get_received_file_name_p",
+                       "utc_cion_payload_get_received_file_name_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_payload_get_received_file_name_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, &connected);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb, client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb2, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       shared_res_path = app_get_shared_resource_path();
+       snprintf(icon_path, sizeof(icon_path), "%s/cion-native-utc.png",
+       shared_res_path);
+       free(shared_res_path);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_file_path(payload, icon_path);
+
+       ret = cion_client_send_payload_async(client, payload, NULL, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for sending file to server", __func__);
+       __run_polling_loop();
+
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       assert_eq(result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_received_file_name_n
+ * @since_tizen                6.5
+ * @description                Gets a received file name for negative case.
+ */
+int utc_cion_payload_get_received_file_name_n(void)
+{
+       int ret;
+       char *file_name;
+
+       ret = cion_payload_get_received_file_name(NULL, &file_name);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_received_file_name(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_payload_received_cb3(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status, void *user_data)
+{
+       int *result = (int *)user_data;
+       uint64_t bytes;
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_FAILURE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Payload transfer status failure");
+               return;
+       }
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_IN_PROGRESS) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Payload transfer is in progress");
+               return;
+       }
+
+       *result = cion_payload_get_received_bytes(payload, &bytes);
+       dlog_print(DLOG_INFO, LOG_TAG, "Received bytes: %llu", bytes);
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_payload_get_received_bytes_p
+ * @since_tizen                6.5
+ * @description                Gets received file bytes.
+ */
+int utc_cion_payload_get_received_bytes_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       bool connected = false;
+       cion_payload_h payload;
+       char icon_path[PATH_MAX];
+       char *shared_res_path;
+       int result = CION_ERROR_OPERATION_FAILED;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_payload_get_received_bytes_p",
+                       "utc_cion_payload_get_received_bytes_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_payload_get_received_bytes_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, &connected);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb,
+                       client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb3, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       shared_res_path = app_get_shared_resource_path();
+       snprintf(icon_path, sizeof(icon_path), "%s/cion-native-utc.png",
+                       shared_res_path);
+       free(shared_res_path);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_file_path(payload, icon_path);
+
+       ret = cion_client_send_payload_async(client, payload, NULL, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for sending file to server", __func__);
+       __run_polling_loop();
+
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       assert_eq(result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_received_bytes_n
+ * @since_tizen                6.5
+ * @description                Gets received file bytes for negative case.
+ */
+int utc_cion_payload_get_received_bytes_n(void)
+{
+    int ret;
+    uint64_t bytes;
+
+    ret = cion_payload_get_received_bytes(NULL, &bytes);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_payload_get_received_bytes(payload, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+static void __server_payload_received_cb4(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status, void *user_data)
+{
+       int *result = (int *)user_data;
+       uint64_t bytes;
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_FAILURE) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "Payload transfer status failure");
+               return;
+       }
+
+       if (status == CION_PAYLOAD_TRANSFER_STATUS_IN_PROGRESS) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "Payload transfer is in progress");
+               return;
+       }
+
+       *result = cion_payload_get_total_bytes(payload, &bytes);
+       dlog_print(DLOG_INFO, LOG_TAG, "Total bytes: %llu", bytes);
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_payload_get_total_bytes_p
+ * @since_tizen                6.5
+ * @description                Gets total bytes of received file.
+ */
+int utc_cion_payload_get_total_bytes_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       bool connected = false;
+       cion_payload_h payload;
+       char icon_path[PATH_MAX];
+       char *shared_res_path;
+       int result = CION_ERROR_OPERATION_FAILED;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_payload_get_total_bytes_p",
+                       "utc_cion_payload_get_total_bytes_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_payload_get_total_bytes_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, &connected);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb, client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for discovering & connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb4, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       shared_res_path = app_get_shared_resource_path();
+       snprintf(icon_path, sizeof(icon_path), "%s/cion-native-utc.png",
+                       shared_res_path);
+       free(shared_res_path);
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_file_path(payload, icon_path);
+
+       ret = cion_client_send_payload_async(client, payload, NULL, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for sending file to server", __func__);
+       __run_polling_loop();
+
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       assert_eq(result, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_total_bytes_n
+ * @since_tizen                6.5
+ * @description                Gets total bytes of received file for negative case.
+ */
+int utc_cion_payload_get_total_bytes_n(void)
+{
+       int ret;
+       uint64_t bytes;
+
+       ret = cion_payload_get_total_bytes(NULL, &bytes);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_total_bytes(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_set_file_path_p
+ * @since_tizen                6.5
+ * @description                Sets file path.
+ */
+int utc_cion_payload_set_file_path_p(void)
+{
+       int ret;
+       cion_payload_h file_payload;
+       char *res_path;
+       char path[PATH_MAX];
+
+       res_path = app_get_shared_resource_path();
+
+       snprintf(path, sizeof(path), "%s/cion-native-utc.png", res_path);
+       free(res_path);
+
+       ret = cion_payload_create(&file_payload, CION_PAYLOAD_TYPE_FILE);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_file_path(file_payload, path);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_set_file_path_n
+ * @since_tizen                6.5
+ * @description                Sets file path for negative case.
+ */
+int utc_cion_payload_set_file_path_n(void)
+{
+       int ret;
+
+       ret = cion_payload_set_file_path(NULL, "path");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_set_file_path(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_payload_id_p
+ * @since_tizen                6.5
+ * @description                Gets payload id.
+ */
+int utc_cion_payload_get_payload_id_p(void)
+{
+       int ret;
+       char *payload_id = NULL;
+
+       ret = cion_payload_get_payload_id(payload, &payload_id);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       free(payload_id);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_get_payload_id_n
+ * @since_tizen                6.5
+ * @description                Gets payload id for negative case.
+ */
+int utc_cion_payload_get_payload_id_n(void)
+{
+       int ret;
+       char *payload_id;
+
+       ret = cion_payload_get_payload_id(NULL, &payload_id);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_get_payload_id(payload, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-payload_async_result.c b/src/utc/cion/utc-cion-payload_async_result.c
new file mode 100644 (file)
index 0000000..8e12524
--- /dev/null
@@ -0,0 +1,417 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(5000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+cion_server_h server;
+cion_client_h client;
+bool connected = false;
+
+static void __connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+
+       ret = cion_server_accept(server, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to accept client");
+}
+
+static void __server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+
+       ret = cion_client_connect(client, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to connect to server1");
+
+       dlog_print(DLOG_INFO, LOG_TAG, "Found server and try connect");
+}
+
+static void __connection_result_cb(const char *service_name,
+               const cion_peer_info_h peer_info,
+               const cion_connection_result_h result, void *user_data)
+{
+       cion_connection_status_e status;
+
+       int ret = cion_connection_result_get_status(result, &status);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to get connection status");
+       if (status == CION_CONNECTION_STATUS_OK) {
+               dlog_print(DLOG_INFO, LOG_TAG, "Connection established");
+               connected = true;
+       }
+       __stop_polling_loop();
+}
+
+void utc_cion_payload_async_result_startup(void)
+{
+       int ret;
+
+       if (connected)
+               return;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_payload_async_result_startup",
+                       "utc_cion_payload_async_result_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create server");
+               return;
+       }
+
+       ret = cion_client_create(&client,
+                       "utc_cion_payload_async_result_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create client");
+               return;
+       }
+
+       ret = cion_server_listen(server, __connection_request_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to listen");
+               return;
+       }
+
+       ret = cion_client_add_connection_result_cb(client,
+                       __connection_result_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+               "Failed to add connection result cb");
+               return;
+       }
+
+       ret = cion_client_try_discovery(client, __server_discovered_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to try discovery");
+               return;
+       }
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+}
+
+void utc_cion_payload_async_result_cleanup(void)
+{
+
+       int ret;
+
+       connected = false;
+
+       if (client) {
+               ret = cion_client_destroy(client);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy client");
+               client = NULL;
+       }
+
+       if (server) {
+               ret = cion_server_destroy(server);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy server");
+               server = NULL;
+       }
+
+}
+
+void __payload_async_result_cb(const cion_payload_async_result_h result,
+               void *user_data)
+{
+       int ret;
+       cion_payload_async_result_h *clone = (cion_payload_async_result_h *)user_data;
+
+       ret = cion_payload_async_result_clone(result, clone);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone payload async result");
+
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_clone_p
+ * @since_tizen                6.5
+ * @description                Creates a clone of payload async result .
+ */
+int utc_cion_payload_async_result_clone_p(void)
+{
+       int ret;
+       cion_payload_h payload;
+       cion_payload_async_result_h result = NULL;
+       unsigned char data[] = "utc_cion_payload_async_result_clone_p";
+
+       if (!connected) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Connection is not established");
+               return 1;
+       }
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_send_payload_async(client, payload,
+                       __payload_async_result_cb, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for send payload async result", __func__);
+       __run_polling_loop();
+
+       assert_neq(result, NULL);
+
+       cion_payload_destroy(payload);
+       cion_payload_async_result_destroy(result);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_clone_p
+ * @since_tizen                6.5
+ * @description                Creates a clone of payload async result for negative case.
+ */
+int utc_cion_payload_async_result_clone_n(void)
+{
+    int ret;
+    cion_payload_async_result_h result = (cion_payload_async_result_h)1;
+    cion_payload_async_result_h clone;
+
+    ret = cion_payload_async_result_clone(NULL, &clone);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_payload_async_result_clone(result, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys a payload async result.
+ */
+int utc_cion_payload_async_result_destroy_p(void)
+{
+       int ret;
+       cion_payload_h payload;
+       cion_payload_async_result_h result = NULL;
+       unsigned char data[] = "utc_cion_payload_async_result_destroy_p";
+
+       if (!connected) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Connection is not established");
+               return 1;
+       }
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_send_payload_async(client, payload,
+                       __payload_async_result_cb, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for send payload async result", __func__);
+       __run_polling_loop();
+
+       assert_neq(result, NULL);
+       cion_payload_destroy(payload);
+
+       ret = cion_payload_async_result_destroy(result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys a payload async result for negative case.
+ */
+int utc_cion_payload_async_result_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_payload_async_result_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_get_peer_info_p
+ * @since_tizen                6.5
+ * @description                Gets peer info from payload async result.
+ */
+int utc_cion_payload_async_result_get_peer_info_p(void)
+{
+       int ret;
+       cion_payload_h payload;
+       cion_payload_async_result_h result = NULL;
+       unsigned char data[] = "utc_cion_payload_async_result_get_peer_info_p";
+       cion_peer_info_h peer = NULL;
+
+       if (!connected) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Connection is not established");
+               return 1;
+       }
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_send_payload_async(client, payload,
+                       __payload_async_result_cb, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for send payload async result", __func__);
+       __run_polling_loop();
+
+       assert_neq(result, NULL);
+
+       ret = cion_payload_async_result_get_peer_info(result, &peer);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(peer, NULL);
+
+       cion_peer_info_destroy(peer);
+       cion_payload_destroy(payload);
+
+       cion_payload_async_result_destroy(result);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_get_peer_info_n
+ * @since_tizen                6.5
+ * @description                Gets peer info from payload async result for negative case.
+ */
+int utc_cion_payload_async_result_get_peer_info_n(void)
+{
+       int ret;
+       cion_payload_async_result_h result = (cion_payload_async_result_h)1;
+       cion_peer_info_h peer;
+
+       ret = cion_payload_async_result_get_peer_info(NULL, &peer);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_async_result_get_peer_info(result, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_get_payload_id_p
+ * @since_tizen                6.5
+ * @description                Gets payload id from payload async result.
+ */
+int utc_cion_payload_async_result_get_payload_id_p(void)
+{
+       int ret;
+       cion_payload_h payload;
+       cion_payload_async_result_h result = NULL;
+       unsigned char data[] = "utc_cion_payload_async_result_get_payload_id_p";
+       char *payload_id = NULL;
+
+       if (!connected) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Connection is not established");
+               return 1;
+       }
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, data, sizeof(data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_send_payload_async(client, payload,
+                       __payload_async_result_cb, &result);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for send payload async result", __func__);
+       __run_polling_loop();
+
+       assert_neq(result, NULL);
+
+       ret = cion_payload_async_result_get_payload_id(result, &payload_id);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(payload_id, NULL);
+
+       free(payload_id);
+       cion_payload_destroy(payload);
+
+       cion_payload_async_result_destroy(result);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_payload_async_result_get_payload_id_n
+ * @since_tizen                6.5
+ * @description                Gets payload id from payload async result for negative case.
+ */
+int utc_cion_payload_async_result_get_payload_id_n(void)
+{
+       int ret;
+       cion_payload_async_result_h result = (cion_payload_async_result_h)1;
+       char *payload_id = NULL;
+
+       ret = cion_payload_async_result_get_payload_id(NULL, &payload_id);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_payload_async_result_get_payload_id(result, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-peer_info.c b/src/utc/cion/utc-cion-peer_info.c
new file mode 100644 (file)
index 0000000..1083da0
--- /dev/null
@@ -0,0 +1,592 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(5000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+cion_server_h server;
+cion_client_h client;
+cion_peer_info_h peer;
+bool discovered;
+
+static void __connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+static void __server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+
+       ret = cion_peer_info_clone(peer_info, &peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+
+       dlog_print(DLOG_INFO, LOG_TAG, "Found server");
+       discovered = true;
+
+       __stop_polling_loop();
+}
+
+void utc_cion_peer_info_startup(void)
+{
+       int ret;
+
+       if (discovered)
+               return;
+
+       ret = cion_server_create(&server, "utc_cion_peer_info_startup",
+                       "utc_cion_peer_info_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create server");
+               return;
+       }
+
+       ret = cion_client_create(&client, "utc_cion_peer_info_startup", NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to create client");
+               return;
+       }
+
+       ret = cion_server_listen(server, __connection_request_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to listen");
+               return;
+       }
+
+       ret = cion_client_try_discovery(client, __server_discovered_cb, NULL);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to try discovery");
+               return;
+       }
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+}
+
+void utc_cion_peer_info_cleanup(void)
+{
+       int ret;
+
+       if (peer) {
+               ret = cion_peer_info_destroy(peer);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy peer info");
+               peer = NULL;
+       }
+
+       if (client) {
+               ret = cion_client_destroy(client);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy client");
+               client = NULL;
+       }
+
+       if (server) {
+               ret = cion_server_destroy(server);
+               if (ret != CION_ERROR_NONE)
+                       dlog_print(DLOG_ERROR, LOG_TAG, "Failed to destroy server");
+               server = NULL;
+       }
+
+       discovered = false;
+
+}
+
+/**
+ * @testcase           utc_cion_peer_info_clone_p
+ * @since_tizen                6.5
+ * @description                Creates a clone of peer info.
+ */
+int utc_cion_peer_info_clone_p(void)
+{
+       int ret;
+       cion_peer_info_h clone;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_clone(peer, &clone);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_clone_n
+ * @since_tizen                6.5
+ * @description                Creates a clone of peer info for negative case.
+ */
+int utc_cion_peer_info_clone_n(void)
+{
+    int ret;
+    cion_peer_info_h clone;
+
+    ret = cion_peer_info_clone(NULL, &clone);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_clone(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys a peer info.
+ */
+int utc_cion_peer_info_destroy_p(void)
+{
+       int ret;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_destroy(peer);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       peer = NULL;
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys a peer info for negative case.
+ */
+int utc_cion_peer_info_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_peer_info_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_id_p
+ * @since_tizen                6.5
+ * @description                Gets device id.
+ */
+int utc_cion_peer_info_get_device_id_p(void)
+{
+       int ret;
+       char *device_id = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_device_id(peer, &device_id);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(device_id, NULL);
+
+       free(device_id);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_id_n
+ * @since_tizen                6.5
+ * @description                Gets device id for negative case.
+ */
+int utc_cion_peer_info_get_device_id_n(void)
+{
+    int ret;
+    char *device_id;
+
+    ret = cion_peer_info_get_device_id(NULL, &device_id);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_device_id(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_name_p
+ * @since_tizen                6.5
+ * @description                Gets device name.
+ */
+int utc_cion_peer_info_get_device_name_p(void)
+{
+       int ret;
+       char *device_name = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_device_name(peer, &device_name);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(device_name, NULL);
+
+       free(device_name);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_name_n
+ * @since_tizen                6.5
+ * @description                Gets device name for negative case.
+ */
+int utc_cion_peer_info_get_device_name_n(void)
+{
+    int ret;
+    char *device_name;
+
+    ret = cion_peer_info_get_device_name(NULL, &device_name);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_device_name(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_platform_p
+ * @since_tizen                6.5
+ * @description                Gets device platform.
+ */
+int utc_cion_peer_info_get_device_platform_p(void)
+{
+       int ret;
+       char *device_platform = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_device_platform(peer, &device_platform);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(device_platform, NULL);
+
+       free(device_platform);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_platform_n
+ * @since_tizen                6.5
+ * @description                Gets device platform.
+ */
+int utc_cion_peer_info_get_device_platform_n(void)
+{
+    int ret;
+    char *device_platform;
+
+    ret = cion_peer_info_get_device_platform(NULL, &device_platform);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_device_platform(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_platform_version_p
+ * @since_tizen                6.5
+ * @description                Gets device platform version.
+ */
+int utc_cion_peer_info_get_device_platform_version_p(void)
+{
+       int ret;
+       char *device_platform_version = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_device_platform_version(peer,
+       &device_platform_version);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(device_platform_version, NULL);
+
+       free(device_platform_version);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_platform_version_n
+ * @since_tizen                6.5
+ * @description                Gets device platform version for negative case.
+ */
+int utc_cion_peer_info_get_device_platform_version_n(void)
+{
+       int ret;
+       char *device_platform_version;
+
+       ret = cion_peer_info_get_device_platform_version(NULL, &device_platform_version);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_peer_info_get_device_platform_version(peer, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_type_p
+ * @since_tizen                6.5
+ * @description                Gets device type.
+ */
+int utc_cion_peer_info_get_device_type_p(void)
+{
+       int ret;
+       char *device_type = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_device_type(peer, &device_type);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(device_type, NULL);
+
+       free(device_type);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_device_type_n
+ * @since_tizen                6.5
+ * @description                Gets device type for negative case.
+ */
+int utc_cion_peer_info_get_device_type_n(void)
+{
+       int ret;
+       char *device_type;
+
+       ret = cion_peer_info_get_device_type(NULL, &device_type);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_peer_info_get_device_type(peer, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_app_id_p
+ * @since_tizen                6.5
+ * @description                Gets application id.
+ */
+int utc_cion_peer_info_get_app_id_p(void)
+{
+       int ret;
+       char *app_id = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_app_id(peer, &app_id);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(app_id, NULL);
+
+       free(app_id);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_app_id_n
+ * @since_tizen                6.5
+ * @description                Gets application id for negative case.
+ */
+int utc_cion_peer_info_get_app_id_n(void)
+{
+    int ret;
+    char *app_id;
+
+    ret = cion_peer_info_get_app_id(NULL, &app_id);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_app_id(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_app_version_p
+ * @since_tizen                6.5
+ * @description                Gets application version.
+ */
+int utc_cion_peer_info_get_app_version_p(void)
+{
+       int ret;
+       char *app_version = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_app_version(peer, &app_version);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(app_version, NULL);
+
+       free(app_version);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_app_version_n
+ * @since_tizen                6.5
+ * @description                Gets application version for negative case.
+ */
+int utc_cion_peer_info_get_app_version_n(void)
+{
+    int ret;
+    char *app_version;
+
+    ret = cion_peer_info_get_app_version(NULL, &app_version);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_app_version(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_uuid_p
+ * @since_tizen                6.5
+ * @description                Gets uuid.
+ */
+int utc_cion_peer_info_get_uuid_p(void)
+{
+       int ret;
+       char *uuid = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_uuid(peer, &uuid);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(uuid, NULL);
+
+       free(uuid);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_uuid_n
+ * @since_tizen                6.5
+ * @description                Gets uuid for negative case.
+ */
+int utc_cion_peer_info_get_uuid_n(void)
+{
+    int ret;
+    char *uuid;
+
+    ret = cion_peer_info_get_uuid(NULL, &uuid);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_uuid(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_display_name_p
+ * @since_tizen                6.5
+ * @description                Gets display name.
+ */
+int utc_cion_peer_info_get_display_name_p(void)
+{
+       int ret;
+       char *display_name = NULL;
+
+       if (!discovered)
+               dlog_print(DLOG_ERROR, LOG_TAG, "precondition failed. server not discovered");
+       assert_eq(discovered, true);
+
+       ret = cion_peer_info_get_display_name(peer, &display_name);
+       assert_eq(ret, CION_ERROR_NONE);
+       assert_neq(display_name, NULL);
+
+       free(display_name);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_peer_info_get_display_name_n
+ * @since_tizen                6.5
+ * @description                Gets display name for negative case.
+ */
+int utc_cion_peer_info_get_display_name_n(void)
+{
+    int ret;
+    char *display_name;
+
+    ret = cion_peer_info_get_display_name(NULL,
+                       &display_name);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    ret = cion_peer_info_get_display_name(peer, NULL);
+    assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+    return 0;
+}
diff --git a/src/utc/cion/utc-cion-security.c b/src/utc/cion/utc-cion-security.c
new file mode 100644 (file)
index 0000000..ab7e76b
--- /dev/null
@@ -0,0 +1,358 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+void utc_cion_security_startup(void)
+{
+}
+
+void utc_cion_security_cleanup(void)
+{
+}
+
+/**
+ * @testcase           utc_cion_security_create_p
+ * @since_tizen                6.5
+ * @description                Creates a cion security.
+ */
+int utc_cion_security_create_p(void)
+{
+       int ret;
+       cion_security_h security;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_create_n
+ * @since_tizen                6.5
+ * @description                Creates a cion security for negative case.
+ */
+int utc_cion_security_create_n(void)
+{
+       int ret;
+
+       ret = cion_security_create(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_destory_p
+ * @since_tizen                6.5
+ * @description                Destroys a cion security.
+ */
+int utc_cion_security_destory_p(void)
+{
+       int ret;
+       cion_security_h security;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_destroy(security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_destory_n
+ * @since_tizen                6.5
+ * @description                Destroys a cion security for negative case.
+ */
+int utc_cion_security_destory_n(void)
+{
+       int ret;
+
+       ret = cion_security_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_ca_path_p
+ * @since_tizen                6.5
+ * @description                Sets CA path.
+ */
+int utc_cion_security_set_ca_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_ca_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_ca_path_n
+ * @since_tizen                6.5
+ * @description                Sets CA path for negative case.
+ */
+int utc_cion_security_set_ca_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+
+       ret = cion_security_set_ca_path(NULL, "path");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_set_ca_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_cert_path_p
+ * @since_tizen                6.5
+ * @description                Sets certificate path.
+ */
+int utc_cion_security_set_cert_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_cert_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_cert_path_n
+ * @since_tizen                6.5
+ * @description                Sets certificate path for negative case.
+ */
+int utc_cion_security_set_cert_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+
+       ret = cion_security_set_cert_path(NULL, "path");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_set_cert_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_private_key_path_p
+ * @since_tizen                6.5
+ * @description                Sets private key path.
+ */
+int utc_cion_security_set_private_key_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_private_key_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_set_private_key_path_n
+ * @since_tizen                6.5
+ * @description                Sets private key path for negative case.
+ */
+int utc_cion_security_set_private_key_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+
+       ret = cion_security_set_private_key_path(NULL, "path");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_set_private_key_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_ca_path_p
+ * @since_tizen                6.5
+ * @description                Gets CA path.
+ */
+int utc_cion_security_get_ca_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+       char *path;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_ca_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_get_ca_path(security, &path);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       free(path);
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_ca_path_n
+ * @since_tizen                6.5
+ * @description                Gets CA path for negative case.
+ */
+int utc_cion_security_get_ca_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+       char *path;
+
+       ret = cion_security_get_ca_path(NULL, &path);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_get_ca_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_cert_path_p
+ * @since_tizen                6.5
+ * @description                Gets certificate path.
+ */
+int utc_cion_security_get_cert_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+       char *path;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_cert_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_get_cert_path(security, &path);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       free(path);
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_cert_path_n
+ * @since_tizen                6.5
+ * @description                Gets certificate path for negative case.
+ */
+int utc_cion_security_get_cert_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+       char *path;
+
+       ret = cion_security_get_cert_path(NULL, &path);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_get_cert_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_private_key_path_p
+ * @since_tizen                6.5
+ * @description                Gets private key path.
+ */
+int utc_cion_security_get_private_key_path_p(void)
+{
+       int ret;
+       cion_security_h security;
+       char *path;
+
+       ret = cion_security_create(&security);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_set_private_key_path(security, "path");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_security_get_private_key_path(security, &path);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       free(path);
+       cion_security_destroy(security);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_security_get_private_key_path_n
+ * @since_tizen                6.5
+ * @description                Gets private key path for negative case.
+ */
+int utc_cion_security_get_private_key_path_n(void)
+{
+       int ret;
+       cion_security_h security = (cion_security_h)1;
+       char *path;
+
+       ret = cion_security_get_private_key_path(NULL, &path);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_security_get_private_key_path(security, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/cion/utc-cion-server.c b/src/utc/cion/utc-cion-server.c
new file mode 100644 (file)
index 0000000..349bca5
--- /dev/null
@@ -0,0 +1,1141 @@
+//
+// Copyright (c) 2021 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include "assert.h"
+#include "assert_common.h"
+
+#include <cion.h>
+#include <dlog.h>
+#include <glib.h>
+
+#define LOG_TAG "NativeTCT"
+
+//& set: Cion
+
+static GMainLoop *main_loop;
+static guint source_id;
+static gboolean __timeout_cb(gpointer data)
+{
+       g_main_loop_quit(main_loop);
+       return FALSE;
+}
+
+static void __run_polling_loop(void) {
+       main_loop = g_main_loop_new(NULL, FALSE);
+       source_id = g_timeout_add(10000, __timeout_cb, NULL);\
+       g_main_loop_run(main_loop);\
+       g_source_remove(source_id);
+       main_loop = NULL;
+}
+
+static void __stop_polling_loop(void) {
+       sleep(1);
+       g_source_remove(source_id);
+       g_main_loop_quit(main_loop);
+}
+
+void utc_cion_server_startup(void)
+{
+}
+
+void utc_cion_server_cleanup(void)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_create_p
+ * @since_tizen                6.5
+ * @description                Creates a cion server.
+ */
+int utc_cion_server_create_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server, "utc_cion_server_create_p",
+                       "utc_cion_server_create_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_create_n
+ * @since_tizen                6.5
+ * @description                Creates a cion server for negative case.
+ */
+int utc_cion_server_create_n(void)
+{
+       int ret;
+       cion_server_h server = NULL;
+
+       ret = cion_server_create(NULL, "utc_cion_server_create_n",
+                       "utc_cion_server_create_n", NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_create(&server, NULL,
+                       "utc_cion_server_create_n", NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys a cion server.
+ */
+int utc_cion_server_destroy_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server, "utc_cion_server_destroy_p",
+                       "utc_cion_server_destroy_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_destroy(server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys a cion server for negative case.
+ */
+int utc_cion_server_destroy_n(void)
+{
+       int ret;
+
+       ret = cion_server_destroy(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_connection_request_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_listen_p
+ * @since_tizen                6.5
+ * @description                Listens connection request from client.
+ */
+int utc_cion_server_listen_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server, "utc_cion_server_listen_p",
+                       "utc_cion_server_listen_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, NULL);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_listen_n
+ * @since_tizen                6.5
+ * @description                Listens connection request from client for negative case.
+ */
+int utc_cion_server_listen_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_listen(NULL, __server_connection_request_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_listen(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_stop_p
+ * @since_tizen                6.5
+ * @description                Stops a cion server.
+ */
+int utc_cion_server_stop_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server, "utc_cion_server_stop_p",
+                       "utc_cion_server_stop_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_stop(server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_stop_n
+ * @since_tizen                6.5
+ * @description                Stops a cion server for negative case.
+ */
+int utc_cion_server_stop_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_stop(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_create(&server, "utc_cion_server_stop_n",
+                       "utc_cion_server_stop_n", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_stop(server);
+       assert_eq(ret, CION_ERROR_INVALID_OPERATION);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+struct cbdata {
+       cion_server_h server;
+       cion_peer_info_h peer;
+};
+
+static void __server_connection_result_cb(const char *service_name,
+               const cion_peer_info_h peer_info,
+               const cion_connection_result_h result, void *user_data)
+{
+       int ret;
+       cion_connection_status_e status;
+
+       ret = cion_connection_result_get_status(result, &status);
+       if (ret != CION_ERROR_NONE) {
+               dlog_print(DLOG_ERROR, LOG_TAG,
+                               "[%s] Failed to get connection result", __func__);
+               return;
+       }
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[server] %s connection result: %s", service_name,
+                       status == CION_CONNECTION_STATUS_OK ? "OK" : "FAIL");
+       __stop_polling_loop();
+}
+
+static void __server_connection_request_cb2(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       struct cbdata *data = (struct cbdata *)user_data;
+
+       ret = cion_peer_info_clone(peer_info, &(data->peer));
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+       ret = cion_server_accept(data->server, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to accept client");
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] accept client", __func__);
+}
+
+static void __client_server_discovered_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_client_h client = (cion_client_h)user_data;
+
+       if (peer_info == NULL)
+               dlog_print(DLOG_ERROR, LOG_TAG, "peer info is NULL");
+
+       ret = cion_client_connect(client, peer_info);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to connect to server");
+}
+
+/**
+ * @testcase           utc_cion_server_disconnect_p
+ * @since_tizen                6.5
+ * @description                Disconnects from a cion client.
+ */
+int utc_cion_server_disconnect_p(void)
+{
+       int ret;
+       cion_client_h client;
+       cion_server_h server;
+       struct cbdata data;
+
+       ret = cion_server_create(&server, "utc_cion_server_disconnect_p",
+                       "utc_cion_server_disconnect_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_connection_result_cb(server, __server_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client, "utc_cion_server_disconnect_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       data.server = server;
+       data.peer = NULL;
+
+       ret = cion_server_listen(server, __server_connection_request_cb2,
+                       &data);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb,
+                       client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for connecting to server",
+                       __func__);
+       __run_polling_loop();
+
+       ret = cion_server_disconnect(server, data.peer);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_peer_info_destroy(data.peer);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_disconnect_n
+ * @since_tizen                6.5
+ * @description                Disconnects from a cion client for negative case.
+ */
+int utc_cion_server_disconnect_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+       cion_peer_info_h peer = (cion_peer_info_h)1;
+
+       ret = cion_server_disconnect(NULL, peer);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_disconnect(server, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_send_payload_async_p
+ * @since_tizen                6.5
+ * @description                Sends payload asynchronously.
+ */
+int utc_cion_server_send_payload_async_p(void)
+{
+       int ret;
+       cion_server_h server;
+       cion_client_h client;
+       cion_payload_h payload;
+       struct cbdata data;
+       unsigned char payload_data[] = "utc_cion_server_send_payload_async_p";
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_send_payload_async_p",
+                       "utc_cion_server_send_payload_async_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_connection_result_cb(server, __server_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client,
+                       "utc_cion_server_send_payload_async_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       data.server = server;
+       data.peer = NULL;
+
+       ret = cion_server_listen(server, __server_connection_request_cb2, &data);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb,
+                       client);
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for connecting to server", __func__);
+       __run_polling_loop();
+
+       ret = cion_payload_create(&payload, CION_PAYLOAD_TYPE_DATA);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_payload_set_data(payload, payload_data,
+                       sizeof(payload_data));
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_send_payload_async(server, data.peer, payload, NULL,
+                       NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_payload_destroy(payload);
+       cion_peer_info_destroy(data.peer);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+static void __server_payload_async_result_cb(
+               const cion_payload_async_result_h result, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_send_payload_async_n
+ * @since_tizen                6.5
+ * @description                Sends payload asynchronously for negative case.
+ */
+int utc_cion_server_send_payload_async_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+       cion_peer_info_h peer = (cion_peer_info_h)1;
+       cion_payload_h payload = (cion_payload_h)1;
+
+       ret = cion_server_send_payload_async(NULL, peer, payload,
+                       __server_payload_async_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_send_payload_async(server, peer, NULL,
+                       __server_payload_async_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static bool __server_connected_peer_info_cb(const cion_peer_info_h peer_info,
+               void *user_data)
+{
+       return true;
+}
+
+/**
+ * @testcase           utc_cion_server_foreach_connected_peer_info_p
+ * @since_tizen                6.5
+ * @description                Gets the information of connected peers.
+ */
+int utc_cion_server_foreach_connected_peer_info_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_foreach_connected_peer_info_p",
+                       "utc_cion_server_foreach_connected_peer_info_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_foreach_connected_peer_info(server,
+                       __server_connected_peer_info_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_foreach_connected_peer_info_n
+ * @since_tizen                6.5
+ * @description                Gets the information of connected peers for negative case.
+ */
+int utc_cion_server_foreach_connected_peer_info_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_foreach_connected_peer_info(NULL,
+                       __server_connected_peer_info_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_foreach_connected_peer_info(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_add_connection_result_cb_p
+ * @since_tizen                6.5
+ * @description                Adds callback function for connection result.
+ */
+int utc_cion_server_add_connection_result_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_add_connection_result_cb_p",
+                       "utc_cion_server_add_connection_result_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_connection_result_cb(server,
+                       __server_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_add_connection_result_cb_n
+ * @since_tizen                6.5
+ * @description                Adds callback function for connection result for negative case.
+ */
+int utc_cion_server_add_connection_result_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_add_connection_result_cb(NULL,
+                       __server_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_add_connection_result_cb(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_connection_result_cb_p
+ * @since_tizen                6.5
+ * @description                Removes callback function for connection result.
+ */
+int utc_cion_server_remove_connection_result_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_remove_connection_result_cb_p",
+                       "utc_cion_server_remove_connection_result_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_connection_result_cb(server,
+                       __server_connection_result_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_remove_connection_result_cb(server,
+                       __server_connection_result_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_connection_result_cb_n
+ * @since_tizen                6.5
+ * @description                Removes callback function for connection result for negative case.
+ */
+int utc_cion_server_remove_connection_result_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_remove_connection_result_cb(NULL,
+                       __server_connection_result_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_remove_connection_result_cb(server, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_payload_received_cb(const char *service_name,
+               const cion_peer_info_h peer_info, const cion_payload_h payload,
+               cion_payload_transfer_status_e status,
+               void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_add_payload_received_cb_p
+ * @since_tizen                6.5
+ * @description                Adds callback function to receive payload.
+ */
+int utc_cion_server_add_payload_received_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_add_payload_received_cb_p",
+                       "utc_cion_server_add_payload_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_add_payload_received_cb_n
+ * @since_tizen                6.5
+ * @description                Adds callback function to receive payload for negative case.
+ */
+int utc_cion_server_add_payload_received_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_add_payload_received_cb(NULL,
+                       __server_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_add_payload_received_cb(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_payload_received_cb_p
+ * @since_tizen                6.5
+ * @description                Removes callback function to receive payload.
+ */
+int utc_cion_server_remove_payload_received_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_remove_payload_received_cb_p",
+                       "utc_cion_server_remove_payload_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_payload_received_cb(server,
+                       __server_payload_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_remove_payload_received_cb(server,
+                       __server_payload_received_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_payload_received_cb_n
+ * @since_tizen                6.5
+ * @description                Removes callback function to receive payload for negative case.
+ */
+int utc_cion_server_remove_payload_received_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_remove_payload_received_cb(NULL,
+                               __server_payload_received_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_remove_payload_received_cb(server,
+                       NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_data_received_cb(const char *service_name,
+               const cion_peer_info_h peer_info, const unsigned char *data,
+               unsigned int data_size, unsigned char **return_data,
+               unsigned int *return_data_size, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_set_data_received_cb_p
+ * @since_tizen                6.5
+ * @description                Sets callback function to receive data.
+ */
+int utc_cion_server_set_data_received_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_set_data_received_cb_p",
+                       "utc_cion_server_set_data_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_set_data_received_cb(server,
+                       __server_data_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_set_data_received_cb_n
+ * @since_tizen                6.5
+ * @description                Sets callback function to receive data for negative case.
+ */
+int utc_cion_server_set_data_received_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_set_data_received_cb(NULL, __server_data_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_set_data_received_cb(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_unset_data_received_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets callback function to receive data.
+ */
+int utc_cion_server_unset_data_received_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_unset_data_received_cb_p",
+                       "utc_cion_server_unset_data_received_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_set_data_received_cb(server,
+                       __server_data_received_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_unset_data_received_cb(server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_unset_data_received_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets callback function to receive data for negative case.
+ */
+int utc_cion_server_unset_data_received_cb_n(void)
+{
+       int ret;
+
+       ret = cion_server_unset_data_received_cb(NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __server_disconnected_cb(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_cion_server_add_disconnected_cb_p
+ * @since_tizen                6.5
+ * @description                Adds callback function to get disconnected info.
+ */
+int utc_cion_server_add_disconnected_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_add_disconnected_cb_p",
+                       "utc_cion_server_add_disconnected_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_disconnected_cb(server,
+                       __server_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_add_disconnected_cb_n
+ * @since_tizen                6.5
+ * @description                Adds callback function to get disconnected info for negative case.
+ */
+int utc_cion_server_add_disconnected_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_add_disconnected_cb(NULL,
+                       __server_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_add_disconnected_cb(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_disconnected_cb_p
+ * @since_tizen                6.5
+ * @description                Removes callback function to get disconnected info.
+ */
+int utc_cion_server_remove_disconnected_cb_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_remove_disconnected_cb_p",
+                       "utc_cion_server_remove_disconnected_cb_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_add_disconnected_cb(server,
+                       __server_disconnected_cb, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_remove_disconnected_cb(server,
+                       __server_disconnected_cb);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_remove_disconnected_cb_n
+ * @since_tizen                6.5
+ * @description                Removes callback function to get disconnected info for negative case.
+ */
+int utc_cion_server_remove_disconnected_cb_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+
+       ret = cion_server_remove_disconnected_cb(NULL,
+                       __server_disconnected_cb);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_remove_disconnected_cb(server, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __client_server_discovered_cb2(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_peer_info_h *peer = (cion_peer_info_h *)user_data;
+
+       ret = cion_peer_info_clone(peer_info, peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+
+       __stop_polling_loop();
+}
+
+static void __server_connection_request_cb3(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_peer_info_h *peer = (cion_peer_info_h *)user_data;
+
+       dlog_print(DLOG_ERROR, LOG_TAG, "Get connection request from client");
+
+       ret = cion_peer_info_clone(peer_info, peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_server_accept_p
+ * @since_tizen                6.5
+ * @description                Accepts connection.
+ */
+int utc_cion_server_accept_p(void)
+{
+       int ret;
+       cion_server_h server;
+       cion_client_h client;
+       cion_peer_info_h peer_client = NULL;
+       cion_peer_info_h peer_server = NULL;
+
+       ret = cion_server_create(&server, "utc_cion_server_accept_p",
+                       "utc_cion_server_accept_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client, "utc_cion_server_accept_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb3,
+                       &peer_client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb2,
+                       &peer_server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+
+       assert_neq(peer_server, NULL);
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Server found, try connect",
+                       __func__);
+
+       ret = cion_client_connect(client, peer_server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for server get connection request", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_accept(server, peer_client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_peer_info_destroy(peer_server);
+       cion_peer_info_destroy(peer_client);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_accept_n
+ * @since_tizen                6.5
+ * @description                Accepts connection for negative case.
+ */
+int utc_cion_server_accept_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+       cion_peer_info_h peer = (cion_peer_info_h)1;
+
+       ret = cion_server_accept(NULL, peer);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_accept(server, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+static void __client_server_discovered_cb3(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_peer_info_h *peer = (cion_peer_info_h *)user_data;
+
+       ret = cion_peer_info_clone(peer_info, peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+
+       __stop_polling_loop();
+}
+
+static void __server_connection_request_cb4(const char *service_name,
+               const cion_peer_info_h peer_info, void *user_data)
+{
+       int ret;
+       cion_peer_info_h *peer = (cion_peer_info_h *)user_data;
+
+       dlog_print(DLOG_ERROR, LOG_TAG, "Get connection request from client");
+
+       ret = cion_peer_info_clone(peer_info, peer);
+       if (ret != CION_ERROR_NONE)
+               dlog_print(DLOG_ERROR, LOG_TAG, "Failed to clone peer info");
+
+       __stop_polling_loop();
+}
+
+/**
+ * @testcase           utc_cion_server_reject_p
+ * @since_tizen                6.5
+ * @description                Rejects connection.
+ */
+int utc_cion_server_reject_p(void)
+{
+       int ret;
+       cion_server_h server;
+       cion_client_h client;
+       cion_peer_info_h peer_client = NULL;
+       cion_peer_info_h peer_server = NULL;
+
+       ret = cion_server_create(&server, "utc_cion_server_reject_p",
+                       "utc_cion_server_reject_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_create(&client, "utc_cion_server_reject_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_listen(server, __server_connection_request_cb4,
+                       &peer_client);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_client_try_discovery(client, __client_server_discovered_cb3,
+                       &peer_server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Wait for discovering server", __func__);
+       __run_polling_loop();
+
+       assert_neq(peer_server, NULL);
+       dlog_print(DLOG_INFO, LOG_TAG, "[%s] Server found, try connect",
+                       __func__);
+
+       ret = cion_client_connect(client, peer_server);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       dlog_print(DLOG_INFO, LOG_TAG,
+                       "[%s] Wait for server get connection request", __func__);
+       __run_polling_loop();
+
+       ret = cion_server_reject(server, peer_client, NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_peer_info_destroy(peer_server);
+       cion_peer_info_destroy(peer_client);
+       cion_client_destroy(client);
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_reject_n
+ * @since_tizen                6.5
+ * @description                Rejects connection for negative case.
+ */
+int utc_cion_server_reject_n(void)
+{
+       int ret;
+       cion_server_h server = (cion_server_h)1;
+       cion_peer_info_h peer = (cion_peer_info_h)1;
+
+       ret = cion_server_reject(NULL, peer, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       ret = cion_server_reject(server, NULL, NULL);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_set_display_name_p
+ * @since_tizen                6.5
+ * @description                Sets display name.
+ */
+int utc_cion_server_set_display_name_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_set_display_name_p",
+                       "utc_cion_server_set_display_name_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_set_display_name(server, "display_name");
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_set_display_name_n
+ * @since_tizen                6.5
+ * @description                Sets display name for negative case.
+ */
+int utc_cion_server_set_display_name_n(void)
+{
+       int ret;
+
+       ret = cion_server_set_display_name(NULL,
+                       "utc_cion_server_set_display_name_n");
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_set_on_demand_launch_enabled_p
+ * @since_tizen                6.5
+ * @description                Sets on-demand launch enabled state.
+ */
+int utc_cion_server_set_on_demand_launch_enabled_p(void)
+{
+       int ret;
+       cion_server_h server;
+
+       ret = cion_server_create(&server,
+                       "utc_cion_server_set_on_demand_launch_enabled_p",
+                       "utc_cion_server_set_on_demand_launch_enabled_p", NULL);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       ret = cion_server_set_on_demand_launch_enabled(server, false);
+       assert_eq(ret, CION_ERROR_NONE);
+
+       cion_server_destroy(server);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_cion_server_set_on_demand_launch_enabled_n
+ * @since_tizen                6.5
+ * @description                Sets on-demand launch enabled state for negative case.
+ */
+int utc_cion_server_set_on_demand_launch_enabled_n(void)
+{
+       int ret;
+
+       ret = cion_server_set_on_demand_launch_enabled(NULL, true);
+       assert_eq(ret, CION_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}