diff --git a/modules/rostests/apitests/iphlpapi/CMakeLists.txt b/modules/rostests/apitests/iphlpapi/CMakeLists.txt index 8fa7232c907..710a0a789c3 100644 --- a/modules/rostests/apitests/iphlpapi/CMakeLists.txt +++ b/modules/rostests/apitests/iphlpapi/CMakeLists.txt @@ -3,6 +3,7 @@ list(APPEND SOURCE GetExtendedTcpTable.c GetExtendedUdpTable.c GetInterfaceName.c + GetLoopbackFriendlyName.c GetNetworkParams.c GetOwnerModuleFromTcpEntry.c GetOwnerModuleFromUdpEntry.c @@ -13,5 +14,7 @@ list(APPEND SOURCE add_executable(iphlpapi_apitest ${SOURCE}) target_link_libraries(iphlpapi_apitest wine ${PSEH_LIB}) set_module_type(iphlpapi_apitest win32cui) -add_importlibs(iphlpapi_apitest iphlpapi ws2_32 advapi32 msvcrt kernel32 ntdll) +add_importlibs(iphlpapi_apitest iphlpapi ws2_32 advapi32 userenv version shlwapi msvcrt kernel32 ntdll) + + add_rostests_file(TARGET iphlpapi_apitest) diff --git a/modules/rostests/apitests/iphlpapi/GetLoopbackFriendlyName.c b/modules/rostests/apitests/iphlpapi/GetLoopbackFriendlyName.c new file mode 100644 index 00000000000..20790f6abfe --- /dev/null +++ b/modules/rostests/apitests/iphlpapi/GetLoopbackFriendlyName.c @@ -0,0 +1,120 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Tests for GetAdaptersAddresses for Friendly Name + * COPYRIGHT: Copyright 2023 Doug Lyons + */ + +#include +#include +#include +#include +#include +#include + +#define WIN32_NO_STATUS + +#ifndef BUFSIZ +#define BUFSIZ 512 +#endif + +/* Get two values from sdk\include\psdk\winerror.h */ +#define ERROR_SUCCESS 0 +#define ERROR_BUFFER_OVERFLOW 111 + +static HMODULE hLibrary = NULL; + +static DWORD (WINAPI *pGetAdaptersAddresses)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG); + +static void loadIPHlpApi(void) +{ + hLibrary = LoadLibraryA("iphlpapi.dll"); + if (hLibrary) + { + pGetAdaptersAddresses = (void *)GetProcAddress(hLibrary, "GetAdaptersAddresses"); + } +} + +static void freeIPHlpApi(void) +{ + FreeLibrary(hLibrary); +} + +static void test_GetLoopbackFriendlyName(void) +{ + DWORD rv, size = 0; + PIP_ADAPTER_ADDRESSES adapter_addresses, aa; + PIP_ADAPTER_UNICAST_ADDRESS ua; + WSADATA d; + int result; + + result = WSAStartup(MAKEWORD(2, 2), &d); + ok(!result, "WSAStartup Failed\n"); + + if (result != 0) + return; + + rv = GetAdaptersAddresses(AF_INET, 0, NULL, NULL, &size); + ok(rv == ERROR_BUFFER_OVERFLOW, "GetAdaptersAddresses Failed\n"); + + printf("Needed size is %ld.\n", size); + + adapter_addresses = (PIP_ADAPTER_ADDRESSES)malloc(size); + + /* GetAdapterAddresses for IPv4 only with default flags */ + rv = GetAdaptersAddresses(AF_INET, 0, NULL, adapter_addresses, &size); + ok(rv == ERROR_SUCCESS, "GetAdaptersAddresses Failed\n"); + if (rv != ERROR_SUCCESS) + free(adapter_addresses); + + for (aa = adapter_addresses; aa != NULL; aa = aa->Next) + { + for (ua = aa->FirstUnicastAddress; ua != NULL; ua = ua->Next) + { + SOCKADDR Sockaddr = *ua->Address.lpSockaddr; + + /* Check if Loopback Adapter */ + if ((Sockaddr.sa_data[2] & 0xff) == 127 && + (Sockaddr.sa_data[3] & 0xff) == 0 && + (Sockaddr.sa_data[4] & 0xff) == 0 && + (Sockaddr.sa_data[5] & 0xff) == 1) + { + char buf[BUFSIZ]; + + memset(buf, 0, BUFSIZ); + WideCharToMultiByte(CP_ACP, 0, aa->FriendlyName, + wcslen(aa->FriendlyName), buf, BUFSIZ, NULL, NULL); + printf("AdapterName : %s\n", aa->AdapterName); + printf("FriendlyName: %s\n", buf); + ok(strcmp(aa->AdapterName, buf) == 0, "Friendly Name Failure\n"); + if (strcmp(aa->AdapterName, buf) == 0) + printf("Successful compare\n"); + } + } + } + + free(adapter_addresses); + WSACleanup(); +} + +START_TEST(GetLoopbackFriendlyName) +{ + OSVERSIONINFO osinfo; + + osinfo.dwOSVersionInfoSize = sizeof(osinfo); + GetVersionEx(&osinfo); + printf("osinfo.dwMajorVersion: %ld\n", osinfo.dwMajorVersion); + + if (osinfo.dwMajorVersion > 5) + { + printf("Tests Skipped. OSVersion greater than 5.2\n"); + return; + } + + loadIPHlpApi(); + if (hLibrary) + { + test_GetLoopbackFriendlyName(); + freeIPHlpApi(); + } +} diff --git a/modules/rostests/apitests/iphlpapi/testlist.c b/modules/rostests/apitests/iphlpapi/testlist.c index 7699e6001a8..f74c4160866 100644 --- a/modules/rostests/apitests/iphlpapi/testlist.c +++ b/modules/rostests/apitests/iphlpapi/testlist.c @@ -6,6 +6,7 @@ extern void func_GetExtendedTcpTable(void); extern void func_GetExtendedUdpTable(void); extern void func_GetInterfaceName(void); +extern void func_GetLoopbackFriendlyName(void); extern void func_GetNetworkParams(void); extern void func_GetOwnerModuleFromTcpEntry(void); extern void func_GetOwnerModuleFromUdpEntry(void); @@ -17,6 +18,7 @@ const struct test winetest_testlist[] = { "GetExtendedTcpTable", func_GetExtendedTcpTable }, { "GetExtendedUdpTable", func_GetExtendedUdpTable }, { "GetInterfaceName", func_GetInterfaceName }, + { "GetLoopbackFriendlyName", func_GetLoopbackFriendlyName}, { "GetNetworkParams", func_GetNetworkParams }, { "GetOwnerModuleFromTcpEntry", func_GetOwnerModuleFromTcpEntry }, { "GetOwnerModuleFromUdpEntry", func_GetOwnerModuleFromUdpEntry },