[UTC][capi-media-webrtc][ACR-1637] Add new API set for native WebRTC 94/262094/10
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 2 Aug 2021 08:46:11 +0000 (17:46 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 17 Sep 2021 04:00:11 +0000 (04:00 +0000)
Change-Id: I94a215c8a53ef73c6e5de0a1a6733d678b2ea21f
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
13 files changed:
packaging/TCT.spec
packaging/utc/core-webrtc-tests.spec [new file with mode: 0644]
packaging/utc/core-webrtc-tests.xml [new file with mode: 0644]
src/CMakeLists.txt
src/utc/webrtc/CMakeLists.txt [new file with mode: 0644]
src/utc/webrtc/public.list [new file with mode: 0644]
src/utc/webrtc/tct-webrtc-core.c [new file with mode: 0644]
src/utc/webrtc/tct-webrtc-core_mobile.h [new file with mode: 0644]
src/utc/webrtc/tct-webrtc-core_tizeniot.h [new file with mode: 0644]
src/utc/webrtc/tct-webrtc-core_tv.h [new file with mode: 0644]
src/utc/webrtc/tct-webrtc-core_wearable.h [new file with mode: 0644]
src/utc/webrtc/utc-media-webrtc-callback.c [new file with mode: 0644]
src/utc/webrtc/utc-media-webrtc.c [new file with mode: 0644]

index 8592ea7a8c5cc3d99960e05c26086d349f214b95..bd5900af5a9d0f8243cfb54af603318f194a1182 100755 (executable)
@@ -137,6 +137,7 @@ BuildRequires:  pkgconfig(capi-ui-autofill)
 BuildRequires: pkgconfig(capi-system-battery-monitor)
 BuildRequires:  pkgconfig(capi-ui-sticker-consumer)
 BuildRequires:  pkgconfig(capi-ui-sticker-provider)
+BuildRequires:  pkgconfig(capi-media-webrtc)
 Requires(post):  /sbin/ldconfig
 Requires(postun):  /sbin/ldconfig
 
@@ -1026,6 +1027,13 @@ Group:      Development/Tools
 %description -n core-capi-ui-sticker-tests
 Native API Unit TC for sticker
 
+%package -n core-webrtc-tests
+Summary:    Native API Unit TC for webrtc
+Group:      Development/Tools
+
+%description -n core-webrtc-tests
+Native API Unit TC for webrtc
+
 %package -n native-audio-io-ctc
 Summary:    Native API Compatibility TC for audio-io
 
@@ -2810,6 +2818,11 @@ pkgcmd -un org.tizen.testapp &
 /opt/share/packages/core-capi-ui-sticker-tests.xml
 /opt/usr/share/license/core-capi-ui-sticker-tests
 
+%files -n core-webrtc-tests
+/opt/usr/apps/core-webrtc-tests/*
+/opt/share/packages/core-webrtc-tests.xml
+/opt/usr/share/license/core-webrtc-tests
+
 # End Adding for UTC******************************************************************************************************************************
 
 %files -n native-audio-io-ctc
diff --git a/packaging/utc/core-webrtc-tests.spec b/packaging/utc/core-webrtc-tests.spec
new file mode 100644 (file)
index 0000000..26ea550
--- /dev/null
@@ -0,0 +1,75 @@
+%define MODULE_NAME webrtc
+%define MODULE_LIBNAME capi-media-webrtc
+Name:       core-%{MODULE_NAME}-tests
+Summary:    Core API unit TC (%{name})
+Version:    0.1
+Release:    0
+Group:      Development/Tools
+License:    Apache License, Version 2.0
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires: pkgconfig(%{MODULE_LIBNAME})
+BuildRequires: cmake
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(elementary)
+
+%description
+Core API unit TC (%{name})
+
+%prep
+%setup -q
+
+%build
+
+%define PREFIX "%{_libdir}/%{name}"
+
+export LDFLAGS+="-Wl,--rpath=%{PREFIX} -Wl,--as-needed"
+
+%if %{?ASAN_BUILD:1}0
+       %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TV:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TIZENIOT:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tizeniot" -DASANBUILD="true" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+%else
+       %if %{?DEVICE_BUILD_TYPE_MOBILE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="mobile" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_WEARABLE:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="wearable" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TV:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tv" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+       %if %{?DEVICE_BUILD_TYPE_TIZENIOT:1}0
+       cmake . -DMODULE="%{MODULE_NAME}" -DBUILDTCTYPE="utc" -DDEVICE_BUILD_TYPE="tizeniot" -DASANBUILD="false" -DCMAKE_INSTALL_PREFIX=%{_prefix}
+       %endif
+%endif
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE %{buildroot}/usr/share/license/%{name}
+mkdir -p %{buildroot}/usr/share/packages/
+cp packaging/utc/%{name}.xml %{buildroot}/usr/share/packages/
+%post
+
+%postun
+
+
+%files
+/usr/apps/%{name}/*
+/usr/share/packages/%{name}.xml
+/usr/share/license/%{name}
+
diff --git a/packaging/utc/core-webrtc-tests.xml b/packaging/utc/core-webrtc-tests.xml
new file mode 100644 (file)
index 0000000..ccf92a0
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="core-webrtc-tests" version="0.1.0" api-version="6.0">
+  <label>CoreWebRTCTest</label>
+  <author email="test@tizen.org" href="www.tizen.org">test</author>
+  <description>Core API test Application</description>
+  <ui-application appid="core.webrtc-tests" exec="/usr/apps/core-webrtc-tests/bin/tct-webrtc-core" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+    <background-category value="background-network"/>
+    <background-category value="iot-communication"/>
+    <background-category value="media"/>
+  </ui-application>
+  <privileges>
+    <privilege>http://tizen.org/privilege/externalstorage</privilege>
+    <privilege>http://tizen.org/privilege/mediastorage</privilege>
+    <privilege>http://tizen.org/privilege/internet</privilege>
+    <privilege>http://tizen.org/privilege/camera</privilege>
+    <privilege>http://tizen.org/privilege/recorder</privilege>
+  </privileges>
+</manifest>
index c4a73c4102655d71a3c24f44495e1c6c73f9429d..bb8438b1b21142f7e71e990efeab5980195c1064 100755 (executable)
@@ -195,6 +195,8 @@ ELSE( DEFINED MODULE )
        ADD_SUBDIRECTORY(utc/multi-assistant)
        MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/utc/capi-ui-sticker")
        ADD_SUBDIRECTORY(utc/capi-ui-sticker)
+       MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/utc/webrtc")
+       ADD_SUBDIRECTORY(utc/webrtc)
        MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/itc/accounts-svc")
        ADD_SUBDIRECTORY(itc/accounts-svc)
        MESSAGE(STATUS "Building: ${CMAKE_CURRENT_SOURCE_DIR}/itc/appcore-agent")
diff --git a/src/utc/webrtc/CMakeLists.txt b/src/utc/webrtc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..97687ba
--- /dev/null
@@ -0,0 +1,39 @@
+SET(PKG_NAME "webrtc")
+
+SET(EXEC_NAME "tct-${PKG_NAME}-core")
+SET(RPM_NAME "core-${PKG_NAME}-tests")
+
+SET(CAPI_LIB "capi-media-webrtc")
+SET(TC_SOURCES
+    utc-media-webrtc.c
+    utc-media-webrtc-callback.c
+)
+
+PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED
+    ${CAPI_LIB}
+    capi-appfw-application
+    glib-2.0
+    dlog
+)
+
+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}
+)
+
+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/webrtc/public.list b/src/utc/webrtc/public.list
new file mode 100644 (file)
index 0000000..90736dd
--- /dev/null
@@ -0,0 +1,27 @@
+webrtc_create
+webrtc_destroy
+webrtc_start
+webrtc_stop
+webrtc_get_state
+webrtc_add_media_source
+webrtc_remove_media_source
+webrtc_get_peer_connection_state
+webrtc_get_signaling_state
+webrtc_get_ice_gathering_state
+webrtc_get_ice_connection_state
+webrtc_set_state_changed_cb
+webrtc_unset_state_changed_cb
+webrtc_set_error_cb
+webrtc_unset_error_cb
+webrtc_set_ice_candidate_cb
+webrtc_unset_ice_candidate_cb
+webrtc_set_negotiation_needed_cb
+webrtc_unset_negotiation_needed_cb
+webrtc_set_peer_connection_state_change_cb
+webrtc_unset_peer_connection_state_change_cb
+webrtc_set_signaling_state_change_cb
+webrtc_unset_signaling_state_change_cb
+webrtc_set_ice_gathering_state_change_cb
+webrtc_unset_ice_gathering_state_change_cb
+webrtc_set_ice_connection_state_change_cb
+webrtc_unset_ice_connection_state_change_cb
\ No newline at end of file
diff --git a/src/utc/webrtc/tct-webrtc-core.c b/src/utc/webrtc/tct-webrtc-core.c
new file mode 100644 (file)
index 0000000..1558d41
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 <stdio.h>
+#include <string.h>
+#include "tct_common.h"
+
+#ifdef MOBILE
+#include "tct-webrtc-core_mobile.h"
+#endif
+
+#ifdef WEARABLE
+#include "tct-webrtc-core_wearable.h"
+#endif
+
+#ifdef TV
+#include "tct-webrtc-core_tv.h"
+#endif
+
+#ifdef TIZENIOT
+#include "tct-webrtc-core_tizeniot.h"
+#endif
+
+#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>
+
+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)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] app_control_get_extra_data returns error = %d", __FUNCTION__, __LINE__, nRet);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to fetch test case name: app_control_get_extra_data API call fails\\n", __FILE__, __LINE__);
+               PRINT_TC_RESULT("%d",1);
+               FREE_MEMORY_TC(pszGetTCName);
+               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();
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Startup begin", pszGetTCName);
+                       if ( tc_array[i].startup )
+                       {
+                               tc_array[i].startup();
+                       }
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Startup end", pszGetTCName);
+
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body begin", pszGetTCName);
+                       result = tc_array[i].function();
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result);
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body end", pszGetTCName);
+
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Cleanup begin", pszGetTCName);
+                       if ( tc_array[i].cleanup )
+                       {
+                               tc_array[i].cleanup();
+                       }
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Cleanup end", pszGetTCName);
+
+                       CLOSE_UTC_ERRLOG();
+                       PRINT_TC_RESULT("%d",result);
+
+                       if(0 == strncmp(pszGetTCName, "utc_media_sound_manager_get_voip_session_mode_n2", strlen(pszGetTCName)))
+                       {
+                               /* Session TCs and Stream TCs should be seperated each other process */
+                               ui_app_exit();
+                       }
+                       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;
+
+       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, NULL);
+       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/webrtc/tct-webrtc-core_mobile.h b/src/utc/webrtc/tct-webrtc-core_mobile.h
new file mode 100644 (file)
index 0000000..7353e7a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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_WEBRTC-NATIVE_H__
+#define __TCT_WEBRTC-NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+
+extern int utc_media_webrtc_create_p(void);
+extern int utc_media_webrtc_create_n(void);
+extern int utc_media_webrtc_destroy_p(void);
+extern int utc_media_webrtc_destroy_n(void);
+extern int utc_media_webrtc_start_p(void);
+extern int utc_media_webrtc_start_n1(void);
+extern int utc_media_webrtc_start_n2(void);
+extern int utc_media_webrtc_stop_p(void);
+extern int utc_media_webrtc_stop_n1(void);
+extern int utc_media_webrtc_stop_n2(void);
+extern int utc_media_webrtc_get_state_p(void);
+extern int utc_media_webrtc_get_state_n1(void);
+extern int utc_media_webrtc_get_state_n2(void);
+extern int utc_media_webrtc_add_media_source_p(void);
+extern int utc_media_webrtc_add_media_source_n1(void);
+extern int utc_media_webrtc_add_media_source_n2(void);
+extern int utc_media_webrtc_remove_media_source_p(void);
+extern int utc_media_webrtc_remove_media_source_n1(void);
+extern int utc_media_webrtc_remove_media_source_n2(void);
+extern int utc_media_webrtc_get_peer_connection_state_p(void);
+extern int utc_media_webrtc_get_peer_connection_state_n(void);
+extern int utc_media_webrtc_get_signaling_state_p(void);
+extern int utc_media_webrtc_get_signaling_state_n(void);
+extern int utc_media_webrtc_get_ice_gathering_state_p(void);
+extern int utc_media_webrtc_get_ice_gathering_state_n(void);
+extern int utc_media_webrtc_get_ice_connection_state_p(void);
+extern int utc_media_webrtc_get_ice_connection_state_n(void);
+extern int utc_media_webrtc_set_state_changed_cb_p(void);
+extern int utc_media_webrtc_set_state_changed_cb_n(void);
+extern int utc_media_webrtc_unset_state_changed_cb_p(void);
+extern int utc_media_webrtc_unset_state_changed_cb_n(void);
+extern int utc_media_webrtc_set_error_cb_p(void);
+extern int utc_media_webrtc_set_error_cb_n(void);
+extern int utc_media_webrtc_unset_error_cb_p(void);
+extern int utc_media_webrtc_unset_error_cb_n(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_n(void);
+
+testcase tc_array[] = {
+       {"utc_media_webrtc_create_p",utc_media_webrtc_create_p,NULL,NULL},
+       {"utc_media_webrtc_create_n",utc_media_webrtc_create_n,NULL,NULL},
+       {"utc_media_webrtc_destroy_p",utc_media_webrtc_destroy_p,NULL,NULL},
+       {"utc_media_webrtc_destroy_n",utc_media_webrtc_destroy_n,NULL,NULL},
+       {"utc_media_webrtc_start_p",utc_media_webrtc_start_p,NULL,NULL},
+       {"utc_media_webrtc_start_n1",utc_media_webrtc_start_n1,NULL,NULL},
+       {"utc_media_webrtc_start_n2",utc_media_webrtc_start_n2,NULL,NULL},
+       {"utc_media_webrtc_stop_p",utc_media_webrtc_stop_p,NULL,NULL},
+       {"utc_media_webrtc_stop_n1",utc_media_webrtc_stop_n1,NULL,NULL},
+       {"utc_media_webrtc_stop_n2",utc_media_webrtc_stop_n2,NULL,NULL},
+       {"utc_media_webrtc_get_state_p",utc_media_webrtc_get_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_state_n1",utc_media_webrtc_get_state_n1,NULL,NULL},
+       {"utc_media_webrtc_get_state_n2",utc_media_webrtc_get_state_n2,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_p",utc_media_webrtc_add_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n1",utc_media_webrtc_add_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n2",utc_media_webrtc_add_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_p",utc_media_webrtc_remove_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n1",utc_media_webrtc_remove_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n2",utc_media_webrtc_remove_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_p",utc_media_webrtc_get_peer_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_n",utc_media_webrtc_get_peer_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_p",utc_media_webrtc_get_signaling_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_n",utc_media_webrtc_get_signaling_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_p",utc_media_webrtc_get_ice_gathering_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_n",utc_media_webrtc_get_ice_gathering_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_p",utc_media_webrtc_get_ice_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_n",utc_media_webrtc_get_ice_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_p",utc_media_webrtc_set_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_n",utc_media_webrtc_set_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_p",utc_media_webrtc_unset_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_n",utc_media_webrtc_unset_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_p",utc_media_webrtc_set_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_n",utc_media_webrtc_set_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_p",utc_media_webrtc_unset_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_n",utc_media_webrtc_unset_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_p",utc_media_webrtc_set_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_n",utc_media_webrtc_set_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_p",utc_media_webrtc_unset_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_n",utc_media_webrtc_unset_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_p",utc_media_webrtc_set_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_n",utc_media_webrtc_set_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_p",utc_media_webrtc_unset_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_n",utc_media_webrtc_unset_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_p",utc_media_webrtc_set_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_n",utc_media_webrtc_set_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_p",utc_media_webrtc_unset_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_n",utc_media_webrtc_unset_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_p",utc_media_webrtc_set_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_n",utc_media_webrtc_set_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_p",utc_media_webrtc_unset_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_n",utc_media_webrtc_unset_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_p",utc_media_webrtc_set_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_n",utc_media_webrtc_set_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_p",utc_media_webrtc_unset_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_n",utc_media_webrtc_unset_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_p",utc_media_webrtc_set_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_n",utc_media_webrtc_set_ice_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_p",utc_media_webrtc_unset_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_n",utc_media_webrtc_unset_ice_connection_state_change_cb_n,NULL,NULL},
+       {NULL, NULL}
+};
+
+#endif // __TCT_WEBRTC-NATIVE_H__
diff --git a/src/utc/webrtc/tct-webrtc-core_tizeniot.h b/src/utc/webrtc/tct-webrtc-core_tizeniot.h
new file mode 100644 (file)
index 0000000..7353e7a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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_WEBRTC-NATIVE_H__
+#define __TCT_WEBRTC-NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+
+extern int utc_media_webrtc_create_p(void);
+extern int utc_media_webrtc_create_n(void);
+extern int utc_media_webrtc_destroy_p(void);
+extern int utc_media_webrtc_destroy_n(void);
+extern int utc_media_webrtc_start_p(void);
+extern int utc_media_webrtc_start_n1(void);
+extern int utc_media_webrtc_start_n2(void);
+extern int utc_media_webrtc_stop_p(void);
+extern int utc_media_webrtc_stop_n1(void);
+extern int utc_media_webrtc_stop_n2(void);
+extern int utc_media_webrtc_get_state_p(void);
+extern int utc_media_webrtc_get_state_n1(void);
+extern int utc_media_webrtc_get_state_n2(void);
+extern int utc_media_webrtc_add_media_source_p(void);
+extern int utc_media_webrtc_add_media_source_n1(void);
+extern int utc_media_webrtc_add_media_source_n2(void);
+extern int utc_media_webrtc_remove_media_source_p(void);
+extern int utc_media_webrtc_remove_media_source_n1(void);
+extern int utc_media_webrtc_remove_media_source_n2(void);
+extern int utc_media_webrtc_get_peer_connection_state_p(void);
+extern int utc_media_webrtc_get_peer_connection_state_n(void);
+extern int utc_media_webrtc_get_signaling_state_p(void);
+extern int utc_media_webrtc_get_signaling_state_n(void);
+extern int utc_media_webrtc_get_ice_gathering_state_p(void);
+extern int utc_media_webrtc_get_ice_gathering_state_n(void);
+extern int utc_media_webrtc_get_ice_connection_state_p(void);
+extern int utc_media_webrtc_get_ice_connection_state_n(void);
+extern int utc_media_webrtc_set_state_changed_cb_p(void);
+extern int utc_media_webrtc_set_state_changed_cb_n(void);
+extern int utc_media_webrtc_unset_state_changed_cb_p(void);
+extern int utc_media_webrtc_unset_state_changed_cb_n(void);
+extern int utc_media_webrtc_set_error_cb_p(void);
+extern int utc_media_webrtc_set_error_cb_n(void);
+extern int utc_media_webrtc_unset_error_cb_p(void);
+extern int utc_media_webrtc_unset_error_cb_n(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_n(void);
+
+testcase tc_array[] = {
+       {"utc_media_webrtc_create_p",utc_media_webrtc_create_p,NULL,NULL},
+       {"utc_media_webrtc_create_n",utc_media_webrtc_create_n,NULL,NULL},
+       {"utc_media_webrtc_destroy_p",utc_media_webrtc_destroy_p,NULL,NULL},
+       {"utc_media_webrtc_destroy_n",utc_media_webrtc_destroy_n,NULL,NULL},
+       {"utc_media_webrtc_start_p",utc_media_webrtc_start_p,NULL,NULL},
+       {"utc_media_webrtc_start_n1",utc_media_webrtc_start_n1,NULL,NULL},
+       {"utc_media_webrtc_start_n2",utc_media_webrtc_start_n2,NULL,NULL},
+       {"utc_media_webrtc_stop_p",utc_media_webrtc_stop_p,NULL,NULL},
+       {"utc_media_webrtc_stop_n1",utc_media_webrtc_stop_n1,NULL,NULL},
+       {"utc_media_webrtc_stop_n2",utc_media_webrtc_stop_n2,NULL,NULL},
+       {"utc_media_webrtc_get_state_p",utc_media_webrtc_get_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_state_n1",utc_media_webrtc_get_state_n1,NULL,NULL},
+       {"utc_media_webrtc_get_state_n2",utc_media_webrtc_get_state_n2,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_p",utc_media_webrtc_add_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n1",utc_media_webrtc_add_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n2",utc_media_webrtc_add_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_p",utc_media_webrtc_remove_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n1",utc_media_webrtc_remove_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n2",utc_media_webrtc_remove_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_p",utc_media_webrtc_get_peer_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_n",utc_media_webrtc_get_peer_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_p",utc_media_webrtc_get_signaling_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_n",utc_media_webrtc_get_signaling_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_p",utc_media_webrtc_get_ice_gathering_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_n",utc_media_webrtc_get_ice_gathering_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_p",utc_media_webrtc_get_ice_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_n",utc_media_webrtc_get_ice_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_p",utc_media_webrtc_set_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_n",utc_media_webrtc_set_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_p",utc_media_webrtc_unset_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_n",utc_media_webrtc_unset_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_p",utc_media_webrtc_set_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_n",utc_media_webrtc_set_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_p",utc_media_webrtc_unset_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_n",utc_media_webrtc_unset_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_p",utc_media_webrtc_set_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_n",utc_media_webrtc_set_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_p",utc_media_webrtc_unset_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_n",utc_media_webrtc_unset_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_p",utc_media_webrtc_set_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_n",utc_media_webrtc_set_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_p",utc_media_webrtc_unset_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_n",utc_media_webrtc_unset_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_p",utc_media_webrtc_set_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_n",utc_media_webrtc_set_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_p",utc_media_webrtc_unset_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_n",utc_media_webrtc_unset_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_p",utc_media_webrtc_set_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_n",utc_media_webrtc_set_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_p",utc_media_webrtc_unset_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_n",utc_media_webrtc_unset_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_p",utc_media_webrtc_set_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_n",utc_media_webrtc_set_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_p",utc_media_webrtc_unset_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_n",utc_media_webrtc_unset_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_p",utc_media_webrtc_set_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_n",utc_media_webrtc_set_ice_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_p",utc_media_webrtc_unset_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_n",utc_media_webrtc_unset_ice_connection_state_change_cb_n,NULL,NULL},
+       {NULL, NULL}
+};
+
+#endif // __TCT_WEBRTC-NATIVE_H__
diff --git a/src/utc/webrtc/tct-webrtc-core_tv.h b/src/utc/webrtc/tct-webrtc-core_tv.h
new file mode 100644 (file)
index 0000000..7353e7a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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_WEBRTC-NATIVE_H__
+#define __TCT_WEBRTC-NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+
+extern int utc_media_webrtc_create_p(void);
+extern int utc_media_webrtc_create_n(void);
+extern int utc_media_webrtc_destroy_p(void);
+extern int utc_media_webrtc_destroy_n(void);
+extern int utc_media_webrtc_start_p(void);
+extern int utc_media_webrtc_start_n1(void);
+extern int utc_media_webrtc_start_n2(void);
+extern int utc_media_webrtc_stop_p(void);
+extern int utc_media_webrtc_stop_n1(void);
+extern int utc_media_webrtc_stop_n2(void);
+extern int utc_media_webrtc_get_state_p(void);
+extern int utc_media_webrtc_get_state_n1(void);
+extern int utc_media_webrtc_get_state_n2(void);
+extern int utc_media_webrtc_add_media_source_p(void);
+extern int utc_media_webrtc_add_media_source_n1(void);
+extern int utc_media_webrtc_add_media_source_n2(void);
+extern int utc_media_webrtc_remove_media_source_p(void);
+extern int utc_media_webrtc_remove_media_source_n1(void);
+extern int utc_media_webrtc_remove_media_source_n2(void);
+extern int utc_media_webrtc_get_peer_connection_state_p(void);
+extern int utc_media_webrtc_get_peer_connection_state_n(void);
+extern int utc_media_webrtc_get_signaling_state_p(void);
+extern int utc_media_webrtc_get_signaling_state_n(void);
+extern int utc_media_webrtc_get_ice_gathering_state_p(void);
+extern int utc_media_webrtc_get_ice_gathering_state_n(void);
+extern int utc_media_webrtc_get_ice_connection_state_p(void);
+extern int utc_media_webrtc_get_ice_connection_state_n(void);
+extern int utc_media_webrtc_set_state_changed_cb_p(void);
+extern int utc_media_webrtc_set_state_changed_cb_n(void);
+extern int utc_media_webrtc_unset_state_changed_cb_p(void);
+extern int utc_media_webrtc_unset_state_changed_cb_n(void);
+extern int utc_media_webrtc_set_error_cb_p(void);
+extern int utc_media_webrtc_set_error_cb_n(void);
+extern int utc_media_webrtc_unset_error_cb_p(void);
+extern int utc_media_webrtc_unset_error_cb_n(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_n(void);
+
+testcase tc_array[] = {
+       {"utc_media_webrtc_create_p",utc_media_webrtc_create_p,NULL,NULL},
+       {"utc_media_webrtc_create_n",utc_media_webrtc_create_n,NULL,NULL},
+       {"utc_media_webrtc_destroy_p",utc_media_webrtc_destroy_p,NULL,NULL},
+       {"utc_media_webrtc_destroy_n",utc_media_webrtc_destroy_n,NULL,NULL},
+       {"utc_media_webrtc_start_p",utc_media_webrtc_start_p,NULL,NULL},
+       {"utc_media_webrtc_start_n1",utc_media_webrtc_start_n1,NULL,NULL},
+       {"utc_media_webrtc_start_n2",utc_media_webrtc_start_n2,NULL,NULL},
+       {"utc_media_webrtc_stop_p",utc_media_webrtc_stop_p,NULL,NULL},
+       {"utc_media_webrtc_stop_n1",utc_media_webrtc_stop_n1,NULL,NULL},
+       {"utc_media_webrtc_stop_n2",utc_media_webrtc_stop_n2,NULL,NULL},
+       {"utc_media_webrtc_get_state_p",utc_media_webrtc_get_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_state_n1",utc_media_webrtc_get_state_n1,NULL,NULL},
+       {"utc_media_webrtc_get_state_n2",utc_media_webrtc_get_state_n2,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_p",utc_media_webrtc_add_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n1",utc_media_webrtc_add_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n2",utc_media_webrtc_add_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_p",utc_media_webrtc_remove_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n1",utc_media_webrtc_remove_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n2",utc_media_webrtc_remove_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_p",utc_media_webrtc_get_peer_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_n",utc_media_webrtc_get_peer_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_p",utc_media_webrtc_get_signaling_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_n",utc_media_webrtc_get_signaling_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_p",utc_media_webrtc_get_ice_gathering_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_n",utc_media_webrtc_get_ice_gathering_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_p",utc_media_webrtc_get_ice_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_n",utc_media_webrtc_get_ice_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_p",utc_media_webrtc_set_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_n",utc_media_webrtc_set_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_p",utc_media_webrtc_unset_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_n",utc_media_webrtc_unset_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_p",utc_media_webrtc_set_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_n",utc_media_webrtc_set_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_p",utc_media_webrtc_unset_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_n",utc_media_webrtc_unset_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_p",utc_media_webrtc_set_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_n",utc_media_webrtc_set_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_p",utc_media_webrtc_unset_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_n",utc_media_webrtc_unset_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_p",utc_media_webrtc_set_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_n",utc_media_webrtc_set_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_p",utc_media_webrtc_unset_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_n",utc_media_webrtc_unset_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_p",utc_media_webrtc_set_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_n",utc_media_webrtc_set_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_p",utc_media_webrtc_unset_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_n",utc_media_webrtc_unset_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_p",utc_media_webrtc_set_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_n",utc_media_webrtc_set_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_p",utc_media_webrtc_unset_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_n",utc_media_webrtc_unset_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_p",utc_media_webrtc_set_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_n",utc_media_webrtc_set_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_p",utc_media_webrtc_unset_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_n",utc_media_webrtc_unset_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_p",utc_media_webrtc_set_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_n",utc_media_webrtc_set_ice_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_p",utc_media_webrtc_unset_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_n",utc_media_webrtc_unset_ice_connection_state_change_cb_n,NULL,NULL},
+       {NULL, NULL}
+};
+
+#endif // __TCT_WEBRTC-NATIVE_H__
diff --git a/src/utc/webrtc/tct-webrtc-core_wearable.h b/src/utc/webrtc/tct-webrtc-core_wearable.h
new file mode 100644 (file)
index 0000000..7353e7a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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_WEBRTC-NATIVE_H__
+#define __TCT_WEBRTC-NATIVE_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+
+extern int utc_media_webrtc_create_p(void);
+extern int utc_media_webrtc_create_n(void);
+extern int utc_media_webrtc_destroy_p(void);
+extern int utc_media_webrtc_destroy_n(void);
+extern int utc_media_webrtc_start_p(void);
+extern int utc_media_webrtc_start_n1(void);
+extern int utc_media_webrtc_start_n2(void);
+extern int utc_media_webrtc_stop_p(void);
+extern int utc_media_webrtc_stop_n1(void);
+extern int utc_media_webrtc_stop_n2(void);
+extern int utc_media_webrtc_get_state_p(void);
+extern int utc_media_webrtc_get_state_n1(void);
+extern int utc_media_webrtc_get_state_n2(void);
+extern int utc_media_webrtc_add_media_source_p(void);
+extern int utc_media_webrtc_add_media_source_n1(void);
+extern int utc_media_webrtc_add_media_source_n2(void);
+extern int utc_media_webrtc_remove_media_source_p(void);
+extern int utc_media_webrtc_remove_media_source_n1(void);
+extern int utc_media_webrtc_remove_media_source_n2(void);
+extern int utc_media_webrtc_get_peer_connection_state_p(void);
+extern int utc_media_webrtc_get_peer_connection_state_n(void);
+extern int utc_media_webrtc_get_signaling_state_p(void);
+extern int utc_media_webrtc_get_signaling_state_n(void);
+extern int utc_media_webrtc_get_ice_gathering_state_p(void);
+extern int utc_media_webrtc_get_ice_gathering_state_n(void);
+extern int utc_media_webrtc_get_ice_connection_state_p(void);
+extern int utc_media_webrtc_get_ice_connection_state_n(void);
+extern int utc_media_webrtc_set_state_changed_cb_p(void);
+extern int utc_media_webrtc_set_state_changed_cb_n(void);
+extern int utc_media_webrtc_unset_state_changed_cb_p(void);
+extern int utc_media_webrtc_unset_state_changed_cb_n(void);
+extern int utc_media_webrtc_set_error_cb_p(void);
+extern int utc_media_webrtc_set_error_cb_n(void);
+extern int utc_media_webrtc_unset_error_cb_p(void);
+extern int utc_media_webrtc_unset_error_cb_n(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_set_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_p(void);
+extern int utc_media_webrtc_unset_ice_candidate_cb_n(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_set_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_p(void);
+extern int utc_media_webrtc_unset_negotiation_needed_cb_n(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_peer_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_set_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_signaling_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_gathering_state_change_cb_n(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_set_ice_connection_state_change_cb_n(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_p(void);
+extern int utc_media_webrtc_unset_ice_connection_state_change_cb_n(void);
+
+testcase tc_array[] = {
+       {"utc_media_webrtc_create_p",utc_media_webrtc_create_p,NULL,NULL},
+       {"utc_media_webrtc_create_n",utc_media_webrtc_create_n,NULL,NULL},
+       {"utc_media_webrtc_destroy_p",utc_media_webrtc_destroy_p,NULL,NULL},
+       {"utc_media_webrtc_destroy_n",utc_media_webrtc_destroy_n,NULL,NULL},
+       {"utc_media_webrtc_start_p",utc_media_webrtc_start_p,NULL,NULL},
+       {"utc_media_webrtc_start_n1",utc_media_webrtc_start_n1,NULL,NULL},
+       {"utc_media_webrtc_start_n2",utc_media_webrtc_start_n2,NULL,NULL},
+       {"utc_media_webrtc_stop_p",utc_media_webrtc_stop_p,NULL,NULL},
+       {"utc_media_webrtc_stop_n1",utc_media_webrtc_stop_n1,NULL,NULL},
+       {"utc_media_webrtc_stop_n2",utc_media_webrtc_stop_n2,NULL,NULL},
+       {"utc_media_webrtc_get_state_p",utc_media_webrtc_get_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_state_n1",utc_media_webrtc_get_state_n1,NULL,NULL},
+       {"utc_media_webrtc_get_state_n2",utc_media_webrtc_get_state_n2,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_p",utc_media_webrtc_add_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n1",utc_media_webrtc_add_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_add_media_source_n2",utc_media_webrtc_add_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_p",utc_media_webrtc_remove_media_source_p,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n1",utc_media_webrtc_remove_media_source_n1,NULL,NULL},
+       {"utc_media_webrtc_remove_media_source_n2",utc_media_webrtc_remove_media_source_n2,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_p",utc_media_webrtc_get_peer_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_peer_connection_state_n",utc_media_webrtc_get_peer_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_p",utc_media_webrtc_get_signaling_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_signaling_state_n",utc_media_webrtc_get_signaling_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_p",utc_media_webrtc_get_ice_gathering_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_gathering_state_n",utc_media_webrtc_get_ice_gathering_state_n,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_p",utc_media_webrtc_get_ice_connection_state_p,NULL,NULL},
+       {"utc_media_webrtc_get_ice_connection_state_n",utc_media_webrtc_get_ice_connection_state_n,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_p",utc_media_webrtc_set_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_state_changed_cb_n",utc_media_webrtc_set_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_p",utc_media_webrtc_unset_state_changed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_state_changed_cb_n",utc_media_webrtc_unset_state_changed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_p",utc_media_webrtc_set_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_error_cb_n",utc_media_webrtc_set_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_p",utc_media_webrtc_unset_error_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_error_cb_n",utc_media_webrtc_unset_error_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_p",utc_media_webrtc_set_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_candidate_cb_n",utc_media_webrtc_set_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_p",utc_media_webrtc_unset_ice_candidate_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_candidate_cb_n",utc_media_webrtc_unset_ice_candidate_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_p",utc_media_webrtc_set_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_negotiation_needed_cb_n",utc_media_webrtc_set_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_p",utc_media_webrtc_unset_negotiation_needed_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_negotiation_needed_cb_n",utc_media_webrtc_unset_negotiation_needed_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_p",utc_media_webrtc_set_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_peer_connection_state_change_cb_n",utc_media_webrtc_set_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_p",utc_media_webrtc_unset_peer_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_peer_connection_state_change_cb_n",utc_media_webrtc_unset_peer_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_p",utc_media_webrtc_set_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_signaling_state_change_cb_n",utc_media_webrtc_set_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_p",utc_media_webrtc_unset_signaling_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_signaling_state_change_cb_n",utc_media_webrtc_unset_signaling_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_p",utc_media_webrtc_set_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_gathering_state_change_cb_n",utc_media_webrtc_set_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_p",utc_media_webrtc_unset_ice_gathering_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_gathering_state_change_cb_n",utc_media_webrtc_unset_ice_gathering_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_p",utc_media_webrtc_set_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_set_ice_connection_state_change_cb_n",utc_media_webrtc_set_ice_connection_state_change_cb_n,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_p",utc_media_webrtc_unset_ice_connection_state_change_cb_p,NULL,NULL},
+       {"utc_media_webrtc_unset_ice_connection_state_change_cb_n",utc_media_webrtc_unset_ice_connection_state_change_cb_n,NULL,NULL},
+       {NULL, NULL}
+};
+
+#endif // __TCT_WEBRTC-NATIVE_H__
diff --git a/src/utc/webrtc/utc-media-webrtc-callback.c b/src/utc/webrtc/utc-media-webrtc-callback.c
new file mode 100644 (file)
index 0000000..26e2d0c
--- /dev/null
@@ -0,0 +1,710 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 <webrtc.h>
+
+static void __webrtc_state_changed_cb(webrtc_h webrtc, webrtc_state_e previous, webrtc_state_e current, void *user_data)
+{
+}
+
+static void __webrtc_error_cb(webrtc_h webrtc, webrtc_error_e error, webrtc_state_e state, void *user_data)
+{
+}
+
+static void __webrtc_ice_candidate_cb(webrtc_h webrtc, const char *candidate, void *user_data)
+{
+}
+
+static void __webrtc_negotiation_needed_cb(webrtc_h webrtc, void *user_data)
+{
+}
+
+static void __webrtc_peer_connection_state_change_cb(webrtc_h webrtc, webrtc_peer_connection_state_e state, void *user_data)
+{
+}
+
+static void __webrtc_signaling_state_change_cb(webrtc_h webrtc, webrtc_signaling_state_e state, void *user_data)
+{
+}
+
+static void __webrtc_ice_gathering_state_change_cb(webrtc_h webrtc, webrtc_ice_gathering_state_e state, void *user_data)
+{
+}
+
+static void __webrtc_ice_connection_state_change_cb(webrtc_h webrtc, webrtc_ice_connection_state_e state, void *user_data)
+{
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_state_changed_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a callback function to be invoked when the state is changed
+ */
+int utc_media_webrtc_set_state_changed_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_state_changed_cb(webrtc, __webrtc_state_changed_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_state_changed_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a callback function to be invoked when the state is changed
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_state_changed_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_state_changed_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_state_changed_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the state changed callback
+ */
+int utc_media_webrtc_unset_state_changed_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_state_changed_cb(webrtc, __webrtc_state_changed_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_state_changed_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_state_changed_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the state changed callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_state_changed_cb_n(void)
+{
+       int ret = webrtc_unset_state_changed_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_error_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a callback function to be invoked when an error occurs
+ */
+int utc_media_webrtc_set_error_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_error_cb(webrtc, __webrtc_error_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_error_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a callback function to be invoked when an error occurs
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_error_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_error_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_error_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the error callback
+ */
+int utc_media_webrtc_unset_error_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_error_cb(webrtc, __webrtc_error_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_error_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_error_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the error callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_error_cb_n(void)
+{
+       int ret = webrtc_unset_error_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_candidate_cb_p
+ * @since_tizen                6.5
+ * @description                Sets an ICE candidate callback function
+ */
+int utc_media_webrtc_set_ice_candidate_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_candidate_cb(webrtc, __webrtc_ice_candidate_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_candidate_cb_n
+ * @since_tizen                6.5
+ * @description                Sets an ICE candidate callback function
+*                              - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_ice_candidate_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_candidate_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_candidate_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the ice candidate callback
+ */
+int utc_media_webrtc_unset_ice_candidate_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_candidate_cb(webrtc, __webrtc_ice_candidate_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_ice_candidate_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_candidate_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the state changed callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_ice_candidate_cb_n(void)
+{
+       int ret = webrtc_unset_ice_candidate_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_negotiation_needed_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a negotiation needed callback
+ */
+int utc_media_webrtc_set_negotiation_needed_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_negotiation_needed_cb(webrtc, __webrtc_negotiation_needed_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_negotiation_needed_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a negotiation needed callback
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_negotiation_needed_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_negotiation_needed_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_negotiation_needed_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the negotiation needed callback
+ */
+int utc_media_webrtc_unset_negotiation_needed_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_negotiation_needed_cb(webrtc, __webrtc_negotiation_needed_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_negotiation_needed_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_negotiation_needed_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the negotiation needed callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_negotiation_needed_cb_n(void)
+{
+       int ret = webrtc_unset_negotiation_needed_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_peer_connection_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a peer connection state change callback
+ */
+int utc_media_webrtc_set_peer_connection_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_peer_connection_state_change_cb(webrtc, __webrtc_peer_connection_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_peer_connection_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_peer_connection_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a peer connection state change callback
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_peer_connection_state_change_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_peer_connection_state_change_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_peer_connection_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the peer connection state change callback
+ */
+int utc_media_webrtc_unset_peer_connection_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_peer_connection_state_change_cb(webrtc, __webrtc_peer_connection_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_peer_connection_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_peer_connection_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the peer connection state change callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_peer_connection_state_change_cb_n(void)
+{
+       int ret = webrtc_unset_peer_connection_state_change_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_signaling_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a signaling state change callback
+ */
+int utc_media_webrtc_set_signaling_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_signaling_state_change_cb(webrtc, __webrtc_signaling_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_signaling_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_signaling_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a signaling state change callback
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_signaling_state_change_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_signaling_state_change_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_signaling_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the signaling state change callback
+ */
+int utc_media_webrtc_unset_signaling_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_signaling_state_change_cb(webrtc, __webrtc_signaling_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_signaling_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_signaling_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the signaling state change callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_signaling_state_change_cb_n(void)
+{
+       int ret = webrtc_unset_signaling_state_change_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_gathering_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a ice gathering state change callback
+ */
+int utc_media_webrtc_set_ice_gathering_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_gathering_state_change_cb(webrtc, __webrtc_ice_gathering_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_ice_gathering_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_gathering_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a ice gathering state change callback
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_ice_gathering_state_change_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_gathering_state_change_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_gathering_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the ice gathering state change callback
+ */
+int utc_media_webrtc_unset_ice_gathering_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_gathering_state_change_cb(webrtc, __webrtc_ice_gathering_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_ice_gathering_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_gathering_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the ice gathering state change callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_ice_gathering_state_change_cb_n(void)
+{
+       int ret = webrtc_unset_ice_gathering_state_change_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_connection_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Sets a ice connection state change callback
+ */
+int utc_media_webrtc_set_ice_connection_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_connection_state_change_cb(webrtc, __webrtc_ice_connection_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_ice_connection_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_set_ice_connection_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Sets a ice connection state change callback
+ *                             - Sets the callback without callback function pointer to get negative result
+ */
+int utc_media_webrtc_set_ice_connection_state_change_cb_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_connection_state_change_cb(webrtc, NULL, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_connection_state_change_cb_p
+ * @since_tizen                6.5
+ * @description                Unsets the ice connection state change callback
+ */
+int utc_media_webrtc_unset_ice_connection_state_change_cb_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_connection_state_change_cb(webrtc, __webrtc_ice_connection_state_change_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_unset_ice_connection_state_change_cb(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_unset_ice_connection_state_change_cb_n
+ * @since_tizen                6.5
+ * @description                Unsets the ice connection state change callback
+ *                             - Unsets the callback without handle to get negative result
+ */
+int utc_media_webrtc_unset_ice_connection_state_change_cb_n(void)
+{
+       int ret = webrtc_unset_ice_connection_state_change_cb(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
diff --git a/src/utc/webrtc/utc-media-webrtc.c b/src/utc/webrtc/utc-media-webrtc.c
new file mode 100644 (file)
index 0000000..3f24d3e
--- /dev/null
@@ -0,0 +1,678 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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 <glib.h>
+#include <webrtc.h>
+#include <dlog.h>
+
+#define TIMEOUT_MS 1000
+
+static GMainLoop *g_mainloop = NULL;
+static int g_timeout_id = 0;
+
+static gboolean __timeout_func(gpointer data)
+{
+       dlog_print(DLOG_DEBUG, "NativeTCT", "[%s(%d)] g_main_loop_quit()", __FUNCTION__, __LINE__);
+
+       g_main_loop_quit((GMainLoop *) data);
+       return FALSE;
+}
+
+static void __quit_mainloop()
+{
+       dlog_print(DLOG_DEBUG, "NativeTCT", "[%s(%d)] g_main_loop_quit()", __FUNCTION__, __LINE__);
+
+       if (g_timeout_id > 0) {
+               g_source_remove(g_timeout_id);
+               g_timeout_id = 0;
+       }
+       if (g_mainloop != NULL)
+               g_main_loop_quit(g_mainloop);
+}
+
+static void __run_mainloop()
+{
+       g_mainloop = g_main_loop_new(NULL, FALSE);
+       g_timeout_id = g_timeout_add(TIMEOUT_MS, __timeout_func, g_mainloop);
+
+       dlog_print(DLOG_DEBUG, "NativeTCT", "[%s(%d)] call g_main_loop_run()", __FUNCTION__, __LINE__);
+
+       g_main_loop_run(g_mainloop);
+
+       dlog_print(DLOG_DEBUG, "NativeTCT", "[%s(%d)] quit g_main_loop_run()", __FUNCTION__, __LINE__);
+
+       g_main_loop_unref(g_mainloop);
+       g_mainloop = NULL;
+}
+
+static void __webrtc_ice_candidate_cb(webrtc_h webrtc, const char *candidate, void *user_data)
+{
+}
+
+static void __webrtc_state_changed_cb(webrtc_h webrtc, webrtc_state_e previous, webrtc_state_e current, void *user_data)
+{
+       dlog_print(DLOG_DEBUG, "NativeTCT", "[%s:%d] current state[%d]", __FUNCTION__, __LINE__, current);
+
+       __quit_mainloop();
+}
+
+/**
+ * @testcase           utc_media_webrtc_create_p
+ * @since_tizen                6.5
+ * @description                Creates a webrtc handle
+ */
+int utc_media_webrtc_create_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_create_n
+ * @since_tizen                6.5
+ * @description                Creates a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_create_n(void)
+{
+       int ret = webrtc_create(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_destroy_p
+ * @since_tizen                6.5
+ * @description                Destroys the webrtc handle\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass the webrtc handle to destroy
+ */
+int utc_media_webrtc_destroy_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_destroy(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_destroy_n
+ * @since_tizen                6.5
+ * @description                Destroys the webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_destroy_n(void)
+{
+       int ret = webrtc_destroy(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_start_p
+ * @since_tizen                6.5
+ * @description                Starts the webrtc handle\n
+ *                             - Create a webrtc handle\n
+ *                             - Set ICE candidate callback\n
+ *                             - Start the handle
+ */
+int utc_media_webrtc_start_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_candidate_cb(webrtc, __webrtc_ice_candidate_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_start(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_start_n1
+ * @since_tizen                6.5
+ * @description                Starts the webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_start_n1(void)
+{
+       int ret = webrtc_start(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_start_n2
+ * @since_tizen                6.5
+ * @description                Starts the webrtc handle\n
+ *                             - Create a webrtc handle\n
+ *                             - Start the handle without setting ice candidate callback to get negative result
+ */
+int utc_media_webrtc_start_n2(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_start(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_OPERATION);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_stop_p
+ * @since_tizen                6.5
+ * @description                Stops the webrtc handle\n
+ *                             - Create a webrtc handle\n
+ *                             - Set ICE candidate callback\n
+ *                             - Start the handle\n
+ *                             - Stop the handle
+ */
+int utc_media_webrtc_stop_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_ice_candidate_cb(webrtc, __webrtc_ice_candidate_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_set_state_changed_cb(webrtc, __webrtc_state_changed_cb, NULL);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_start(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       __run_mainloop();
+
+       ret = webrtc_stop(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_stop_n1
+ * @since_tizen                6.5
+ * @description                Stops the webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_stop_n1(void)
+{
+       int ret = webrtc_stop(NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_stop_n2
+ * @since_tizen                6.5
+ * @description                Stops the webrtc handle\n
+ *                             - Create a webrtc handle\n
+ *                             - Stop the handle without start to get negative result
+ */
+int utc_media_webrtc_stop_n2(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_stop(webrtc);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_STATE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_state_p
+ * @since_tizen                6.5
+ * @description                Gets the webrtc state\n
+ *                             - Create a webrtc handle\n
+ *                             - Get state of the handle
+ */
+int utc_media_webrtc_get_state_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       webrtc_state_e state;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_state(webrtc, &state);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+       assert_eq(state, WEBRTC_STATE_IDLE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_state_n1
+ * @since_tizen                6.5
+ * @description                Gets the webrtc state\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_state_n1(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_state(webrtc, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_state_n2
+ * @since_tizen                6.5
+ * @description                Gets the webrtc state\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_state_n2(void)
+{
+       webrtc_state_e state;
+       int ret = webrtc_get_state(NULL, &state);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_add_media_source_p
+ * @since_tizen                6.5
+ * @description                Adds a media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Add a media source
+ */
+int utc_media_webrtc_add_media_source_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       unsigned int id;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_add_media_source(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST, &id);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_add_media_source_n1
+ * @since_tizen                6.5
+ * @description                Adds a media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_add_media_source_n1(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_add_media_source(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_add_media_source_n2
+ * @since_tizen                6.5
+ * @description                Adds a media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_add_media_source_n2(void)
+{
+       unsigned int id;
+
+       int ret = webrtc_add_media_source(NULL, WEBRTC_MEDIA_SOURCE_TYPE_MIC, &id);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_remove_media_source_p
+ * @since_tizen                6.5
+ * @description                Removes the media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Add a media source\n
+ *                             - Remove the media source
+ */
+int utc_media_webrtc_remove_media_source_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       unsigned int id;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_add_media_source(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_CAMERA, &id);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_remove_media_source(webrtc, id);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_remove_media_source_n1
+ * @since_tizen                6.5
+ * @description                Removes the media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Add a media source\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_remove_media_source_n1(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       unsigned int id;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_add_media_source(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_SCREEN, &id);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_remove_media_source(webrtc, id + 1);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_remove_media_source_n2
+ * @since_tizen                6.5
+ * @description                Removes the media source\n
+ *                             - Create a webrtc handle\n
+ *                             - Add a media source\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_remove_media_source_n2(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       unsigned int id;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_add_media_source(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_FILE, &id);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_remove_media_source(webrtc, id - 1);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_peer_connection_state_p
+ * @since_tizen                6.5
+ * @description                Gets the webrtc peer connection state\n
+ *                             - Create a webrtc handle\n
+ *                             - Get the state
+ */
+int utc_media_webrtc_get_peer_connection_state_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       webrtc_peer_connection_state_e state;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_peer_connection_state(webrtc, &state);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+       assert_eq(state, WEBRTC_PEER_CONNECTION_STATE_NEW);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_peer_connection_state_n
+ * @since_tizen                6.5
+ * @description                Gets the webrtc peer connection state\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_peer_connection_state_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_peer_connection_state(webrtc, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_signaling_state_p
+ * @since_tizen                6.5
+ * @description                Gets the webrtc signaling state\n
+ *                             - Create a webrtc handle\n
+ *                             - Get the state
+ */
+int utc_media_webrtc_get_signaling_state_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       webrtc_signaling_state_e state;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_signaling_state(webrtc, &state);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+       assert_eq(state, WEBRTC_SIGNALING_STATE_STABLE);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_signaling_state_n
+ * @since_tizen                6.5
+ * @description                Gets the webrtc signaling state\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_signaling_state_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_signaling_state(webrtc, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_ice_gathering_state_p
+ * @since_tizen                6.5
+ * @description                Gets the webrtc ice gathering state\n
+ *                             - Create a webrtc handle\n
+ *                             - Get the state
+ */
+int utc_media_webrtc_get_ice_gathering_state_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       webrtc_ice_gathering_state_e state;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_ice_gathering_state(webrtc, &state);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+       assert_eq(state, WEBRTC_ICE_GATHERING_STATE_NEW);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_ice_gathering_state_n
+ * @since_tizen                6.5
+ * @description                Gets the webrtc ice gathering state\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_ice_gathering_state_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_ice_gathering_state(webrtc, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_ice_connection_state_p
+ * @since_tizen                6.5
+ * @description                Gets the webrtc ice connection state\n
+ *                             - Create a webrtc handle\n
+ *                             - Get the state
+ */
+int utc_media_webrtc_get_ice_connection_state_p(void)
+{
+       int ret;
+       webrtc_h webrtc;
+       webrtc_ice_connection_state_e state;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_ice_connection_state(webrtc, &state);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+       assert_eq(state, WEBRTC_ICE_CONNECTION_STATE_NEW);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}
+
+/**
+ * @testcase           utc_media_webrtc_get_ice_connection_state_n
+ * @since_tizen                6.5
+ * @description                Gets the webrtc ice connection state\n
+ *                             - Create a webrtc handle\n
+ *                             - Pass invalid parameter to get negative result
+ */
+int utc_media_webrtc_get_ice_connection_state_n(void)
+{
+       int ret;
+       webrtc_h webrtc;
+
+       ret = webrtc_create(&webrtc);
+       assert_eq(ret, WEBRTC_ERROR_NONE);
+
+       ret = webrtc_get_ice_connection_state(webrtc, NULL);
+       assert_eq(ret, WEBRTC_ERROR_INVALID_PARAMETER);
+
+       webrtc_destroy(webrtc);
+
+       return 0;
+}