| /* |
| * Unit test suite for wlanapi functions |
| * |
| * Copyright 2017 Bruno Jesus |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #define WIN32_LEAN_AND_MEAN |
| #include <windows.h> |
| #include <wlanapi.h> |
| |
| #include "wine/test.h" |
| |
| static void test_WlanOpenHandle(void) |
| { |
| HANDLE bad_handle = (HANDLE) 0xdeadcafe, handle = bad_handle, handle2; |
| DWORD ret, neg_version = 0xdeadbeef, reserved = 0xdead; |
| BOOL is_xp; |
| |
| /* invalid version requested */ |
| ret = WlanOpenHandle(0, NULL, &neg_version, &handle); |
| is_xp = ret == ERROR_SUCCESS; |
| if (!is_xp) /* the results in XP differ completely from all other versions */ |
| { |
| ok(ret == ERROR_NOT_SUPPORTED, "Expected 50, got %d\n", ret); |
| ok(neg_version == 0xdeadbeef, "neg_vesion changed\n"); |
| ok(handle == bad_handle, "handle changed\n"); |
| ret = WlanOpenHandle(10, NULL, &neg_version, &handle); |
| ok(ret == ERROR_NOT_SUPPORTED, "Expected 50, got %d\n", ret); |
| ok(neg_version == 0xdeadbeef, "neg_vesion changed\n"); |
| ok(handle == bad_handle, "handle changed\n"); |
| |
| /* reserved parameter must not be used */ |
| ret = WlanOpenHandle(1, &reserved, &neg_version, &handle); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(neg_version == 0xdeadbeef, "neg_vesion changed\n"); |
| ok(handle == bad_handle, "handle changed\n"); |
| |
| /* invalid parameters */ |
| ret = WlanOpenHandle(1, NULL, NULL, &handle); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(handle == bad_handle, "bad handle\n"); |
| ret = WlanOpenHandle(1, NULL, &neg_version, NULL); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(neg_version == 0xdeadbeef, "neg_vesion changed\n"); |
| } |
| else |
| { |
| ok(neg_version == 1, "Expected 1, got %d\n", neg_version); |
| ok(handle != bad_handle && handle, "handle changed\n"); |
| ret = WlanCloseHandle(handle, NULL); |
| ok(ret == 0, "Expected 0, got %d\n", ret); |
| } |
| |
| /* good tests */ |
| ret = WlanOpenHandle(1, NULL, &neg_version, &handle); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| ok(neg_version == 1, "Expected 1, got %d\n", neg_version); |
| ok(handle != bad_handle && handle, "handle changed\n"); |
| ret = WlanCloseHandle(handle, NULL); |
| ok(ret == 0, "Expected 0, got %d\n", ret); |
| |
| ret = WlanOpenHandle(2, NULL, &neg_version, &handle); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| if (!is_xp) /* XP does not support client version 2 */ |
| ok(neg_version == 2, "Expected 2, got %d\n", neg_version); |
| else |
| ok(neg_version == 1, "Expected 1, got %d\n", neg_version); |
| ok(handle != bad_handle && handle, "bad handle\n"); |
| ret = WlanCloseHandle(handle, NULL); |
| ok(ret == 0, "Expected 0, got %d\n", ret); |
| |
| /* open twice */ |
| ret = WlanOpenHandle(1, NULL, &neg_version, &handle); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| ret = WlanOpenHandle(1, NULL, &neg_version, &handle2); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| |
| ret = WlanCloseHandle(handle, &reserved); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| |
| ret = WlanCloseHandle(handle, NULL); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| ret = WlanCloseHandle(handle2, NULL); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| |
| ret = WlanCloseHandle(bad_handle, NULL); |
| ok(ret == ERROR_INVALID_HANDLE, "Expected 6, got %d\n", ret); |
| |
| ret = WlanCloseHandle(NULL, NULL); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| } |
| |
| static void test_WlanAllocateFreeMemory(void) |
| { |
| void *ptr; |
| |
| SetLastError(0xdeadbeef); |
| ptr = WlanAllocateMemory(0); |
| ok(ptr == NULL, "Expected NULL, got %p\n", ptr); |
| ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", GetLastError()); |
| |
| ptr = WlanAllocateMemory(1024); |
| ok(ptr != NULL, "Expected non-NULL\n"); |
| |
| WlanFreeMemory(ptr); |
| |
| WlanFreeMemory(NULL); /* return is void, proves that won't crash */ |
| } |
| |
| static void test_WlanEnumInterfaces(void) |
| { |
| HANDLE handle; |
| DWORD neg_version, i, ret, reserved = 0xdeadbeef; |
| WLAN_INTERFACE_INFO_LIST *bad_list = (WLAN_INTERFACE_INFO_LIST *)0xdeadcafe, |
| *list = bad_list; |
| WLAN_INTERFACE_INFO *info; |
| |
| ret = WlanOpenHandle(1, NULL, &neg_version, &handle); |
| ok(ret == 0, "Expected 0, got %d\n", ret); |
| |
| /* invalid parameters */ |
| ret = WlanEnumInterfaces(NULL, NULL, &list); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(list == bad_list, "list changed\n"); |
| ret = WlanEnumInterfaces(handle, &reserved, &list); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(list == bad_list, "list changed\n"); |
| ret = WlanEnumInterfaces(handle, NULL, NULL); |
| ok(ret == ERROR_INVALID_PARAMETER, "Expected 87, got %d\n", ret); |
| ok(list == bad_list, "list changed\n"); |
| |
| /* good tests */ |
| list = NULL; |
| ret = WlanEnumInterfaces(handle, NULL, &list); |
| ok(ret == ERROR_SUCCESS, "Expected 0, got %d\n", ret); |
| ok(list != NULL, "bad interface list\n"); |
| if (!list || !list->dwNumberOfItems) |
| { |
| skip("No wireless interfaces\n"); |
| WlanCloseHandle(handle, NULL); |
| WlanFreeMemory(list); |
| return; |
| } |
| |
| trace("Wireless interfaces: %d\n", list->dwNumberOfItems); |
| for (i = 0; i < list->dwNumberOfItems;i ++) |
| { |
| info = &list->InterfaceInfo[i]; |
| trace(" Index[%d] GUID: %s\n", i, wine_dbgstr_guid(&info->InterfaceGuid)); |
| switch (info->isState) |
| { |
| case wlan_interface_state_disconnected: |
| trace(" Status: Disconnected\n"); |
| break; |
| case wlan_interface_state_connected: |
| trace(" Status: Connected\n"); |
| break; |
| default: |
| trace(" Status: Other\n"); |
| break; |
| } |
| trace(" Description: %s\n", wine_dbgstr_w(info->strInterfaceDescription)); |
| } |
| |
| WlanFreeMemory(list); |
| |
| ret = WlanCloseHandle(handle, NULL); |
| ok(ret == 0, "Expected 0, got %d\n", ret); |
| } |
| |
| START_TEST(wlanapi) |
| { |
| HANDLE handle; |
| DWORD neg_version; |
| |
| /* Windows checks the service before validating the client version so this |
| * call will always result in error, no need to free the handle. */ |
| if (WlanOpenHandle(0, NULL, &neg_version, &handle) == ERROR_SERVICE_NOT_ACTIVE) |
| { |
| win_skip("No wireless service running\n"); |
| return; |
| } |
| |
| test_WlanOpenHandle(); |
| test_WlanAllocateFreeMemory(); |
| test_WlanEnumInterfaces(); |
| } |