Author: jgardou
Date: Mon Jul 11 19:31:34 2011
New Revision: 52642
URL:
http://svn.reactos.org/svn/reactos?rev=52642&view=rev
Log:
[APITESTS]
- add simple tests for NtFreeVirtualMemory
Added:
trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c (with props)
Modified:
trunk/rostests/apitests/ntdll/CMakeLists.txt
trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild
trunk/rostests/apitests/ntdll/testlist.c
Modified: trunk/rostests/apitests/ntdll/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/CMakeLists…
==============================================================================
--- trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/CMakeLists.txt [iso-8859-1] Mon Jul 11 19:31:34 2011
@@ -2,6 +2,7 @@
add_definitions(-D_DLL -D__USE_CRTIMP)
list(APPEND SOURCE
+ NtFreeVirtualMemory.c
RtlInitializeBitMap.c
ZwContinue.c
testlist.c)
Added: trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/NtFreeVirt…
==============================================================================
--- trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c (added)
+++ trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c [iso-8859-1] Mon Jul 11 19:31:34
2011
@@ -1,0 +1,118 @@
+#define WIN32_NO_STATUS
+#include <stdio.h>
+#include <wine/test.h>
+#include <ndk/ntndk.h>
+
+static void Test_NtFreeVirtualMemory(void)
+{
+ PVOID Buffer = NULL, Buffer2;
+ SIZE_T Length = PAGE_SIZE;
+ NTSTATUS Status;
+
+ Status = NtAllocateVirtualMemory(NtCurrentProcess(),
+ &Buffer,
+ 0,
+ &Length,
+ MEM_RESERVE,
+ PAGE_READWRITE);
+ ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n",
Status);
+ ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length);
+ ok(((ULONG_PTR)Buffer % PAGE_SIZE) == 0, "The buffer is not aligned to
PAGE_SIZE.\n");
+
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer,
+ &Length,
+ MEM_DECOMMIT);
+ ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory failed : 0x%08x\n",
Status);
+
+ /* Now try to free more than we got */
+ Length++;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer,
+ &Length,
+ MEM_DECOMMIT);
+ ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer,
+ &Length,
+ MEM_RELEASE);
+ ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+
+ /* Free out of bounds from the wrong origin */
+ Length = PAGE_SIZE;
+ Buffer2 = (PVOID)((ULONG_PTR)Buffer+1);
+
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_DECOMMIT);
+ ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+
+ Buffer2 = (PVOID)((ULONG_PTR)Buffer+1);
+ Length = PAGE_SIZE;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_RELEASE);
+ ok(Status == STATUS_UNABLE_TO_FREE_VM, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+
+ /* Same but in bounds */
+ Length = PAGE_SIZE - 1;
+ Buffer2 = (PVOID)((ULONG_PTR)Buffer+1);
+
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_DECOMMIT);
+ ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+ ok(Buffer2 == Buffer, "NtFreeVirtualMemory set wrong buffer.\n");
+ ok(Length == PAGE_SIZE, "NtFreeVirtualMemory did not round Length to
PAGE_SIZE.\n");
+
+ Buffer2 = (PVOID)((ULONG_PTR)Buffer+1);
+ Length = PAGE_SIZE-1;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_RELEASE);
+ ok(Status == STATUS_SUCCESS, "NtFreeVirtualMemory returned status :
0x%08x\n", Status);
+ ok(Buffer2 == Buffer, "NtFreeVirtualMemory set wrong buffer.\n");
+ ok(Length == PAGE_SIZE, "NtFreeVirtualMemory did not round Length to
PAGE_SIZE.\n");
+
+ /* Now allocate two pages and try to free them one after the other */
+ Length = 2*PAGE_SIZE;
+ Status = NtAllocateVirtualMemory(NtCurrentProcess(),
+ &Buffer,
+ 0,
+ &Length,
+ MEM_RESERVE,
+ PAGE_READWRITE);
+ ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n",
Status);
+ ok(Length == 2*PAGE_SIZE, "Length mismatch : 0x08x\n", Length);
+ ok(((ULONG_PTR)Buffer % PAGE_SIZE) == 0, "The buffer is not aligned to
PAGE_SIZE.\n");
+
+ Buffer2 = Buffer;
+ Length = PAGE_SIZE;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_RELEASE);
+ ok(NT_SUCCESS(Status), "NtAllocateVirtualMemory failed : 0x%08x\n",
Status);
+ ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length);
+ ok(Buffer2 == Buffer, "The buffer is not aligned to PAGE_SIZE.\n");
+
+ Buffer2 = (PVOID)((ULONG_PTR)Buffer+PAGE_SIZE);
+ Length = PAGE_SIZE;
+ Status = NtFreeVirtualMemory(NtCurrentProcess(),
+ &Buffer2,
+ &Length,
+ MEM_RELEASE);
+ ok(NT_SUCCESS(Status), "NtFreeVirtualMemory failed : 0x%08x\n", Status);
+ ok(Length == PAGE_SIZE, "Length mismatch : 0x08x\n", Length);
+ ok(Buffer2 == (PVOID)((ULONG_PTR)Buffer+PAGE_SIZE), "The buffer is not aligned
to PAGE_SIZE.\n");
+}
+
+START_TEST(NtFreeVirtualMemory)
+{
+ Test_NtFreeVirtualMemory();
+}
Propchange: trunk/rostests/apitests/ntdll/NtFreeVirtualMemory.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/ntdll_apit…
==============================================================================
--- trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/ntdll_apitest.rbuild [iso-8859-1] Mon Jul 11 19:31:34
2011
@@ -1,13 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<group>
-<module name="ntdll_apitest" type="win32cui"
installbase="bin" installname="ntdll_apitest.exe">
+<module name="ntdll_apitest" type="win32cui"
installbase="bin" installname="ntdll_apitest.exe"
+ allowwarnings="true">
<include base="ntdll_apitest">.</include>
<library>wine</library>
<library>ntdll</library>
<library>pseh</library>
<file>testlist.c</file>
+ <file>NtFreeVirtualMemory.c</file>
<file>RtlInitializeBitMap.c</file>
<file>ZwContinue.c</file>
<if property="ARCH" value="i386">
Modified: trunk/rostests/apitests/ntdll/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/testlist.c…
==============================================================================
--- trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/apitests/ntdll/testlist.c [iso-8859-1] Mon Jul 11 19:31:34 2011
@@ -7,11 +7,13 @@
extern void func_RtlInitializeBitMap(void);
extern void func_ZwContinue(void);
+extern void func_NtFreeVirtualMemory(void);
const struct test winetest_testlist[] =
{
{ "RtlInitializeBitMap", func_RtlInitializeBitMap },
{ "ZwContinue", func_ZwContinue },
+ { "NtFreeVirtualMemory", func_NtFreeVirtualMemory },
{ 0, 0 }
};