[IPHLPAPI_APITEST] Test failure fixes (#8214)

- liCreateTimestamp isn't set in TCP tables on several Windows versions. If it isn't, then we can't compare it to the current system time; so don't.
- GetInterfaceName had some test failures unique to Vista, guard them.
- icmp: Accept either ERROR_INVALID_HANDLE  or ERROR_INVALID_PARAMETER as a last error in a couple tests.
This commit is contained in:
Carl J. Bialorucki 2025-07-04 19:14:24 -06:00 committed by GitHub
parent ea9e2812c6
commit 410db43f20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 51 additions and 34 deletions

View file

@ -273,9 +273,13 @@ START_TEST(GetExtendedTcpTable)
{
ok(TcpTableOwnerMod->table[i].dwOwningPid == Pid, "Invalid owner\n");
// liCreateTimestamp may not be populated on Vista, 7, and 8.1
if (TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart != 0)
{
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart >= CreationTime.QuadPart, "Invalid time\n");
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart <= CreationTime.QuadPart + 60000000000LL, "Invalid time\n");
}
}
HeapFree(GetProcessHeap(), 0, TcpTableOwnerMod);
}
@ -332,9 +336,13 @@ START_TEST(GetExtendedTcpTable)
{
ok(TcpTableOwnerMod->table[i].dwOwningPid == Pid, "Invalid owner\n");
// liCreateTimestamp may not be populated on Vista, 7, and 8.1
if (TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart != 0)
{
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart >= CreationTime.QuadPart, "Invalid time\n");
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart <= CreationTime.QuadPart + 60000000000LL, "Invalid time\n");
}
}
HeapFree(GetProcessHeap(), 0, TcpTableOwnerMod);
}

View file

@ -38,9 +38,9 @@ test_NhGetInterfaceNameFromGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
StartSeh()
ApiReturn = pNhGetInterfaceNameFromGuid(NULL, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
EndSeh(((GetVersion() & 0xFF) >= 6) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
EndSeh(GetNTVersion() >= _WIN32_WINNT_VISTA ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : ERROR_SUCCESS);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : ERROR_SUCCESS);
ok(Error == 0xbeeffeed,
"GetLastError() returned %ld, expected 0xbeeffeed\n",
Error);
@ -55,8 +55,8 @@ test_NhGetInterfaceNameFromGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ApiReturn = pNhGetInterfaceNameFromGuid(&AdapterGUID, NULL, &ulOutBufLen, par1, par2);
Error = GetLastError();
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : ERROR_SUCCESS);
ok_long(Error, ((GetVersion() & 0xFF) >= 6) ? ERROR_SUCCESS : 0xbeeffeed);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : ERROR_SUCCESS);
ok_long(Error, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_SUCCESS : 0xbeeffeed);
ok(ulOutBufLen > 0,
"ulOutBufLen is %ld, expected > 0\n",
ulOutBufLen);
@ -93,7 +93,7 @@ test_NhGetInterfaceNameFromGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ok(ApiReturn == ERROR_SUCCESS,
"ApiReturn returned %ld, expected ERROR_SUCCESS\n",
ApiReturn);
ok_long(Error, ((GetVersion() & 0xFF) >= 6) ? 0 : 0xbeeffeed);
ok_long(Error, GetNTVersion() >= _WIN32_WINNT_VISTA ? 0 : 0xbeeffeed);
ok(ulOutBufLen > 0,
"ulOutBufLen is %ld, expected > 0\n",
ulOutBufLen);
@ -111,12 +111,9 @@ test_NhGetInterfaceNameFromGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ApiReturn = pNhGetInterfaceNameFromGuid((PVOID)&UniqueGUID, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : ERROR_NOT_FOUND);
#ifdef _M_AMD64
ok_long(Error, ERROR_FILE_NOT_FOUND);
#else
ok_long(Error, 0);
#endif
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : ERROR_NOT_FOUND);
// Windows 8+ succeeds on x64, Server 2003 x86 returns ERROR_FILE_NOT_FOUND
ok(Error == ERROR_FILE_NOT_FOUND || Error == ERROR_SUCCESS, "Unexpected error. (0x%lX)\n", Error);
ok(ulOutBufLen == sizeof(Name),
"ulOutBufLen is %ld, expected = sizeof(Name)\n",
ulOutBufLen);
@ -129,9 +126,12 @@ test_NhGetInterfaceNameFromGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ApiReturn = pNhGetInterfaceNameFromGuid(&AdapterGUID, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_NOT_ENOUGH_MEMORY : ERROR_INSUFFICIENT_BUFFER);
ok_long(Error, ((GetVersion() & 0xFF) >= 6) ? 0 : 0xbeeffeed);
ok_long(ulOutBufLen, MAX_INTERFACE_NAME_LEN * 2 + ((GetVersion() & 0xFF) >= 6 ? 2 : 0));
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_NOT_ENOUGH_MEMORY : ERROR_INSUFFICIENT_BUFFER);
ok_long(Error, GetNTVersion() >= _WIN32_WINNT_VISTA ? 0 : 0xbeeffeed);
if (GetNTVersion() != _WIN32_WINNT_VISTA)
ok_long(ulOutBufLen, MAX_INTERFACE_NAME_LEN * 2 + (GetNTVersion() >= _WIN32_WINNT_VISTA ? 2 : 0));
else
ok_long(ulOutBufLen, 0);
ok_wstr(L"", Name);
}
@ -158,9 +158,9 @@ test_NhGetInterfaceNameFromDeviceGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
StartSeh()
ApiReturn = pNhGetInterfaceNameFromDeviceGuid(NULL, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
EndSeh(((GetVersion() & 0xFF) >= 6) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
EndSeh(GetNTVersion() >= _WIN32_WINNT_VISTA ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : 0);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : 0);
ok(Error == 0xbeeffeed,
"GetLastError() returned %ld, expected ERROR_SUCCESS\n",
Error);
@ -177,10 +177,10 @@ test_NhGetInterfaceNameFromDeviceGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
StartSeh()
ApiReturn = pNhGetInterfaceNameFromDeviceGuid(&AdapterGUID, NULL, &ulOutBufLen, par1, par2);
Error = GetLastError();
EndSeh(((GetVersion() & 0xFF) >= 6) ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
EndSeh(GetNTVersion() >= _WIN32_WINNT_VISTA ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION);
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : 0);
ok_long(Error, ((GetVersion() & 0xFF) >= 6) ? ERROR_SUCCESS : 0xbeeffeed);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : 0);
ok_long(Error, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_SUCCESS : 0xbeeffeed);
ok(ulOutBufLen > 0,
"ulOutBufLen is %ld, expected > 0\n",
ulOutBufLen);
@ -233,7 +233,7 @@ test_NhGetInterfaceNameFromDeviceGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ApiReturn = pNhGetInterfaceNameFromDeviceGuid((PVOID)&UniqueGUID, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_INVALID_PARAMETER : ERROR_NOT_FOUND);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_INVALID_PARAMETER : ERROR_NOT_FOUND);
ok(Error == ERROR_SUCCESS,
"GetLastError() returned %ld, expected ERROR_SUCCESS\n",
Error);
@ -249,11 +249,14 @@ test_NhGetInterfaceNameFromDeviceGuid(GUID AdapterGUID, DWORD par1, DWORD par2)
ApiReturn = pNhGetInterfaceNameFromDeviceGuid(&AdapterGUID, &Name, &ulOutBufLen, par1, par2);
Error = GetLastError();
ok_long(ApiReturn, ((GetVersion() & 0xFF) >= 6) ? ERROR_NOT_ENOUGH_MEMORY : ERROR_INSUFFICIENT_BUFFER);
ok_long(ApiReturn, GetNTVersion() >= _WIN32_WINNT_VISTA ? ERROR_NOT_ENOUGH_MEMORY : ERROR_INSUFFICIENT_BUFFER);
ok(Error == ERROR_SUCCESS,
"GetLastError() returned %ld, expected ERROR_SUCCESS\n",
Error);
ok_long(ulOutBufLen, MAX_INTERFACE_NAME_LEN * 2 + (((GetVersion() & 0xFF) >= 6) ? 2 : 0));
if (GetNTVersion() != _WIN32_WINNT_VISTA)
ok_long(ulOutBufLen, MAX_INTERFACE_NAME_LEN * 2 + (GetNTVersion() >= _WIN32_WINNT_VISTA ? 2 : 0));
else
ok_long(ulOutBufLen, 0);
ok_wstr(L"", Name);
}

View file

@ -187,9 +187,6 @@ test_GetNetworkParams(VOID)
HeapFree(GetProcessHeap(), 0, FixedInfo);
skip("FixedInfo->DomainName is NULL. Can't proceed\n");
}
if(OrigDhcpDomainNameExists)
ok(strcmp(FixedInfo->DomainName, OrigDhcpDomainName) == 0, "FixedInfo->DomainName is wrong '%s' != '%s'\n", FixedInfo->DomainName, OrigDhcpDomainName);
else
ok(strcmp(FixedInfo->DomainName, OrigDomainName) == 0, "FixedInfo->DomainName is wrong '%s' != '%s'\n", FixedInfo->DomainName, OrigDomainName);
if (!OrigDhcpHostnameExists)
{

View file

@ -112,8 +112,12 @@ START_TEST(GetOwnerModuleFromTcpEntry)
ok(TcpTableOwnerMod->table[i].dwOwningPid == Pid, "Invalid owner\n");
// liCreateTimestamp may not be populated on Vista, 7, and 8.1
if (TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart != 0)
{
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart >= CreationTime.QuadPart, "Invalid time\n");
ok(TcpTableOwnerMod->table[i].liCreateTimestamp.QuadPart <= CreationTime.QuadPart + 60000000000LL, "Invalid time\n");
}
if (GetOwnerModuleFromTcpEntry(&TcpTableOwnerMod->table[i], TCPIP_OWNER_MODULE_INFO_BASIC, BasicInfo, &Size) == ERROR_INSUFFICIENT_BUFFER)
{

View file

@ -52,6 +52,7 @@ test_IcmpCloseHandle(void)
{
HANDLE hIcmp;
BOOL bRet;
DWORD LastError;
SetLastError(0xDEADBEEF);
hIcmp = IcmpCreateFile();
@ -73,13 +74,17 @@ test_IcmpCloseHandle(void)
SetLastError(0xDEADBEEF);
bRet = IcmpCloseHandle(hIcmp);
ok(!bRet, "IcmpCloseHandle succeeded unexpectedly\n");
ok_err(ERROR_INVALID_HANDLE);
LastError = GetLastError();
ok(LastError == ERROR_INVALID_HANDLE || LastError == ERROR_INVALID_PARAMETER,
"Unexpected last error (0x%lX)\n", LastError);
hIcmp = NULL;
SetLastError(0xDEADBEEF);
bRet = IcmpCloseHandle(hIcmp);
ok(!bRet, "IcmpCloseHandle succeeded unexpectedly\n");
ok_err(ERROR_INVALID_HANDLE);
LastError = GetLastError();
ok(LastError == ERROR_INVALID_HANDLE || LastError == ERROR_INVALID_PARAMETER,
"Unexpected last error (0x%lX)\n", LastError);
}
static