mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 18:31:26 +00:00
[KERNEL32_APITEST] Add a few tests for GetVolumeInformation that were used to fix previous issues
This commit is contained in:
parent
5bfc68cc14
commit
eb05356a26
3 changed files with 130 additions and 0 deletions
|
@ -13,6 +13,7 @@ list(APPEND SOURCE
|
|||
GetCurrentDirectory.c
|
||||
GetDriveType.c
|
||||
GetModuleFileName.c
|
||||
GetVolumeInformation.c
|
||||
interlck.c
|
||||
IsDBCSLeadByteEx.c
|
||||
LoadLibraryExW.c
|
||||
|
|
127
modules/rostests/apitests/kernel32/GetVolumeInformation.c
Normal file
127
modules/rostests/apitests/kernel32/GetVolumeInformation.c
Normal file
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
||||
* PURPOSE: Tests for GetVolumeInformation
|
||||
* PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#include <stdio.h>
|
||||
|
||||
static VOID
|
||||
TestGetVolumeInformationA(VOID)
|
||||
{
|
||||
BOOL Ret;
|
||||
CHAR Outbuf[MAX_PATH];
|
||||
DWORD i, MCL, Flags, Len;
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, MAX_PATH);
|
||||
ok(Ret != FALSE, "GetVolumeInformationA failed: %ld\n", GetLastError());
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not null terminated!\n");
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Len = i;
|
||||
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len + 1);
|
||||
ok(Ret != FALSE, "GetVolumeInformationA failed: %ld\n", GetLastError());
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not null terminated!\n");
|
||||
ok(i == Len, "String was truncated\n");
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Len = i;
|
||||
SetLastError(0xdeadbeef);
|
||||
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len);
|
||||
ok(Ret != TRUE, "GetVolumeInformationA succeed\n");
|
||||
ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH error, got %ld\n", GetLastError());
|
||||
ok(Outbuf[0] != 0xAA, "Output buffer was not written to\n");
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i == MAX_PATH, "String was null terminated!\n");
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] != 0xAA)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not written to!\n");
|
||||
ok(i < Len, "Buffer has been overruned\n");
|
||||
}
|
||||
|
||||
static VOID
|
||||
TestGetVolumeInformationW(VOID)
|
||||
{
|
||||
BOOL Ret;
|
||||
WCHAR Outbuf[MAX_PATH];
|
||||
DWORD i, MCL, Flags, Len;
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, MAX_PATH);
|
||||
ok(Ret != FALSE, "GetVolumeInformationW failed: %ld\n", GetLastError());
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not null terminated!\n");
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Len = i;
|
||||
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len + 1);
|
||||
ok(Ret != FALSE, "GetVolumeInformationW failed: %ld\n", GetLastError());
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not null terminated!\n");
|
||||
ok(i == Len, "String was truncated\n");
|
||||
|
||||
memset(Outbuf, 0xAA, MAX_PATH);
|
||||
Len = i;
|
||||
SetLastError(0xdeadbeef);
|
||||
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len);
|
||||
ok(Ret != TRUE, "GetVolumeInformationW succeed\n");
|
||||
ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH error, got %ld\n", GetLastError());
|
||||
ok(Outbuf[0] != 0xAA, "Output buffer was not written to\n");
|
||||
for (i = 0; i < MAX_PATH; ++i)
|
||||
{
|
||||
if (Outbuf[i] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
ok(i != MAX_PATH, "String was not null terminated!\n");
|
||||
ok(i >= Len, "Buffer has not been overruned\n");
|
||||
}
|
||||
|
||||
START_TEST(GetVolumeInformation)
|
||||
{
|
||||
TestGetVolumeInformationW();
|
||||
TestGetVolumeInformationA();
|
||||
}
|
|
@ -14,6 +14,7 @@ extern void func_GetComputerNameEx(void);
|
|||
extern void func_GetCurrentDirectory(void);
|
||||
extern void func_GetDriveType(void);
|
||||
extern void func_GetModuleFileName(void);
|
||||
extern void func_GetVolumeInformation(void);
|
||||
extern void func_interlck(void);
|
||||
extern void func_IsDBCSLeadByteEx(void);
|
||||
extern void func_LoadLibraryExW(void);
|
||||
|
@ -42,6 +43,7 @@ const struct test winetest_testlist[] =
|
|||
{ "GetCurrentDirectory", func_GetCurrentDirectory },
|
||||
{ "GetDriveType", func_GetDriveType },
|
||||
{ "GetModuleFileName", func_GetModuleFileName },
|
||||
{ "GetVolumeInformation", func_GetVolumeInformation },
|
||||
{ "interlck", func_interlck },
|
||||
{ "IsDBCSLeadByteEx", func_IsDBCSLeadByteEx },
|
||||
{ "LoadLibraryExW", func_LoadLibraryExW },
|
||||
|
|
Loading…
Reference in a new issue