iphlpapi/tests: Add simple tests for the Get*StatisticsEx functions
André Hentschel
nerv at dawncrow.de
Fri Apr 27 15:11:07 CDT 2012
---
dlls/iphlpapi/tests/iphlpapi.c | 231 ++++++++++++++++++++++++++++++++++++++++
include/ipmib.h | 13 +++
2 files changed, 244 insertions(+), 0 deletions(-)
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 7ab5cff..7cf51b3 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -60,6 +60,10 @@ static DWORD (WINAPI *pGetIcmpStatistics)(PMIB_ICMP);
static DWORD (WINAPI *pGetIpStatistics)(PMIB_IPSTATS);
static DWORD (WINAPI *pGetTcpStatistics)(PMIB_TCPSTATS);
static DWORD (WINAPI *pGetUdpStatistics)(PMIB_UDPSTATS);
+static DWORD (WINAPI *pGetIcmpStatisticsEx)(PMIB_ICMP_EX,DWORD);
+static DWORD (WINAPI *pGetIpStatisticsEx)(PMIB_IPSTATS,DWORD);
+static DWORD (WINAPI *pGetTcpStatisticsEx)(PMIB_TCPSTATS,DWORD);
+static DWORD (WINAPI *pGetUdpStatisticsEx)(PMIB_UDPSTATS,DWORD);
static DWORD (WINAPI *pGetTcpTable)(PMIB_TCPTABLE,PDWORD,BOOL);
static DWORD (WINAPI *pGetUdpTable)(PMIB_UDPTABLE,PDWORD,BOOL);
static DWORD (WINAPI *pGetPerAdapterInfo)(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
@@ -87,6 +91,10 @@ static void loadIPHlpApi(void)
pGetIpStatistics = (void *)GetProcAddress(hLibrary, "GetIpStatistics");
pGetTcpStatistics = (void *)GetProcAddress(hLibrary, "GetTcpStatistics");
pGetUdpStatistics = (void *)GetProcAddress(hLibrary, "GetUdpStatistics");
+ pGetIcmpStatisticsEx = (void *)GetProcAddress(hLibrary, "GetIcmpStatisticsEx");
+ pGetIpStatisticsEx = (void *)GetProcAddress(hLibrary, "GetIpStatisticsEx");
+ pGetTcpStatisticsEx = (void *)GetProcAddress(hLibrary, "GetTcpStatisticsEx");
+ pGetUdpStatisticsEx = (void *)GetProcAddress(hLibrary, "GetUdpStatisticsEx");
pGetTcpTable = (void *)GetProcAddress(hLibrary, "GetTcpTable");
pGetUdpTable = (void *)GetProcAddress(hLibrary, "GetUdpTable");
pGetPerAdapterInfo = (void *)GetProcAddress(hLibrary, "GetPerAdapterInfo");
@@ -513,6 +521,225 @@ static void testGetUdpStatistics(void)
}
}
+static void testGetIcmpStatisticsEx(void)
+{
+ DWORD apiReturn;
+ MIB_ICMP_EX stats;
+
+ if (!pGetIcmpStatisticsEx)
+ {
+ skip( "GetIcmpStatisticsEx not available\n" );
+ return;
+ }
+
+ /* Crashes on Vista */
+ if (1) {
+ apiReturn = pGetIcmpStatisticsEx(NULL, AF_INET);
+ ok(apiReturn == ERROR_INVALID_PARAMETER,
+ "GetIcmpStatisticsEx(NULL, AF_INET) returned %d, expected ERROR_INVALID_PARAMETER\n", apiReturn);
+ }
+
+ apiReturn = pGetIcmpStatisticsEx(&stats, AF_INET);
+ ok(apiReturn == NO_ERROR, "GetIcmpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ INT i;
+ trace( "ICMP Ex stats: %8s %8s\n", "in", "out" );
+ trace( " dwMsgs: %8u %8u\n", stats.icmpInStats.dwMsgs, stats.icmpOutStats.dwMsgs );
+ trace( " dwErrors: %8u %8u\n", stats.icmpInStats.dwErrors, stats.icmpOutStats.dwErrors );
+ for (i = 0; i < 256; i++)
+ trace( " rgdwTypeCount[%3i]: %8u %8u\n", i, stats.icmpInStats.rgdwTypeCount[i], stats.icmpOutStats.rgdwTypeCount[i] );
+ }
+
+ apiReturn = pGetIcmpStatisticsEx(&stats, AF_INET6);
+ ok(apiReturn == NO_ERROR, "GetIcmpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ INT i;
+ trace( "ICMP Ex stats: %8s %8s\n", "in", "out" );
+ trace( " dwMsgs: %8u %8u\n", stats.icmpInStats.dwMsgs, stats.icmpOutStats.dwMsgs );
+ trace( " dwErrors: %8u %8u\n", stats.icmpInStats.dwErrors, stats.icmpOutStats.dwErrors );
+ for (i = 0; i < 256; i++)
+ trace( " rgdwTypeCount[%3i]: %8u %8u\n", i, stats.icmpInStats.rgdwTypeCount[i], stats.icmpOutStats.rgdwTypeCount[i] );
+ }
+}
+
+static void testGetIpStatisticsEx(void)
+{
+ DWORD apiReturn;
+ MIB_IPSTATS stats;
+
+ if (!pGetIpStatisticsEx)
+ {
+ skip( "GetIpStatisticsEx not available\n" );
+ return;
+ }
+
+ apiReturn = pGetIpStatisticsEx(NULL, AF_INET);
+ ok(apiReturn == ERROR_INVALID_PARAMETER,
+ "GetIpStatisticsEx(NULL, AF_INET) returned %d, expected ERROR_INVALID_PARAMETER\n", apiReturn);
+
+ apiReturn = pGetIpStatisticsEx(&stats, AF_INET);
+ ok(apiReturn == NO_ERROR, "GetIpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "IP Ex stats:\n" );
+ trace( " dwForwarding: %u\n", U(stats).dwForwarding );
+ trace( " dwDefaultTTL: %u\n", stats.dwDefaultTTL );
+ trace( " dwInReceives: %u\n", stats.dwInReceives );
+ trace( " dwInHdrErrors: %u\n", stats.dwInHdrErrors );
+ trace( " dwInAddrErrors: %u\n", stats.dwInAddrErrors );
+ trace( " dwForwDatagrams: %u\n", stats.dwForwDatagrams );
+ trace( " dwInUnknownProtos: %u\n", stats.dwInUnknownProtos );
+ trace( " dwInDiscards: %u\n", stats.dwInDiscards );
+ trace( " dwInDelivers: %u\n", stats.dwInDelivers );
+ trace( " dwOutRequests: %u\n", stats.dwOutRequests );
+ trace( " dwRoutingDiscards: %u\n", stats.dwRoutingDiscards );
+ trace( " dwOutDiscards: %u\n", stats.dwOutDiscards );
+ trace( " dwOutNoRoutes: %u\n", stats.dwOutNoRoutes );
+ trace( " dwReasmTimeout: %u\n", stats.dwReasmTimeout );
+ trace( " dwReasmReqds: %u\n", stats.dwReasmReqds );
+ trace( " dwReasmOks: %u\n", stats.dwReasmOks );
+ trace( " dwReasmFails: %u\n", stats.dwReasmFails );
+ trace( " dwFragOks: %u\n", stats.dwFragOks );
+ trace( " dwFragFails: %u\n", stats.dwFragFails );
+ trace( " dwFragCreates: %u\n", stats.dwFragCreates );
+ trace( " dwNumIf: %u\n", stats.dwNumIf );
+ trace( " dwNumAddr: %u\n", stats.dwNumAddr );
+ trace( " dwNumRoutes: %u\n", stats.dwNumRoutes );
+ }
+
+ apiReturn = pGetIpStatisticsEx(&stats, AF_INET6);
+ ok(apiReturn == NO_ERROR, "GetIpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "IP Ex stats:\n" );
+ trace( " dwForwarding: %u\n", U(stats).dwForwarding );
+ trace( " dwDefaultTTL: %u\n", stats.dwDefaultTTL );
+ trace( " dwInReceives: %u\n", stats.dwInReceives );
+ trace( " dwInHdrErrors: %u\n", stats.dwInHdrErrors );
+ trace( " dwInAddrErrors: %u\n", stats.dwInAddrErrors );
+ trace( " dwForwDatagrams: %u\n", stats.dwForwDatagrams );
+ trace( " dwInUnknownProtos: %u\n", stats.dwInUnknownProtos );
+ trace( " dwInDiscards: %u\n", stats.dwInDiscards );
+ trace( " dwInDelivers: %u\n", stats.dwInDelivers );
+ trace( " dwOutRequests: %u\n", stats.dwOutRequests );
+ trace( " dwRoutingDiscards: %u\n", stats.dwRoutingDiscards );
+ trace( " dwOutDiscards: %u\n", stats.dwOutDiscards );
+ trace( " dwOutNoRoutes: %u\n", stats.dwOutNoRoutes );
+ trace( " dwReasmTimeout: %u\n", stats.dwReasmTimeout );
+ trace( " dwReasmReqds: %u\n", stats.dwReasmReqds );
+ trace( " dwReasmOks: %u\n", stats.dwReasmOks );
+ trace( " dwReasmFails: %u\n", stats.dwReasmFails );
+ trace( " dwFragOks: %u\n", stats.dwFragOks );
+ trace( " dwFragFails: %u\n", stats.dwFragFails );
+ trace( " dwFragCreates: %u\n", stats.dwFragCreates );
+ trace( " dwNumIf: %u\n", stats.dwNumIf );
+ trace( " dwNumAddr: %u\n", stats.dwNumAddr );
+ trace( " dwNumRoutes: %u\n", stats.dwNumRoutes );
+ }
+}
+
+static void testGetTcpStatisticsEx(void)
+{
+ DWORD apiReturn;
+ MIB_TCPSTATS stats;
+
+ if (!pGetTcpStatisticsEx)
+ {
+ skip( "GetTcpStatisticsEx not available\n" );
+ return;
+ }
+
+ apiReturn = pGetTcpStatisticsEx(NULL, AF_INET);
+ ok(apiReturn == ERROR_INVALID_PARAMETER,
+ "GetTcpStatisticsEx(NULL, AF_INET); returned %d, expected ERROR_INVALID_PARAMETER\n", apiReturn);
+
+ apiReturn = pGetTcpStatisticsEx(&stats, AF_INET);
+ ok(apiReturn == NO_ERROR, "GetTcpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "TCP stats:\n" );
+ trace( " dwRtoAlgorithm: %u\n", U(stats).dwRtoAlgorithm );
+ trace( " dwRtoMin: %u\n", stats.dwRtoMin );
+ trace( " dwRtoMax: %u\n", stats.dwRtoMax );
+ trace( " dwMaxConn: %u\n", stats.dwMaxConn );
+ trace( " dwActiveOpens: %u\n", stats.dwActiveOpens );
+ trace( " dwPassiveOpens: %u\n", stats.dwPassiveOpens );
+ trace( " dwAttemptFails: %u\n", stats.dwAttemptFails );
+ trace( " dwEstabResets: %u\n", stats.dwEstabResets );
+ trace( " dwCurrEstab: %u\n", stats.dwCurrEstab );
+ trace( " dwInSegs: %u\n", stats.dwInSegs );
+ trace( " dwOutSegs: %u\n", stats.dwOutSegs );
+ trace( " dwRetransSegs: %u\n", stats.dwRetransSegs );
+ trace( " dwInErrs: %u\n", stats.dwInErrs );
+ trace( " dwOutRsts: %u\n", stats.dwOutRsts );
+ trace( " dwNumConns: %u\n", stats.dwNumConns );
+ }
+
+ apiReturn = pGetTcpStatisticsEx(&stats, AF_INET6);
+ ok(apiReturn == NO_ERROR, "GetTcpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "TCP stats:\n" );
+ trace( " dwRtoAlgorithm: %u\n", U(stats).dwRtoAlgorithm );
+ trace( " dwRtoMin: %u\n", stats.dwRtoMin );
+ trace( " dwRtoMax: %u\n", stats.dwRtoMax );
+ trace( " dwMaxConn: %u\n", stats.dwMaxConn );
+ trace( " dwActiveOpens: %u\n", stats.dwActiveOpens );
+ trace( " dwPassiveOpens: %u\n", stats.dwPassiveOpens );
+ trace( " dwAttemptFails: %u\n", stats.dwAttemptFails );
+ trace( " dwEstabResets: %u\n", stats.dwEstabResets );
+ trace( " dwCurrEstab: %u\n", stats.dwCurrEstab );
+ trace( " dwInSegs: %u\n", stats.dwInSegs );
+ trace( " dwOutSegs: %u\n", stats.dwOutSegs );
+ trace( " dwRetransSegs: %u\n", stats.dwRetransSegs );
+ trace( " dwInErrs: %u\n", stats.dwInErrs );
+ trace( " dwOutRsts: %u\n", stats.dwOutRsts );
+ trace( " dwNumConns: %u\n", stats.dwNumConns );
+ }
+}
+
+static void testGetUdpStatisticsEx(void)
+{
+ DWORD apiReturn;
+ MIB_UDPSTATS stats;
+
+ if (!pGetUdpStatisticsEx)
+ {
+ skip( "GetUdpStatisticsEx not available\n" );
+ return;
+ }
+
+ apiReturn = pGetUdpStatisticsEx(NULL, AF_INET);
+ ok(apiReturn == ERROR_INVALID_PARAMETER,
+ "GetUdpStatisticsEx(NULL, AF_INET); returned %d, expected ERROR_INVALID_PARAMETER\n", apiReturn);
+
+ apiReturn = pGetUdpStatisticsEx(&stats, AF_INET);
+ ok(apiReturn == NO_ERROR, "GetUdpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "UDP stats:\n" );
+ trace( " dwInDatagrams: %u\n", stats.dwInDatagrams );
+ trace( " dwNoPorts: %u\n", stats.dwNoPorts );
+ trace( " dwInErrors: %u\n", stats.dwInErrors );
+ trace( " dwOutDatagrams: %u\n", stats.dwOutDatagrams );
+ trace( " dwNumAddrs: %u\n", stats.dwNumAddrs );
+ }
+
+ apiReturn = pGetUdpStatisticsEx(&stats, AF_INET6);
+ ok(apiReturn == NO_ERROR, "GetUdpStatisticsEx returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "UDP stats:\n" );
+ trace( " dwInDatagrams: %u\n", stats.dwInDatagrams );
+ trace( " dwNoPorts: %u\n", stats.dwNoPorts );
+ trace( " dwInErrors: %u\n", stats.dwInErrors );
+ trace( " dwOutDatagrams: %u\n", stats.dwOutDatagrams );
+ trace( " dwNumAddrs: %u\n", stats.dwNumAddrs );
+ }
+}
+
static void testGetTcpTable(void)
{
if (pGetTcpTable) {
@@ -636,6 +863,10 @@ static void testWinNT4Functions(void)
testGetIpStatistics();
testGetTcpStatistics();
testGetUdpStatistics();
+ testGetIcmpStatisticsEx();
+ testGetIpStatisticsEx();
+ testGetTcpStatisticsEx();
+ testGetUdpStatisticsEx();
testGetTcpTable();
testGetUdpTable();
testSetTcpEntry();
diff --git a/include/ipmib.h b/include/ipmib.h
index 5bd24d6..bc42c90 100644
--- a/include/ipmib.h
+++ b/include/ipmib.h
@@ -192,4 +192,17 @@ typedef struct _MIB_ICMP
MIBICMPINFO stats;
} MIB_ICMP, *PMIB_ICMP;
+typedef struct _MIBICMPSTATS_EX
+{
+ DWORD dwMsgs;
+ DWORD dwErrors;
+ DWORD rgdwTypeCount[256];
+} MIBICMPSTATS_EX, *PMIBICMPSTATS_EX;
+
+typedef struct _MIB_ICMP_EX
+{
+ MIBICMPSTATS_EX icmpInStats;
+ MIBICMPSTATS_EX icmpOutStats;
+} MIB_ICMP_EX, *PMIB_ICMP_EX;
+
#endif /* __WINE_IPMIB_H */
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list