[PATCH 1/2] iphlpapi: Add a test for GetAdaptersInfo.

Yeshun Ye yeyeshun at uniontech.com
Mon Jan 25 03:16:52 CST 2021


Signed-off-by: Yeshun Ye <yeyeshun at 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






More information about the wine-devel mailing list