#include <gtest/gtest.h>
#include <unistd.h>
#include <wifi-manager.h>
+#include <wifi-direct.h>
+#include <softap.h>
#include <system_info.h>
#include "unittest.h"
static wifi_manager_error_e rst = WIFI_MANAGER_ERROR_NOT_SUPPORTED;
wifi_manager_ap_h g_hWifiAP;
+static int rst_p2p = 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 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)
{
static gboolean __timeout_callback(gpointer data)
{
- EXPECT_TRUE(0) << "Wi-Fi Manager callback timeout!";
+ EXPECT_TRUE(0) << "Wi-Fi TC 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_p2p = error_code;
+ dev_state = device_state;
+ QUIT_GMAIN_LOOP;
+}
+
+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;
+}
+
+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);
+}
+
static bool __found_ap_callback(wifi_manager_ap_h ap, void *user_data)
{
char *ap_name = NULL;
EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, rv) << "Deinitialization failure";
}
+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_p2p) << "Activetion failure";
+ rst_p2p = 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_p2p) << "Deactivation failure";
+ rst_p2p = 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";
+}
+
+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)
{
if (argc > 1 && argv[argc - 1][0] != '-') {
argc--;
}
+ __set_p2p_ifname();
InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}