From: Yeshun Ye Subject: [PATCH v3 1/2] iphlpapi: Add a test for GetAdaptersInfo. Message-Id: <20210223031846.24757-1-yeyeshun@uniontech.com> Date: Tue, 23 Feb 2021 03:18:45 +0000 Signed-off-by: Yeshun Ye --- dlls/iphlpapi/tests/iphlpapi.c | 79 ++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c index 358084fde68..44ead2580bf 100644 --- a/dlls/iphlpapi/tests/iphlpapi.c +++ b/dlls/iphlpapi/tests/iphlpapi.c @@ -2338,6 +2338,84 @@ static void test_NotifyUnicastIpAddressChange(void) ok(!CloseHandle(handle), "CloseHandle() succeeded.\n"); } +static void test_GetAdaptersInfo_AdapterName(void) +{ + DWORD apiReturn; + ULONG size = 0; + ULONG family = AF_UNSPEC; + ULONG flags = GAA_FLAG_INCLUDE_PREFIX; + + apiReturn = GetAdaptersInfo(NULL, NULL); + if (apiReturn == ERROR_NOT_SUPPORTED) { + skip("GetAdaptersInfo is not supported\n"); + return; + } + apiReturn = GetAdaptersAddresses(0, 0, NULL, NULL, NULL); + if (apiReturn == ERROR_NOT_SUPPORTED) { + skip("GetAdaptersInfo is not supported\n"); + return; + } + apiReturn = GetAdaptersAddresses(family, flags, 0, 0, &size); + ok(apiReturn == ERROR_NO_DATA || apiReturn == ERROR_BUFFER_OVERFLOW, + "GetAdaptersAddresses returned %d, expected ERROR_NO_DATA or ERROR_BUFFER_OVERFLOW\n", + apiReturn); + if (apiReturn == ERROR_NO_DATA) + ; /* no adapter's, that's okay */ + else if (apiReturn == ERROR_BUFFER_OVERFLOW) + { + PIP_ADAPTER_ADDRESSES pAdapterAddress; + PIP_ADAPTER_ADDRESSES pCurrentAddress; + + pAdapterAddress = HeapAlloc(GetProcessHeap(), 0, size); + apiReturn = GetAdaptersAddresses(family, flags, 0, pAdapterAddress, &size); + ok(apiReturn == NO_ERROR, + "GetAdaptersAddresses(family, flags, 0, pAdapterAddress, &size) returned %d, expected NO_ERROR\n", + apiReturn); + + pCurrentAddress = pAdapterAddress; + while (pCurrentAddress) + { + if (pCurrentAddress->IfType == IF_TYPE_ETHERNET_CSMACD && + ((pCurrentAddress->Flags & IP_ADAPTER_IPV4_ENABLED) || (pCurrentAddress->Flags & IP_ADAPTER_IPV6_ENABLED))) + { + ULONG len = 0; + PIP_ADAPTER_INFO ptr, buf; + char IpAddress[16] = {0}; + char IpMask[16] = {0}; + + apiReturn = GetAdaptersInfo(NULL, &len); + ok(apiReturn == ERROR_BUFFER_OVERFLOW, + "GetAdaptersInfo returned %d, expected ERROR_NO_DATA or ERROR_BUFFER_OVERFLOW\n", + apiReturn); + buf = HeapAlloc(GetProcessHeap(), 0, len); + apiReturn = GetAdaptersInfo(buf, &len); + ok(apiReturn == NO_ERROR, + "GetAdaptersInfo(buf, &len) returned %d, expected NO_ERROR\n", + apiReturn); + ptr = buf; + while (ptr) { + if (strcmp(pCurrentAddress->AdapterName, ptr->AdapterName) == 0) + { + ok(ptr->IpAddressList.IpAddress.String[0], "A valid IP must be present\n"); + ok(ptr->IpAddressList.IpMask.String[0], "A valid mask must be present\n"); + trace("Adapter '%s', IP %s, Mask %s\n", ptr->AdapterName, + ptr->IpAddressList.IpAddress.String, ptr->IpAddressList.IpMask.String); + strcpy(IpAddress, ptr->IpAddressList.IpAddress.String); + strcpy(IpMask, ptr->IpAddressList.IpMask.String); + break; + } + ptr = ptr->Next; + } + todo_wine ok(IpAddress[0], "A valid IP must be present for adapter [%s]\n", pCurrentAddress->AdapterName); + todo_wine ok(IpMask[0], "A valid mask must be present for adapter [%s]\n", pCurrentAddress->AdapterName); + HeapFree(GetProcessHeap(), 0, buf); + } + pCurrentAddress = pCurrentAddress->Next; + } + HeapFree(GetProcessHeap(), 0, pAdapterAddress); + } +} + START_TEST(iphlpapi) { @@ -2370,6 +2448,7 @@ START_TEST(iphlpapi) test_GetUdp6Table(); test_ParseNetworkString(); test_NotifyUnicastIpAddressChange(); + test_GetAdaptersInfo_AdapterName(); freeIPHlpApi(); } } -- 2.20.1