Author: jgardou Date: Mon Sep 22 14:46:08 2014 New Revision: 64227
URL: http://svn.reactos.org/svn/reactos?rev=64227&view=rev Log: [NTDLL_APITEST] - Add a test stressing the registry a lot. By "V". ROSTESTS-141 #resolve #comment Committed, Thanks!
Modified: trunk/rostests/apitests/ntdll/NtDeleteKey.c
Modified: trunk/rostests/apitests/ntdll/NtDeleteKey.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/ntdll/NtDeleteKey... ============================================================================== --- trunk/rostests/apitests/ntdll/NtDeleteKey.c [iso-8859-1] (original) +++ trunk/rostests/apitests/ntdll/NtDeleteKey.c [iso-8859-1] Mon Sep 22 14:46:08 2014 @@ -7,6 +7,7 @@ #include <apitest.h>
#define WIN32_NO_STATUS +#include <stdio.h> #include <ndk/rtlfuncs.h> #include <ndk/cmfuncs.h> #include <ndk/obfuncs.h> @@ -34,7 +35,9 @@ START_TEST(NtDeleteKey) { NTSTATUS Status; - HANDLE ParentKey, ChildKey; + HANDLE ParentKey, ChildKey, PetKey; + WCHAR Buffer[sizeof("\Registry\Machine\Software\RosTests\Child\Pet") + 5]; + ULONG i;
/* Create a registry key */ Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, L"\Registry\Machine\Software\RosTests"); @@ -93,4 +96,53 @@ /* Close everything */ NtClose(ChildKey); NtClose(ParentKey); + + /* Stress test key creation */ + Status = CreateRegistryKeyHandle(&ParentKey, KEY_READ | DELETE, L"\Registry\Machine\Software\RosTests"); + + for (i = 0; i <= 9999; i++) { + swprintf(Buffer, L"\Registry\Machine\Software\RosTests\Child%04d", i); + Status = CreateRegistryKeyHandle(&ChildKey, KEY_READ, Buffer); + NtClose(ChildKey); + + swprintf(Buffer, L"\Registry\Machine\Software\RosTests\Child%04d\Pet", i); + Status = CreateRegistryKeyHandle(&PetKey, KEY_READ, Buffer); + NtClose(PetKey); + } + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test hive rerooting */ + Status = CreateRegistryKeyHandle(&PetKey, DELETE, L"\Registry\Machine\Software\RosTests\Child5000\Pet"); + ok_ntstatus(Status, STATUS_SUCCESS); + Status = NtDeleteKey(PetKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + NtClose(PetKey); + + Status = CreateRegistryKeyHandle(&ChildKey, DELETE, L"\Registry\Machine\Software\RosTests\Child5000"); + ok_ntstatus(Status, STATUS_SUCCESS); + Status = NtDeleteKey(ChildKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Test mass key deletion */ + for (i = 0; i <= 9999; i++) { + if (i != 5000) { + swprintf(Buffer, L"\Registry\Machine\Software\RosTests\Child%04d\Pet", i); + CreateRegistryKeyHandle(&PetKey, DELETE, Buffer); + Status = NtDeleteKey(PetKey); + NtClose(PetKey); + + swprintf(Buffer, L"\Registry\Machine\Software\RosTests\Child%04d", i); + CreateRegistryKeyHandle(&ChildKey, DELETE, Buffer); + Status = NtDeleteKey(ChildKey); + NtClose(ChildKey); + } + } + ok_ntstatus(Status, STATUS_SUCCESS); + + Status = NtDeleteKey(ParentKey); + ok_ntstatus(Status, STATUS_SUCCESS); + + /* Close ParentKey */ + NtClose(ParentKey); }