[PATCH v2 1/3] advapi32/tests: Clean up tests for duplicate service names.
Zebediah Figura
z.figura12 at gmail.com
Fri Oct 25 11:40:12 CDT 2019
Use our own services instead of relying on a system service, and
account for differing Windows 10 behaviour.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/advapi32/tests/service.c | 72 ++++++++++++++++++-----------------
1 file changed, 37 insertions(+), 35 deletions(-)
diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c
index 6c78900bd4..c607e292aa 100644
--- a/dlls/advapi32/tests/service.c
+++ b/dlls/advapi32/tests/service.c
@@ -203,10 +203,9 @@ static void test_create_delete_svc(void)
static const CHAR pathname [] = "we_dont_care.exe";
static const CHAR empty [] = "";
static const CHAR password [] = "secret";
- BOOL spooler_exists = FALSE;
+ char buffer[200];
+ DWORD size;
BOOL ret;
- CHAR display[4096];
- DWORD display_size = sizeof(display);
/* Get the username and turn it into an account to be used in some tests */
GetUserNameA(username, &user_size);
@@ -356,42 +355,45 @@ static void test_create_delete_svc(void)
ok(!svc_handle1, "Expected failure\n");
ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
- /* The service already exists (check first, just in case) */
- svc_handle1 = OpenServiceA(scm_handle, spooler, GENERIC_READ);
- if (svc_handle1)
+ /* Test duplicate service names */
+ svc_handle1 = CreateServiceA(scm_handle, "winetest_dupname", "winetest_display", DELETE,
+ SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, 0, pathname, NULL, NULL, NULL, NULL, NULL);
+ ok(!!svc_handle1, "Failed to create service, error %u\n", GetLastError());
+
+ svc_handle2 = CreateServiceA(scm_handle, "winetest_dupname", NULL, 0,
+ SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, 0, pathname, NULL, NULL, NULL, NULL, NULL);
+ ok(!svc_handle2, "Expected failure\n");
+ ok(GetLastError() == ERROR_SERVICE_EXISTS, "Got wrong error %u\n", GetLastError());
+
+ svc_handle2 = CreateServiceA(scm_handle, "winetest_dupname2", "winetest_dupname", DELETE,
+ SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, 0, pathname, NULL, NULL, NULL, NULL, NULL);
+ todo_wine ok(!svc_handle2, "Expected failure\n");
+ todo_wine ok(GetLastError() == ERROR_DUPLICATE_SERVICE_NAME, "Got wrong error %u\n", GetLastError());
+ if (svc_handle2)
{
- spooler_exists = TRUE;
- CloseServiceHandle(svc_handle1);
- SetLastError(0xdeadbeef);
- svc_handle1 = CreateServiceA(scm_handle, spooler, NULL, 0, SERVICE_WIN32_OWN_PROCESS,
- SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL);
- ok(!svc_handle1, "Expected failure\n");
- ok(GetLastError() == ERROR_SERVICE_EXISTS, "Expected ERROR_SERVICE_EXISTS, got %d\n", GetLastError());
+ DeleteService(svc_handle2);
+ CloseServiceHandle(svc_handle2);
+ }
+
+ svc_handle2 = CreateServiceA(scm_handle, "winetest_dupname2", "winetest_display", DELETE,
+ SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, 0, pathname, NULL, NULL, NULL, NULL, NULL);
+ if (svc_handle2) /* Win10 1709+ */
+ {
+ size = sizeof(buffer);
+ ret = GetServiceKeyNameA(scm_handle, "winetest_display", buffer, &size);
+ ok(ret, "Failed to get key name, error %u\n", GetLastError());
+ ok(!strcmp(buffer, "winetest_dupname"), "Got wrong name \"%s\"\n", buffer);
+
+ ret = DeleteService(svc_handle2);
+ ok(ret, "Failed to delete service, error %u\n", GetLastError());
+ CloseServiceHandle(svc_handle2);
}
else
- skip("Spooler service doesn't exist\n");
+ ok(GetLastError() == ERROR_DUPLICATE_SERVICE_NAME, "Got wrong error %u\n", GetLastError());
- /* To find an existing displayname we check the 'Spooler' service. Although the registry
- * doesn't show DisplayName on NT4, this call will return a displayname which is equal
- * to the servicename and can't be used as well for a new displayname.
- */
- if (spooler_exists)
- {
- ret = GetServiceDisplayNameA(scm_handle, spooler, display, &display_size);
-
- if (!ret)
- skip("Could not retrieve a displayname for the Spooler service\n");
- else
- {
- svc_handle1 = CreateServiceA(scm_handle, servicename, display, 0, SERVICE_WIN32_OWN_PROCESS,
- SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, NULL, NULL);
- ok(!svc_handle1, "Expected failure for display name '%s'\n", display);
- ok(GetLastError() == ERROR_DUPLICATE_SERVICE_NAME,
- "Expected ERROR_DUPLICATE_SERVICE_NAME, got %d\n", GetLastError());
- }
- }
- else
- skip("Could not retrieve a displayname (Spooler service doesn't exist)\n");
+ ret = DeleteService(svc_handle1);
+ ok(ret, "Failed to delete service, error %u\n", GetLastError());
+ CloseServiceHandle(svc_handle1);
/* Windows doesn't care about the access rights for creation (which makes
* sense as there is no service yet) as long as there are sufficient
--
2.20.1
More information about the wine-devel
mailing list