iphlpapi/tests: Add tests for GetUdp6Table().

Signed-off-by: Guillaume Charifi <guillaume.charifi@sfr.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Guillaume Charifi 2018-08-27 11:08:38 +02:00 committed by Alexandre Julliard
parent 88e44332fe
commit d292c4713f
1 changed files with 55 additions and 0 deletions

View File

@ -74,6 +74,7 @@ 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 *pGetUdp6Table)(PMIB_UDP6TABLE,PDWORD,BOOL);
static DWORD (WINAPI *pGetPerAdapterInfo)(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
static DWORD (WINAPI *pGetAdaptersAddresses)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
static DWORD (WINAPI *pGetUnicastIpAddressEntry)(MIB_UNICASTIPADDRESS_ROW*);
@ -129,6 +130,7 @@ static void loadIPHlpApi(void)
pGetUdpStatisticsEx = (void *)GetProcAddress(hLibrary, "GetUdpStatisticsEx");
pGetTcpTable = (void *)GetProcAddress(hLibrary, "GetTcpTable");
pGetUdpTable = (void *)GetProcAddress(hLibrary, "GetUdpTable");
pGetUdp6Table = (void *)GetProcAddress(hLibrary, "GetUdp6Table");
pGetPerAdapterInfo = (void *)GetProcAddress(hLibrary, "GetPerAdapterInfo");
pGetAdaptersAddresses = (void *)GetProcAddress(hLibrary, "GetAdaptersAddresses");
pGetUnicastIpAddressEntry = (void *)GetProcAddress(hLibrary, "GetUnicastIpAddressEntry");
@ -171,6 +173,23 @@ static const char *ntoa( DWORD ip )
return buffer;
}
static const char *ntoa6( IN6_ADDR *ip )
{
static char buffer[40];
char *buf = buffer;
unsigned short *p = ip->u.Word;
unsigned int i = 0;
while (i < 8)
{
if (i > 0)
*buf++ = ':';
buf += sprintf( buf, "%x", htons(p[i]) );
i++;
}
return buffer;
}
/*
still-to-be-tested 98-only functions:
GetUniDirectionalAdapterInfo
@ -2220,6 +2239,41 @@ static void test_ConvertLengthToIpv4Mask(void)
ok( mask == INADDR_NONE, "ConvertLengthToIpv4Mask mask value 0x%08x, expected 0x%08x\n", mask, INADDR_NONE );
}
static void test_GetUdp6Table(void)
{
if (pGetUdp6Table) {
DWORD apiReturn;
ULONG dwSize = 0;
apiReturn = pGetUdp6Table(NULL, &dwSize, FALSE);
if (apiReturn == ERROR_NOT_SUPPORTED) {
skip("GetUdp6Table is not supported\n");
return;
}
ok(apiReturn == ERROR_INSUFFICIENT_BUFFER,
"GetUdp6Table(NULL, &dwSize, FALSE) returned %d, expected ERROR_INSUFFICIENT_BUFFER\n",
apiReturn);
if (apiReturn == ERROR_INSUFFICIENT_BUFFER) {
PMIB_UDP6TABLE buf = HeapAlloc(GetProcessHeap(), 0, dwSize);
apiReturn = pGetUdp6Table(buf, &dwSize, FALSE);
ok(apiReturn == NO_ERROR,
"GetUdp6Table(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n",
apiReturn);
if (apiReturn == NO_ERROR && winetest_debug > 1)
{
DWORD i;
trace( "UDP6 table: %u entries\n", buf->dwNumEntries );
for (i = 0; i < buf->dwNumEntries; i++)
trace( "%u: %s%%%u:%u\n",
i, ntoa6(&buf->table[i].dwLocalAddr), ntohs(buf->table[i].dwLocalScopeId), ntohs(buf->table[i].dwLocalPort) );
}
HeapFree(GetProcessHeap(), 0, buf);
}
}
}
START_TEST(iphlpapi)
{
@ -2248,6 +2302,7 @@ START_TEST(iphlpapi)
test_GetUnicastIpAddressEntry();
test_GetUnicastIpAddressTable();
test_ConvertLengthToIpv4Mask();
test_GetUdp6Table();
freeIPHlpApi();
}
}