[KERNEL32_APITEST] Add a few tests for GetVolumeInformation that were used to fix...
authorPierre Schweitzer <pierre@reactos.org>
Sun, 15 Oct 2017 08:44:50 +0000 (10:44 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Sun, 15 Oct 2017 08:44:50 +0000 (10:44 +0200)
modules/rostests/apitests/kernel32/CMakeLists.txt
modules/rostests/apitests/kernel32/GetVolumeInformation.c [new file with mode: 0644]
modules/rostests/apitests/kernel32/testlist.c

index 32debf9..86107d7 100644 (file)
@@ -13,6 +13,7 @@ list(APPEND SOURCE
     GetCurrentDirectory.c
     GetDriveType.c
     GetModuleFileName.c
+    GetVolumeInformation.c
     interlck.c
     IsDBCSLeadByteEx.c
     LoadLibraryExW.c
diff --git a/modules/rostests/apitests/kernel32/GetVolumeInformation.c b/modules/rostests/apitests/kernel32/GetVolumeInformation.c
new file mode 100644 (file)
index 0000000..7d2cf8b
--- /dev/null
@@ -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();
+}
index 72e3ef9..f00b9e9 100644 (file)
@@ -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 },