From: Jaehyun Kim Date: Fri, 16 Mar 2018 11:26:12 +0000 (+0900) Subject: Add HAL TC code for wifi, wifi-direct and softap X-Git-Tag: submit/tizen/20180327.123653~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=27c0ae4a5e9a13de0629a1c64c6b1c0f42f5ad20;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git Add HAL TC code for wifi, wifi-direct and softap Change-Id: I26973926e41a28ab4a803f21379546437d1dd2c9 Signed-off-by: Jaehyun Kim --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 331c979..b7d8fa8 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT(net-config C) +PROJECT(net-config C CXX) SET(PACKAGE ${PROJECT_NAME}) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(BINDIR "${PREFIX}/bin") @@ -130,3 +130,6 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/config/security-network-config.conf DESTINATIO ADD_SUBDIRECTORY(plugin/headed) ADD_SUBDIRECTORY(plugin/telephony) +IF(BUILD_GTESTS) + ADD_SUBDIRECTORY(unittest) +ENDIF(BUILD_GTESTS) diff --git a/packaging/net-config.spec b/packaging/net-config.spec index a8aa2d3..66b1d4b 100755 --- a/packaging/net-config.spec +++ b/packaging/net-config.spec @@ -14,8 +14,14 @@ BuildRequires: pkgconfig(capi-vpnsvc) BuildRequires: cmake BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(libtzplatform-config) -BuildRequires: pkgconfig(key-manager) -BuildRequires: pkgconfig(libnl-2.0) +BuildRequires: pkgconfig(key-manager) +BuildRequires: pkgconfig(libnl-2.0) +%if 0%{?gtests:1} +BuildRequires: pkgconfig(gmock) +BuildRequires: pkgconfig(capi-network-wifi-manager) +BuildRequires: pkgconfig(capi-network-wifi-direct) +BuildRequires: pkgconfig(capi-network-softap) +%endif Requires: vconf Requires: connman Requires: systemd @@ -75,6 +81,9 @@ cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DTIZEN_WEARABLE=1 \ -DTIZEN_CAPTIVE_PORTAL=1 \ -DLIB_PATH=%{_lib} \ + -DBIN_DIR=%{_bindir} \ + -DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0} \ + -DBUILD_GCOV=%{?gcov:1}%{!?gcov:0} \ . %make_install @@ -91,6 +100,9 @@ cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ -DTIZEN_WEARABLE=0 \ -DTIZEN_CAPTIVE_PORTAL=0 \ -DLIB_PATH=%{_lib} \ + -DBIN_DIR=%{_bindir} \ + -DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0} \ + -DBUILD_GCOV=%{?gcov:1}%{!?gcov:0} \ . make %{?_smp_mflags} @@ -193,6 +205,9 @@ ln -sf %{_unitdir}/net-config.service %{_sysconfdir}/systemd/default-extra-depen %license LICENSE %attr(500,root,root) /opt/etc/dump.d/module.d/network_dump.sh %attr(500,network_fw,network_fw) /opt/var/lib/net-config/network_dump.sh +%if 0%{?gtests:1} +%{_bindir}/gtest* +%endif #### tv profile #### %post profile_tv diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt new file mode 100755 index 0000000..30b5be8 --- /dev/null +++ b/unittest/CMakeLists.txt @@ -0,0 +1,38 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(gtest-net-config C CXX) + +SET(GTEST_TEST "gtest-net-config") +ADD_DEFINITIONS("-DUSE_DLOG") + +SET(REQUIRES_LIST ${REQUIRES_LIST} + glib-2.0 + gio-2.0 + gmock + dlog + capi-network-wifi-manager + capi-network-wifi-direct + capi-network-softap + capi-system-info +) + +INCLUDE(FindPkgConfig) +PKG_CHECK_MODULES(GTEST_TEST_PKG REQUIRED ${REQUIRES_LIST}) + +FOREACH(flag ${GTEST_TEST_PKG_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wall -fPIE") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") + +aux_source_directory(. sources) +FOREACH(src ${sources}) + GET_FILENAME_COMPONENT(src_name ${src} NAME_WE) + MESSAGE("${src_name}") + ADD_EXECUTABLE(${src_name} ${src}) + TARGET_LINK_LIBRARIES(${src_name} ${GTEST_TEST_LDFLAGS} ${GTEST_TEST_PKG_LDFLAGS} -ldl -lgcov) + INSTALL(TARGETS ${src_name} RUNTIME DESTINATION ${BIN_DIR}) +ENDFOREACH() + diff --git a/unittest/gtest_hal_hostap.cpp b/unittest/gtest_hal_hostap.cpp new file mode 100755 index 0000000..342c623 --- /dev/null +++ b/unittest/gtest_hal_hostap.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2018 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 +#include +#include +#include +#include +#include +#include +#include +#include "unittest.h" + +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; + +static softap_h sa = NULL; +static bool g_is_requested; +static softap_error_e g_error; +static softap_disabled_cause_e g_code; + +static bool __check_feature_supported(char *key) +{ + bool value = false; + int ret = system_info_get_platform_bool(key, &value); + + EXPECT_EQ(SYSTEM_INFO_ERROR_NONE, ret) << "system_info_get_platform_bool failed"; + EXPECT_EQ(true, value) << key << " feature is not supported"; + + return value; +} + +static gboolean __timeout_callback(gpointer data) +{ + EXPECT_TRUE(0) << "SoftAP callback timeout!"; + QUIT_GMAIN_LOOP; + return FALSE; +} + +static void __enabled_cb(softap_error_e error, bool is_requested, void *data) +{ + g_error = error; + g_is_requested = is_requested; + QUIT_GMAIN_LOOP; +} + +static void __disabled_cb(softap_error_e error, softap_disabled_cause_e code, void *data) +{ + g_error = error; + g_code = code; + QUIT_GMAIN_LOOP; +} + +TEST(Hal_softap, Init_p) +{ + g_bFeatureWifi = __check_feature_supported((char*)FEATURE_WIFI); + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int ret = SOFTAP_ERROR_NONE; + + ret = softap_create(&sa); + ASSERT_EQ(SOFTAP_ERROR_NONE, ret) << "Initialization failure"; + + ret = softap_set_enabled_cb(sa, __enabled_cb, NULL); + EXPECT_EQ(SOFTAP_ERROR_NONE, ret) << "Fail to set enabled callback!!"; + + ret = softap_set_disabled_cb(sa, __disabled_cb, NULL); + EXPECT_EQ(SOFTAP_ERROR_NONE, ret) << "Fail to set disabled callback!!"; +} + +TEST(Hal_softap, Activate_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int ret = SOFTAP_ERROR_NONE; + bool enabled = false; + + ret = softap_is_enabled(sa, &enabled); + ASSERT_EQ(SOFTAP_ERROR_NONE, ret) << "Failed to get SoftAP state"; + + if (enabled) + goto done; + + ret = softap_enable(sa); + ASSERT_EQ(SOFTAP_ERROR_NONE, ret) << "Failed to enable SoftAP"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(SOFTAP_ERROR_NONE, g_error) << "Failed to enable SoftAP"; + EXPECT_EQ(true, g_is_requested) << "Failed to enable SoftAP"; + +done: + ret = access(WIFI_ADDRESS_PATH, F_OK); + EXPECT_EQ(0, ret) << "Could not access " << WIFI_ADDRESS_PATH; +} + +TEST(Hal_softap, Deactivate_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int ret = SOFTAP_ERROR_NONE; + + ret = softap_disable(sa); + ASSERT_EQ(SOFTAP_ERROR_NONE, ret) << "Failed to disable SoftAP"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(SOFTAP_ERROR_NONE, g_error) << "Failed to disable SoftAP" << g_code; + + ret = access(WIFI_ADDRESS_PATH, F_OK); + EXPECT_EQ(-1, ret) << WIFI_ADDRESS_PATH << " is exist"; +} + +TEST(Hal_softap, Deinit_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int ret = SOFTAP_ERROR_NONE; + + ret = softap_unset_enabled_cb(sa); + EXPECT_EQ(SOFTAP_ERROR_NONE, ret) << "Fail to unset enabled callback!!"; + + ret = softap_unset_disabled_cb(sa); + EXPECT_EQ(SOFTAP_ERROR_NONE, ret) << "Fail to unset disabled callback!!"; + + ret = softap_destroy(sa); + EXPECT_EQ(SOFTAP_ERROR_NONE, ret) << "Deinitialization failure"; +} + +int main(int argc, char **argv) +{ + InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/unittest/gtest_hal_wifi.cpp b/unittest/gtest_hal_wifi.cpp new file mode 100755 index 0000000..8b92569 --- /dev/null +++ b/unittest/gtest_hal_wifi.cpp @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2018 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 +#include +#include +#include +#include +#include +#include +#include +#include "unittest.h" + +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; + +static char ap_name[MAX_AP_LENGTH]; +static wifi_manager_h wifi = NULL; +static wifi_manager_error_e rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; +wifi_manager_ap_h g_hWifiAP; + + +static bool __check_feature_supported(char *key) +{ + bool value = false; + int ret = system_info_get_platform_bool(key, &value); + + EXPECT_EQ(SYSTEM_INFO_ERROR_NONE, ret) << "system_info_get_platform_bool failed"; + EXPECT_EQ(true, value) << key << " feature is not supported"; + + return value; +} + +static void __test_callback(wifi_manager_error_e result, void* user_data) +{ + rst = result; + QUIT_GMAIN_LOOP; +} + +static gboolean __timeout_callback(gpointer data) +{ + EXPECT_TRUE(0) << "Wi-Fi Manager callback timeout!"; + QUIT_GMAIN_LOOP; + return FALSE; +} + +static bool __found_ap_callback(wifi_manager_ap_h ap, void *user_data) +{ + char *ap_name = NULL; + char *ap_name_part = (char *)user_data; + size_t ap_name_len = strlen(ap_name_part); + int ret = WIFI_MANAGER_ERROR_NONE; + + if (ap) { + ret = wifi_manager_ap_get_essid(ap, &ap_name); + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Unable to get essid"; + + if (!ap_name) + return true; + + if (!strncmp(ap_name, ap_name_part, ap_name_len)) { + g_free(ap_name); + ret = wifi_manager_ap_clone(&g_hWifiAP, ap); + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Unable to clone the AP handle"; + if (g_hWifiAP) { + rst = WIFI_MANAGER_ERROR_NONE; + return false; + } + } + } + + return true; +} + +TEST(Hal_wifi, Init_p) +{ + g_bFeatureWifi = __check_feature_supported((char*)FEATURE_WIFI); + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int rv = wifi_manager_initialize(&wifi); + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Initialization failure"; +} + +TEST(Hal_wifi, Activate_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int rv; + bool activated; + + rv = wifi_manager_is_activated(wifi, &activated); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Failed to get Wi-Fi device state"; + + if (activated) + goto done; + + rv = wifi_manager_activate(wifi, __test_callback, NULL); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Failed to activate Wi-Fi device"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Activetion failure"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; + +done: + rv = access(WIFI_ADDRESS_PATH, F_OK); + EXPECT_EQ(0, rv) << "Could not access " << WIFI_ADDRESS_PATH; +} + +TEST(Hal_wifi, Scan_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int rv = wifi_manager_scan(wifi, __test_callback, NULL); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Failed to scan"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Scan failure"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; +} + +TEST(Hal_wifi, Connect_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + wifi_manager_connection_state_e connection_state; + int ret = WIFI_MANAGER_ERROR_NONE; + + ret = wifi_manager_get_connection_state(wifi, &connection_state); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Failed to get connection state"; + + if (connection_state == WIFI_MANAGER_CONNECTION_STATE_CONNECTED) + return; + + if (!ap_name[0]) + return; + + ret = wifi_manager_foreach_found_ap(wifi, __found_ap_callback, (char *)ap_name); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Failed to find the AP"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; + + ret = wifi_manager_connect(wifi, g_hWifiAP, __test_callback, NULL); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Failed to connect"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Connection failure"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; +} + +TEST(Hal_wifi, Disconnect_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int ret = WIFI_MANAGER_ERROR_NONE; + wifi_manager_ap_h hAP = NULL; + + ret = wifi_manager_get_connected_ap(wifi, &hAP); + if (ret == WIFI_MANAGER_ERROR_NO_CONNECTION) + return; + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Failed to get connected AP"; + + ret = wifi_manager_disconnect(wifi, hAP, __test_callback, NULL); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Failed to disconnect"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Disconnection failure"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; + + ret = wifi_manager_forget_ap(wifi, hAP); + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, ret) << "Failed to forget AP"; +} + +TEST(Hal_wifi, Deactivate_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int rv = wifi_manager_deactivate(wifi, __test_callback, NULL); + ASSERT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Failed to deactivate Wi-Fi device"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rst) << "Deactivation failure"; + rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED; + + rv = access(WIFI_ADDRESS_PATH, F_OK); + EXPECT_EQ(-1, rv) << WIFI_ADDRESS_PATH << " is exist"; +} + +TEST(Hal_wifi, Deinit_p) +{ + ASSERT_EQ(true, g_bFeatureWifi) << FEATURE_WIFI << " feature is not supported"; + + int rv = wifi_manager_deinitialize(wifi); + EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Deinitialization failure"; +} + +int main(int argc, char **argv) +{ + if (argc > 1 && argv[argc - 1][0] != '-') { + g_strlcpy(ap_name, argv[argc - 1], MAX_AP_LENGTH); + argc--; + } + + InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/unittest/gtest_hal_wifi_direct.cpp b/unittest/gtest_hal_wifi_direct.cpp new file mode 100755 index 0000000..bcfb5a9 --- /dev/null +++ b/unittest/gtest_hal_wifi_direct.cpp @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2018 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 +#include +#include +#include +#include +#include +#include +#include +#include "unittest.h" + +using ::testing::InitGoogleTest; +using ::testing::Test; +using ::testing::TestCase; + +static int rst = WIFI_DIRECT_ERROR_OPERATION_FAILED; +static wifi_direct_device_state_e dev_state = WIFI_DIRECT_DEVICE_STATE_DEACTIVATED; +static char p2p_ifname[MAX_PATH_LENGTH]; + +static bool __check_feature_supported(char *key) +{ + bool value = false; + int ret = system_info_get_platform_bool(key, &value); + + EXPECT_EQ(SYSTEM_INFO_ERROR_NONE, ret) << "system_info_get_platform_bool failed"; + EXPECT_EQ(true, value) << key << " feature is not supported"; + + return value; +} + +static gboolean __timeout_callback(gpointer data) +{ + EXPECT_TRUE(0) << "Wi-Fi Direct callback timeout!"; + QUIT_GMAIN_LOOP; + return FALSE; +} + +static void __device_state_changed_cb(int error_code, + wifi_direct_device_state_e device_state, void *user_data) +{ + rst = error_code; + dev_state = device_state; + QUIT_GMAIN_LOOP; +} + +static void __set_p2p_ifname(void) +{ + GKeyFile *key_file = NULL; + GError *error = NULL; + char *ifn = NULL; + + key_file = g_key_file_new(); + if (!g_key_file_load_from_file(key_file, WIFI_P2P_CONFIG_PATH, G_KEY_FILE_NONE, &error)) { + g_clear_error(&error); + g_key_file_free(key_file); + key_file = NULL; + return; + } + + ifn = g_key_file_get_string(key_file, WFD_CONF_GROUP_NAME, "p2p_interface", &error); + if (ifn) + g_snprintf(p2p_ifname, MAX_PATH_LENGTH, "/sys/class/net/%s/address", ifn); + + if (error) + g_clear_error(&error); + g_key_file_free(key_file); +} + + +TEST(Hal_wifi_direct, Init_p) +{ + g_bFeatureP2P = __check_feature_supported((char*)WIFIDIRECT_FEATURE); + ASSERT_EQ(true, g_bFeatureP2P) << WIFIDIRECT_FEATURE << " feature is not supported"; + + int rv = wifi_direct_initialize(); + EXPECT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Initialization failure"; +} + +TEST(Hal_wifi_direct, Activate_p) +{ + ASSERT_EQ(true, g_bFeatureP2P) << WIFIDIRECT_FEATURE << " feature is not supported"; + + int rv; + wifi_direct_state_e state = WIFI_DIRECT_STATE_ACTIVATED; + + rv = wifi_direct_get_state(&state); + ASSERT_EQ(0, rv) << "Failed to get Wi-Fi Direct device state"; + + if (state != WIFI_DIRECT_STATE_DEACTIVATED) + goto done; + + rv = wifi_direct_set_device_state_changed_cb(__device_state_changed_cb, NULL); + ASSERT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Failed to set activation callback"; + + rv = wifi_direct_activate(); + ASSERT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Failed to activate Wi-Fi Direct device"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_DIRECT_ERROR_NONE, rst) << "Activetion failure"; + rst = WIFI_DIRECT_ERROR_OPERATION_FAILED; + + rv = wifi_direct_get_state(&state); + EXPECT_EQ(0, rv) << "Failed to get Wi-Fi Direct device state"; + EXPECT_EQ(WIFI_DIRECT_STATE_ACTIVATED, state) << "Activetion failure"; + +done: + if (p2p_ifname[0]) + rv = access(p2p_ifname, F_OK); + else + rv = access(WIFI_P2P_PATH, F_OK); + EXPECT_EQ(0, rv) << "Could not access " << WIFI_ADDRESS_PATH; +} + +TEST(Hal_wifi_direct, Deactivate_p) +{ + ASSERT_EQ(true, g_bFeatureP2P) << WIFIDIRECT_FEATURE << " feature is not supported"; + + int rv; + + rv = wifi_direct_deactivate(); + ASSERT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Failed to deactivate Wi-Fi Direct"; + + RUN_GMAIN_LOOP(__timeout_callback); + + EXPECT_EQ(WIFI_DIRECT_ERROR_NONE, rst) << "Deactivation failure"; + rst = WIFI_DIRECT_ERROR_OPERATION_FAILED; + + wifi_direct_state_e state = WIFI_DIRECT_STATE_ACTIVATED; + rv = wifi_direct_get_state(&state); + EXPECT_EQ(0, rv) << "Failed to get Wi-Fi Direct device state"; + + EXPECT_EQ(WIFI_DIRECT_STATE_DEACTIVATED, state) << "Deactivetion failure"; + + if (p2p_ifname[0]) + rv = access(p2p_ifname, F_OK); + else + rv = access(WIFI_P2P_PATH, F_OK); + EXPECT_EQ(-1, rv) << WIFI_P2P_PATH << " is exist"; + + rv = wifi_direct_unset_device_state_changed_cb(); + EXPECT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Failed to unset activation callback"; +} + +TEST(Hal_wifi_direct, Deinit_p) +{ + ASSERT_EQ(true, g_bFeatureP2P) << WIFIDIRECT_FEATURE << " feature is not supported"; + + int rv = wifi_direct_deinitialize(); + EXPECT_EQ(WIFI_DIRECT_ERROR_NONE, rv) << "Deinitialization failure"; +} + +int main(int argc, char **argv) +{ + __set_p2p_ifname(); + + InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/unittest/unittest.h b/unittest/unittest.h new file mode 100755 index 0000000..7c56f1d --- /dev/null +++ b/unittest/unittest.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018 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 __NETCONFIG_UNITTEST_H__ +#define __NETCONFIG_UNITTEST_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define GMAINTIMEOUT 20000 +#define MAX_AP_LENGTH 33 +#define MAX_KEY_LENGTH 64 +#define MAX_PATH_LENGTH 256 + +#define FEATURE_WIFI "http://tizen.org/feature/network.wifi" +#define WIFIDIRECT_FEATURE "http://tizen.org/feature/network.wifi.direct" + +#define WIFI_ADDRESS_PATH "/sys/class/net/wlan0/address" +#define WIFI_P2P_PATH "/sys/class/net/p2p0/address" +#define WIFI_P2P_CONFIG_PATH "/etc/wifi-direct/wifi-direct-manager.conf" +#define WFD_CONF_GROUP_NAME "wfd-manager" + +GMainLoop *g_pMainLoop; +guint g_nTimeoutId; +bool g_bFeatureWifi; +bool g_bFeatureP2P; + +#define RUN_GMAIN_LOOP(callback) {\ + g_pMainLoop = g_main_loop_new(NULL, false);\ + g_nTimeoutId = g_timeout_add(GMAINTIMEOUT, callback, g_pMainLoop);\ + g_main_loop_run(g_pMainLoop);\ + g_source_remove(g_nTimeoutId);\ + g_pMainLoop = NULL;\ +} + +#define QUIT_GMAIN_LOOP {\ + if (g_pMainLoop)\ + g_main_loop_quit(g_pMainLoop);\ +} + +#ifdef __cplusplus +} +#endif + +#endif /* __NETCONFIG_UNITTEST_H__ */