Hans Leidekker : iphlpapi: Add tests for GetAdaptersAddresses.

Alexandre Julliard julliard at winehq.org
Wed Apr 29 10:20:22 CDT 2009


Module: wine
Branch: master
Commit: 5b428fe55efe1277251b1a09e051c0ce4f8a292c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5b428fe55efe1277251b1a09e051c0ce4f8a292c

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Apr 29 11:57:48 2009 +0200

iphlpapi: Add tests for GetAdaptersAddresses.

---

 dlls/iphlpapi/tests/iphlpapi.c |   69 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 2fc5e0d..f879c93 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -63,6 +63,7 @@ typedef DWORD (WINAPI *GetUdpStatisticsFunc)(PMIB_UDPSTATS);
 typedef DWORD (WINAPI *GetTcpTableFunc)(PMIB_TCPTABLE,PDWORD,BOOL);
 typedef DWORD (WINAPI *GetUdpTableFunc)(PMIB_UDPTABLE,PDWORD,BOOL);
 typedef DWORD (WINAPI *GetPerAdapterInfoFunc)(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
+typedef DWORD (WINAPI *GetAdaptersAddressesFunc)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
 
 static GetNumberOfInterfacesFunc gGetNumberOfInterfaces = NULL;
 static GetIpAddrTableFunc gGetIpAddrTable = NULL;
@@ -81,6 +82,7 @@ static GetUdpStatisticsFunc gGetUdpStatistics = NULL;
 static GetTcpTableFunc gGetTcpTable = NULL;
 static GetUdpTableFunc gGetUdpTable = NULL;
 static GetPerAdapterInfoFunc gGetPerAdapterInfo = NULL;
+static GetAdaptersAddressesFunc gGetAdaptersAddresses = NULL;
 
 static void loadIPHlpApi(void)
 {
@@ -119,6 +121,7 @@ static void loadIPHlpApi(void)
     gGetUdpTable = (GetUdpTableFunc)GetProcAddress(
      hLibrary, "GetUdpTable");
     gGetPerAdapterInfo = (GetPerAdapterInfoFunc)GetProcAddress(hLibrary, "GetPerAdapterInfo");
+    gGetAdaptersAddresses = (GetAdaptersAddressesFunc)GetProcAddress(hLibrary, "GetAdaptersAddresses");
   }
 }
 
@@ -811,6 +814,71 @@ static void testWin2KFunctions(void)
     testGetPerAdapterInfo();
 }
 
+static void test_GetAdaptersAddresses(void)
+{
+    ULONG ret, size;
+    IP_ADAPTER_ADDRESSES *aa;
+    IP_ADAPTER_UNICAST_ADDRESS *ua;
+
+    if (!gGetAdaptersAddresses)
+    {
+        win_skip("GetAdaptersAddresses not present\n");
+        return;
+    }
+
+    ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, NULL);
+    ok(ret == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", ret);
+
+    ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, &size);
+    ok(ret == ERROR_BUFFER_OVERFLOW, "expected ERROR_BUFFER_OVERFLOW, got %u\n", ret);
+    if (ret != ERROR_BUFFER_OVERFLOW) return;
+
+    aa = HeapAlloc(GetProcessHeap(), 0, size);
+    ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, aa, &size);
+    ok(!ret, "expected ERROR_SUCCESS got %u\n", ret);
+
+    while (!ret && winetest_debug > 1 && aa)
+    {
+        trace("Length:                %u\n", aa->Length);
+        trace("IfIndex:               %u\n", aa->IfIndex);
+        trace("Next:                  %p\n", aa->Next);
+        trace("AdapterName:           %s\n", aa->AdapterName);
+        trace("FirstUnicastAddress:   %p\n", aa->FirstUnicastAddress);
+        ua = aa->FirstUnicastAddress;
+        while (ua)
+        {
+            trace("\tLength:                  %u\n", ua->Length);
+            trace("\tFlags:                   0x%08x\n", ua->Flags);
+            trace("\tNext:                    %p\n", ua->Next);
+            trace("\tAddress.lpSockaddr:      %p\n", ua->Address.lpSockaddr);
+            trace("\tAddress.iSockaddrLength: %d\n", ua->Address.iSockaddrLength);
+            trace("\tPrefixOrigin:            %u\n", ua->PrefixOrigin);
+            trace("\tSuffixOrigin:            %u\n", ua->SuffixOrigin);
+            trace("\tDadState:                %u\n", ua->DadState);
+            trace("\tValidLifetime:           0x%08x\n", ua->ValidLifetime);
+            trace("\tPreferredLifetime:       0x%08x\n", ua->PreferredLifetime);
+            trace("\tLeaseLifetime:           0x%08x\n", ua->LeaseLifetime);
+            trace("\n");
+            ua = ua->Next;
+        }
+        trace("FirstAnycastAddress:   %p\n", aa->FirstAnycastAddress);
+        trace("FirstMulticastAddress: %p\n", aa->FirstMulticastAddress);
+        trace("FirstDnsServerAddress: %p\n", aa->FirstDnsServerAddress);
+        trace("DnsSuffix:             %p\n", aa->DnsSuffix);
+        trace("Description:           %p\n", aa->Description);
+        trace("FriendlyName:          %p\n", aa->FriendlyName);
+        trace("PhysicalAddress:       %02x\n", aa->PhysicalAddress[0]);
+        trace("PhysicalAddressLength: %u\n", aa->PhysicalAddressLength);
+        trace("Flags:                 0x%08x\n", aa->Flags);
+        trace("Mtu:                   %u\n", aa->Mtu);
+        trace("IfType:                %u\n", aa->IfType);
+        trace("OperStatus:            %u\n", aa->OperStatus);
+        trace("\n");
+        aa = aa->Next;
+    }
+    HeapFree(GetProcessHeap(), 0, aa);
+}
+
 START_TEST(iphlpapi)
 {
 
@@ -820,6 +888,7 @@ START_TEST(iphlpapi)
     testWinNT4Functions();
     testWin98Functions();
     testWin2KFunctions();
+    test_GetAdaptersAddresses();
     freeIPHlpApi();
   }
 }




More information about the wine-cvs mailing list