mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 10:46:58 +00:00
[KERNEL32_APITEST] Improve SetComputerNameExW testcase (#1661)
Improve SetComputerNameExW testcase to check invalid characters. CORE-16122
This commit is contained in:
parent
0c7dc4e3e1
commit
c5246d68f5
1 changed files with 173 additions and 28 deletions
|
@ -37,31 +37,16 @@ static HKEY OpenComputerNameKey(void)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
START_TEST(SetComputerNameExW)
|
||||
static void DoTestComputerName(HKEY hKeyHN, HKEY hKeyCN, LPCWSTR pszNewName, BOOL bValid)
|
||||
{
|
||||
static const WCHAR szNewName[] = L"SRVROSTEST";
|
||||
LONG Error;
|
||||
BOOL ret;
|
||||
HKEY hKeyHN, hKeyCN;
|
||||
DWORD cbData;
|
||||
WCHAR szNVHostNameOld[MAX_PATH], szNVHostNameNew[MAX_PATH];
|
||||
WCHAR szHostNameOld[MAX_PATH], szHostNameNew[MAX_PATH];
|
||||
WCHAR szComputerNameOld[MAX_PATH], szComputerNameNew[MAX_PATH];
|
||||
|
||||
/* Open keys */
|
||||
hKeyHN = OpenHostNameKey();
|
||||
ok(hKeyHN != NULL, "hKeyHN is NULL\n");
|
||||
hKeyCN = OpenComputerNameKey();
|
||||
ok(hKeyCN != NULL, "hKeyCN is NULL\n");
|
||||
if (!hKeyHN || !hKeyCN)
|
||||
{
|
||||
if (hKeyHN)
|
||||
RegCloseKey(hKeyHN);
|
||||
if (hKeyCN)
|
||||
RegCloseKey(hKeyCN);
|
||||
skip("Unable to open keys. Missing Admin rights?\n");
|
||||
return;
|
||||
}
|
||||
trace("Testing '%S':\n", pszNewName);
|
||||
|
||||
/* Get Old NV Hostname */
|
||||
szNVHostNameOld[0] = UNICODE_NULL;
|
||||
|
@ -85,35 +70,62 @@ START_TEST(SetComputerNameExW)
|
|||
ok(szComputerNameOld[0], "szComputerNameOld is empty\n");
|
||||
|
||||
/* Change the value */
|
||||
ret = SetComputerNameExW(ComputerNamePhysicalDnsHostname, szNewName);
|
||||
ok_int(ret, TRUE);
|
||||
SetLastError(0xDEADFACE);
|
||||
ret = SetComputerNameExW(ComputerNamePhysicalDnsHostname, pszNewName);
|
||||
ok_int(ret, bValid);
|
||||
Error = GetLastError();
|
||||
if (bValid)
|
||||
ok_long(Error, ERROR_SUCCESS);
|
||||
else
|
||||
ok_long(Error, ERROR_INVALID_PARAMETER);
|
||||
|
||||
/* Get New NV Hostname */
|
||||
szNVHostNameNew[0] = UNICODE_NULL;
|
||||
cbData = sizeof(szNVHostNameNew);
|
||||
Error = RegQueryValueExW(hKeyHN, L"NV Hostname", NULL, NULL, (LPBYTE)szNVHostNameNew, &cbData);
|
||||
ok_long(Error, ERROR_SUCCESS);
|
||||
ok(szNVHostNameNew[0], "szNVHostNameNew is empty\n");
|
||||
ok(lstrcmpW(szNVHostNameNew, szNewName) == 0,
|
||||
"szNVHostNameNew '%S' should be szNewName '%S'\n", szNVHostNameNew, szNewName);
|
||||
if (bValid)
|
||||
{
|
||||
ok(szNVHostNameNew[0], "szNVHostNameNew is empty\n");
|
||||
ok(lstrcmpW(szNVHostNameNew, pszNewName) == 0,
|
||||
"szNVHostNameNew '%S' should be pszNewName '%S'\n", szNVHostNameNew, pszNewName);
|
||||
}
|
||||
|
||||
/* Get New Hostname */
|
||||
szHostNameNew[0] = UNICODE_NULL;
|
||||
cbData = sizeof(szHostNameNew);
|
||||
Error = RegQueryValueExW(hKeyHN, L"Hostname", NULL, NULL, (LPBYTE)szHostNameNew, &cbData);
|
||||
ok_long(Error, ERROR_SUCCESS);
|
||||
ok(szHostNameNew[0], "szHostNameNew is empty\n");
|
||||
ok(lstrcmpW(szHostNameNew, szHostNameOld) == 0,
|
||||
"szHostNameNew '%S' should be szHostNameOld '%S'\n", szHostNameNew, szHostNameOld);
|
||||
if (bValid)
|
||||
{
|
||||
ok(szHostNameNew[0], "szHostNameNew is empty\n");
|
||||
ok(lstrcmpW(szHostNameNew, szHostNameOld) == 0,
|
||||
"szHostNameNew '%S' should be szHostNameOld '%S'\n", szHostNameNew, szHostNameOld);
|
||||
}
|
||||
|
||||
/* Get New Computer Name */
|
||||
szComputerNameNew[0] = UNICODE_NULL;
|
||||
cbData = sizeof(szComputerNameNew);
|
||||
Error = RegQueryValueExW(hKeyCN, L"ComputerName", NULL, NULL, (LPBYTE)szComputerNameNew, &cbData);
|
||||
ok_long(Error, ERROR_SUCCESS);
|
||||
ok(szComputerNameNew[0], "szComputerNameNew is empty\n");
|
||||
ok(lstrcmpW(szComputerNameNew, szNewName) == 0,
|
||||
"szComputerNameNew '%S' should be szNewName '%S'\n", szComputerNameNew, szNewName);
|
||||
if (bValid)
|
||||
{
|
||||
ok(szComputerNameNew[0], "szComputerNameNew is empty\n");
|
||||
if (lstrlenW(pszNewName) > MAX_COMPUTERNAME_LENGTH)
|
||||
{
|
||||
WCHAR szTruncatedNewName[MAX_COMPUTERNAME_LENGTH + 1];
|
||||
lstrcpynW(szTruncatedNewName, pszNewName, ARRAYSIZE(szTruncatedNewName));
|
||||
ok(lstrcmpiW(szComputerNameNew, szTruncatedNewName) == 0,
|
||||
"szComputerNameNew '%S' should be szTruncatedNewName '%S'\n",
|
||||
szComputerNameNew, szTruncatedNewName);
|
||||
}
|
||||
else
|
||||
{
|
||||
ok(lstrcmpiW(szComputerNameNew, pszNewName) == 0,
|
||||
"szComputerNameNew '%S' should be pszNewName '%S'\n",
|
||||
szComputerNameNew, pszNewName);
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore the registry values */
|
||||
cbData = (lstrlenW(szNVHostNameOld) + 1) * sizeof(WCHAR);
|
||||
|
@ -127,6 +139,139 @@ START_TEST(SetComputerNameExW)
|
|||
cbData = (lstrlenW(szComputerNameOld) + 1) * sizeof(WCHAR);
|
||||
Error = RegSetValueExW(hKeyCN, L"ComputerName", 0, REG_SZ, (LPBYTE)szComputerNameOld, cbData);
|
||||
ok_long(Error, ERROR_SUCCESS);
|
||||
}
|
||||
|
||||
START_TEST(SetComputerNameExW)
|
||||
{
|
||||
HKEY hKeyHN, hKeyCN;
|
||||
static const WCHAR ValidSymbols[] = L"-_";
|
||||
static const WCHAR InvalidSymbols[] = L"\"/\\[]:|<>+=;,?";
|
||||
WCHAR szName[32];
|
||||
INT i, cchValidSymbols, cchInvalidSymbols;
|
||||
LONG Error;
|
||||
|
||||
/* Open keys */
|
||||
hKeyHN = OpenHostNameKey();
|
||||
ok(hKeyHN != NULL, "hKeyHN is NULL\n");
|
||||
hKeyCN = OpenComputerNameKey();
|
||||
ok(hKeyCN != NULL, "hKeyCN is NULL\n");
|
||||
if (!hKeyHN || !hKeyCN)
|
||||
{
|
||||
if (hKeyHN)
|
||||
RegCloseKey(hKeyHN);
|
||||
if (hKeyCN)
|
||||
RegCloseKey(hKeyCN);
|
||||
skip("Unable to open keys. Missing Admin rights?\n");
|
||||
return;
|
||||
}
|
||||
|
||||
cchValidSymbols = lstrlenW(ValidSymbols);
|
||||
cchInvalidSymbols = lstrlenW(InvalidSymbols);
|
||||
|
||||
/* Test names */
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"SRVROSTEST", TRUE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"SrvRosTest", TRUE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a", TRUE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A", TRUE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1", FALSE); // numeric-only
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"@", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L".", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L" ", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\t", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\b", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L" a", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L" A", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L" 1", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\ta", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\tA", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\t1", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\ba", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\bA", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"\b1", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a ", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A ", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1 ", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a\t", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A\t", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1\t", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a\b", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A\b", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1\b", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a c", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A C", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1 c", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a\tc", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A\tC", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1\tc", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"a\bc", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"A\bC", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"1\bc", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, ValidSymbols, TRUE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, InvalidSymbols, FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"123456", FALSE); // numeric-only
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"123.456", FALSE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"123X456", TRUE);
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"123X.456", FALSE);
|
||||
|
||||
DoTestComputerName(hKeyHN, hKeyCN, L"ThisIsLongLongComputerName", TRUE);
|
||||
|
||||
for (i = 0; i < cchValidSymbols; ++i)
|
||||
{
|
||||
szName[0] = ValidSymbols[i];
|
||||
szName[1] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, TRUE);
|
||||
}
|
||||
|
||||
for (i = 0; i < cchValidSymbols; ++i)
|
||||
{
|
||||
szName[0] = L'a';
|
||||
szName[1] = ValidSymbols[i];
|
||||
szName[2] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, TRUE);
|
||||
}
|
||||
|
||||
for (i = 0; i < cchValidSymbols; ++i)
|
||||
{
|
||||
szName[0] = L'A';
|
||||
szName[1] = ValidSymbols[i];
|
||||
szName[2] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, TRUE);
|
||||
}
|
||||
|
||||
for (i = 0; i < cchValidSymbols; ++i)
|
||||
{
|
||||
szName[0] = L'1';
|
||||
szName[1] = ValidSymbols[i];
|
||||
szName[2] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, TRUE);
|
||||
}
|
||||
|
||||
for (i = 0; i < cchInvalidSymbols; ++i)
|
||||
{
|
||||
szName[0] = L'A';
|
||||
szName[1] = InvalidSymbols[i];
|
||||
szName[2] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, FALSE);
|
||||
}
|
||||
|
||||
for (i = 0; i < cchInvalidSymbols; ++i)
|
||||
{
|
||||
szName[0] = L'1';
|
||||
szName[1] = InvalidSymbols[i];
|
||||
szName[2] = UNICODE_NULL;
|
||||
DoTestComputerName(hKeyHN, hKeyCN, szName, FALSE);
|
||||
}
|
||||
|
||||
/* Close keys */
|
||||
Error = RegCloseKey(hKeyHN);
|
||||
|
|
Loading…
Reference in a new issue