mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[APITESTS]
Add service tag tests. Patch by Thomas Faber. svn path=/trunk/; revision=53873
This commit is contained in:
parent
03bd308646
commit
b8329db06a
6 changed files with 173 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
|||
|
||||
add_library(apitest apitest.c)
|
||||
|
||||
add_subdirectory(advapi32)
|
||||
add_subdirectory(dciman32)
|
||||
add_subdirectory(gdi32)
|
||||
add_subdirectory(ntdll)
|
||||
|
|
12
rostests/apitests/advapi32/CMakeLists.txt
Normal file
12
rostests/apitests/advapi32/CMakeLists.txt
Normal file
|
@ -0,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)
|
125
rostests/apitests/advapi32/CreateService.c
Normal file
125
rostests/apitests/advapi32/CreateService.c
Normal file
|
@ -0,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();
|
||||
}
|
15
rostests/apitests/advapi32/advapi32_apitest.rbuild
Normal file
15
rostests/apitests/advapi32/advapi32_apitest.rbuild
Normal file
|
@ -0,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>
|
16
rostests/apitests/advapi32/testlist.c
Normal file
16
rostests/apitests/advapi32/testlist.c
Normal file
|
@ -0,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 }
|
||||
};
|
||||
|
|
@ -6,6 +6,10 @@
|
|||
<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" />
|
||||
</directory>
|
||||
|
|
Loading…
Reference in a new issue