Signed-off-by: Yeshun Ye <yeyeshun(a)uniontech.com>
---
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 6cbe725bada..7d1eb5437df 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -2332,6 +2332,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;
+ }
+ ok(IpAddress[0], "A valid IP must be present for adapter [%s]\n", pCurrentAddress->AdapterName);
+ ok(IpMask[0], "A valid mask must be present for adapter [%s]\n", pCurrentAddress->AdapterName);
+ ptr = ptr->Next;
+ }
+ HeapFree(GetProcessHeap(), 0, buf);
+ }
+ pCurrentAddress = pCurrentAddress->Next;
+ }
+ HeapFree(GetProcessHeap(), 0, pAdapterAddress);
+ }
+}
+
START_TEST(iphlpapi)
{
@@ -2364,6 +2442,7 @@ START_TEST(iphlpapi)
test_GetUdp6Table();
test_ParseNetworkString();
test_NotifyUnicastIpAddressChange();
+ test_GetAdaptersInfo_AdapterName();
freeIPHlpApi();
}
}
--
2.20.1