Author: ekohl Date: Tue Sep 27 13:06:33 2011 New Revision: 53873 URL: http://svn.reactos.org/svn/reactos?rev=53873&view=rev Log: [APITESTS] Add service tag tests.
Patch by Thomas Faber. Added: trunk/rostests/apitests/advapi32/ trunk/rostests/apitests/advapi32/CMakeLists.txt (with props) trunk/rostests/apitests/advapi32/CreateService.c (with props) trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild (with props) trunk/rostests/apitests/advapi32/testlist.c (with props) Modified: trunk/rostests/apitests/CMakeLists.txt trunk/rostests/apitests/directory.rbuild Modified: trunk/rostests/apitests/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/CMakeLists.txt?rev=53873&r1=53872&r2=53873&view=diff ============================================================================== --- trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -1,6 +1,7 @@ add_library(apitest apitest.c) +add_subdirectory(advapi32) add_subdirectory(dciman32) add_subdirectory(gdi32) add_subdirectory(ntdll) Added: trunk/rostests/apitests/advapi32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/CMakeLists.txt?rev=53873&view=auto ============================================================================== --- trunk/rostests/apitests/advapi32/CMakeLists.txt (added) +++ trunk/rostests/apitests/advapi32/CMakeLists.txt [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -1,0 +1,12 @@ + +add_definitions(-D_DLL -D__USE_CRTIMP) + +list(APPEND SOURCE + CreateService.c + testlist.c) + +add_executable(advapi32_apitest ${SOURCE}) +target_link_libraries(advapi32_apitest wine) +set_module_type(advapi32_apitest win32cui) +add_importlibs(advapi32_apitest advapi32 msvcrt kernel32 ntdll) +add_cd_file(TARGET advapi32_apitest DESTINATION reactos/bin FOR all) Propchange: trunk/rostests/apitests/advapi32/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/rostests/apitests/advapi32/CMakeLists.txt ------------------------------------------------------------------------------ svn:keywords = author date id revision Added: trunk/rostests/apitests/advapi32/CreateService.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/CreateService.c?rev=53873&view=auto ============================================================================== --- trunk/rostests/apitests/advapi32/CreateService.c (added) +++ trunk/rostests/apitests/advapi32/CreateService.c [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -1,0 +1,125 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for CreateService + * PROGRAMMER: Thomas Faber + */ + +#include <wine/test.h> +#include <windows.h> +#include <strsafe.h> + +#define ok_lasterr(err, s) ok(GetLastError() == (err), "%s GetLastError()=0x%08lx, expected 0x%08lx\n", s, GetLastError(), (DWORD)(err)) + +static int MakeService(SC_HANDLE hScm, const wchar_t *serviceName, SC_HANDLE *hService, DWORD *tag) +{ + DWORD ret; + HKEY hKey = NULL; + DWORD type = 0, tagData = 0, tagSize; + wchar_t keyName[256]; + + SetLastError(DNS_ERROR_RCODE_NXRRSET); + *hService = CreateServiceW( + hScm, + serviceName, + NULL, + DELETE, + SERVICE_KERNEL_DRIVER, + SERVICE_BOOT_START, + SERVICE_ERROR_IGNORE, + L"%systemroot%\\drivers\\win32k.sys", + L"advapi32_apitest_CreateService_Test_Group", + tag, + NULL, + NULL, + NULL); + + ok(*hService != NULL, "Failed to create service, error=0x%08lx\n", GetLastError()); + if (!*hService) + { + skip("No service; cannot proceed with CreateService test\n"); + return 1; + } + + ok_lasterr(ERROR_SUCCESS, "CreateServiceW"); + + ok(*tag != 0, "tag is zero, expected nonzero\n"); + + StringCbPrintfW(keyName, sizeof keyName, L"System\\CurrentControlSet\\Services\\%ls", serviceName); + ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, keyName, &hKey); + ok(ret == ERROR_SUCCESS, "RegOpenKeyW failed with 0x%08lx\n", ret); + if (ret) + { + skip("No regkey; cannot proceed with CreateService test\n"); + return 2; + } + + tagSize = sizeof tagData; + ret = RegQueryValueExW(hKey, L"Tag", NULL, &type, (PBYTE)&tagData, &tagSize); + ok(ret == ERROR_SUCCESS, "RegQueryValueExW returned 0x%08lx\n", ret); + ok(type == REG_DWORD, "type=%lu, expected REG_DWORD\n", type); + ok(tagSize == sizeof tagData, "tagSize=%lu, expected 4\n", tagSize); + ok(tagData == *tag, "tag=%lu, but registry says %lu\n", *tag, tagData); + + RegCloseKey(hKey); + + return 0; +} + +static void Test_CreateService(void) +{ + SC_HANDLE hScm = NULL; + SC_HANDLE hService1 = NULL, hService2 = NULL; + LONG ret; + DWORD tag1 = 0, tag2 = 0; + + SetLastError(DNS_ERROR_RCODE_NXRRSET); + hScm = OpenSCManagerW(NULL, NULL, SC_MANAGER_CREATE_SERVICE); + ok(hScm != NULL, "Failed to open service manager, error=0x%08lx\n", GetLastError()); + if (!hScm) + { + skip("No service control manager; cannot proceed with CreateService test\n"); + goto cleanup; + } + + ok_lasterr(ERROR_SUCCESS, "OpenSCManagerW"); + + if (MakeService(hScm, L"advapi32_apitest_CreateService_Test_Service1", &hService1, &tag1)) + goto cleanup; + + if (MakeService(hScm, L"advapi32_apitest_CreateService_Test_Service2", &hService2, &tag2)) + goto cleanup; + + ok(tag1 != tag2, "tag1=%lu, tag2=%lu\n", tag1, tag2); + +cleanup: + if (hService2) + { + SetLastError(DNS_ERROR_RCODE_NXRRSET); + ret = DeleteService(hService2); + ok(ret == TRUE, "DeleteService returned %ld, expected 1\n", ret); + ok(GetLastError() == DNS_ERROR_RCODE_NXRRSET /* win7 */ + || GetLastError() == ERROR_SUCCESS /* win2k3 */, "DeleteService (Error: %ld)\n", GetLastError()); + + CloseServiceHandle(hService2); + } + + if (hService1) + { + SetLastError(DNS_ERROR_RCODE_NXRRSET); + ret = DeleteService(hService1); + ok(ret == TRUE, "DeleteService returned %ld, expected 1\n", ret); + ok(GetLastError() == DNS_ERROR_RCODE_NXRRSET /* win7 */ + || GetLastError() == ERROR_SUCCESS /* win2k3 */, "DeleteService (Error: %ld)\n", GetLastError()); + + CloseServiceHandle(hService1); + } + + if (hScm) + CloseServiceHandle(hScm); +} + +START_TEST(CreateService) +{ + Test_CreateService(); +} Propchange: trunk/rostests/apitests/advapi32/CreateService.c ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/rostests/apitests/advapi32/CreateService.c ------------------------------------------------------------------------------ svn:keywords = author date id revision Added: trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild?rev=53873&view=auto ============================================================================== --- trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild (added) +++ trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -1,0 +1,15 @@ +<?xml version="1.0"?> +<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> +<group> +<module name="advapi32_apitest" type="win32cui" installbase="bin" installname="advapi32_apitest.exe"> + <include base="advapi32_apitest">.</include> + <library>wine</library> + <library>gdi32</library> + <library>user32</library> + <library>pseh</library> + <library>advapi32</library> + <file>testlist.c</file> + <file>CreateService.c</file> + +</module> +</group> Propchange: trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/rostests/apitests/advapi32/advapi32_apitest.rbuild ------------------------------------------------------------------------------ svn:keywords = author date id revision Added: trunk/rostests/apitests/advapi32/testlist.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/advapi32/testlist.c?rev=53873&view=auto ============================================================================== --- trunk/rostests/apitests/advapi32/testlist.c (added) +++ trunk/rostests/apitests/advapi32/testlist.c [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -1,0 +1,16 @@ +#define WIN32_LEAN_AND_MEAN +#define __ROS_LONG64__ +#include <windows.h> + +#define STANDALONE +#include "wine/test.h" + +extern void func_CreateService(void); + +const struct test winetest_testlist[] = +{ + { "CreateService", func_CreateService }, + + { 0, 0 } +}; + Propchange: trunk/rostests/apitests/advapi32/testlist.c ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/rostests/apitests/advapi32/testlist.c ------------------------------------------------------------------------------ svn:keywords = author date id revision Modified: trunk/rostests/apitests/directory.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/directory.rbuild?rev=53873&r1=53872&r2=53873&view=diff ============================================================================== --- trunk/rostests/apitests/directory.rbuild [iso-8859-1] (original) +++ trunk/rostests/apitests/directory.rbuild [iso-8859-1] Tue Sep 27 13:06:33 2011 @@ -5,6 +5,10 @@ <include base="apitest">.</include> <file>apitest.c</file> </module> + + <directory name="advapi32"> + <xi:include href="advapi32/advapi32_apitest.rbuild" /> + </directory> <directory name="dciman32"> <xi:include href="dciman32/dciman32_apitest.rbuild" />