Module: wine Branch: master Commit: 7b3f804606b2b3864cce6f53e9840482a963cbb8 URL: https://gitlab.winehq.org/wine/wine/-/commit/7b3f804606b2b3864cce6f53e984048...
Author: Francois Gouget fgouget@codeweavers.com Date: Thu Mar 16 18:46:18 2023 +0100
advapi32/tests: Better account for starting and stopping services.
The START_PENDING and STOP_PENDING services don't always have a process id. Also trace unusual service states so we can identify which ones behave in unexpected ways.
Wine-Bug: https://bugs.winehq.org//show_bug.cgi?id=53460
---
dlls/advapi32/tests/service.c | 60 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 8 deletions(-)
diff --git a/dlls/advapi32/tests/service.c b/dlls/advapi32/tests/service.c index 2527be27d5f..8a4fdec05ab 100644 --- a/dlls/advapi32/tests/service.c +++ b/dlls/advapi32/tests/service.c @@ -1420,10 +1420,30 @@ static void test_enum_svc(void) */ if (status.dwServiceType & (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)) { - if (status.dwCurrentState == SERVICE_STOPPED) - servicecountinactive--; - else + switch (status.dwCurrentState) + { + case SERVICE_START_PENDING: + case SERVICE_STOP_PENDING: + case SERVICE_PAUSE_PENDING: + case SERVICE_PAUSED: + case SERVICE_CONTINUE_PENDING: + trace("Got state %lx for service %s\n", status.dwCurrentState, + services[i].lpServiceName); + /* fall through */ + + case SERVICE_RUNNING: servicecountactive--; + break; + + case SERVICE_STOPPED: + servicecountinactive--; + break; + + default: + ok(0, "Got unknown state %lx for service %s\n", + status.dwCurrentState, services[i].lpServiceName); + break; + } } } HeapFree(GetProcessHeap(), 0, services); @@ -1739,21 +1759,45 @@ static void test_enum_svc(void)
if (status.dwServiceType & (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)) { - if (status.dwCurrentState != SERVICE_STOPPED) + switch (status.dwCurrentState) { + case SERVICE_START_PENDING: + case SERVICE_STOP_PENDING: + trace("Got state %lx (pid=%04lx) for service %s\n", + status.dwCurrentState, status.dwProcessId, + exservices[i].lpServiceName); + /* There may or may not be a process id */ + servicecountactive--; + break; + + case SERVICE_PAUSE_PENDING: + case SERVICE_PAUSED: + case SERVICE_CONTINUE_PENDING: + trace("Got state %lx (pid=%04lx) for service %s\n", + status.dwCurrentState, status.dwProcessId, + exservices[i].lpServiceName); + /* fall through */ + + case SERVICE_RUNNING: /* We expect a process id for every running service */ ok(status.dwProcessId > 0, "Expected a process id for this running service (%s)\n", exservices[i].lpServiceName); - servicecountactive--; - } - else - { + break; + + case SERVICE_STOPPED: /* We shouldn't have a process id for inactive services */ ok(status.dwProcessId == 0, "Service %s state %lu shouldn't have an associated process id\n", exservices[i].lpServiceName, status.dwCurrentState);
servicecountinactive--; + break; + + default: + ok(0, "Got unknown state %lx (pid=%04lx) for service %s\n", + status.dwCurrentState, status.dwProcessId, + exservices[i].lpServiceName); + break; } } }