From bce1213281155e2a22c4c44d3684d34b645cf3ca Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Mon, 14 Oct 2024 23:31:36 +0200 Subject: [PATCH] net/tests: Add test for stopping non existing service. --- configure | 1 + configure.ac | 1 + programs/net/tests/Makefile.in | 4 ++ programs/net/tests/net.c | 79 ++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 programs/net/tests/Makefile.in create mode 100644 programs/net/tests/net.c diff --git a/configure b/configure index 983eb81d27f..b85407c46a2 100755 --- a/configure +++ b/configure @@ -23070,6 +23070,7 @@ wine_fn_config_makefile programs/msidb enable_msidb wine_fn_config_makefile programs/msiexec enable_msiexec wine_fn_config_makefile programs/msinfo32 enable_msinfo32 wine_fn_config_makefile programs/net enable_net +wine_fn_config_makefile programs/net/tests enable_tests wine_fn_config_makefile programs/netsh enable_netsh wine_fn_config_makefile programs/netstat enable_netstat wine_fn_config_makefile programs/ngen enable_ngen diff --git a/configure.ac b/configure.ac index 94260d7ae7b..dd80e0c06d8 100644 --- a/configure.ac +++ b/configure.ac @@ -3468,6 +3468,7 @@ WINE_CONFIG_MAKEFILE(programs/msidb) WINE_CONFIG_MAKEFILE(programs/msiexec) WINE_CONFIG_MAKEFILE(programs/msinfo32) WINE_CONFIG_MAKEFILE(programs/net) +WINE_CONFIG_MAKEFILE(programs/net/tests) WINE_CONFIG_MAKEFILE(programs/netsh) WINE_CONFIG_MAKEFILE(programs/netstat) WINE_CONFIG_MAKEFILE(programs/ngen) diff --git a/programs/net/tests/Makefile.in b/programs/net/tests/Makefile.in new file mode 100644 index 00000000000..e0c79d11c1c --- /dev/null +++ b/programs/net/tests/Makefile.in @@ -0,0 +1,4 @@ +TESTDLL = net.exe + +SOURCES = \ + net.c diff --git a/programs/net/tests/net.c b/programs/net/tests/net.c new file mode 100644 index 00000000000..3609486a7cc --- /dev/null +++ b/programs/net/tests/net.c @@ -0,0 +1,79 @@ +/* + * Copyright 2024 Fabian Maurer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include "wine/test.h" + +static HANDLE nul_file; + +#define check_exit_code(x) ok(r == (x), "got exit code %ld, expected %d\n", r, (x)) + +/* Copied and modified from the reg.exe tests */ +#define run_net_exe(c,r) run_net_exe_(__FILE__,__LINE__,c,r) +static BOOL run_net_exe_(const char *file, unsigned line, const char *cmd, DWORD *rc) +{ + STARTUPINFOA si = {sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION pi; + BOOL bret; + DWORD ret; + char cmdline[256]; + + si.dwFlags = STARTF_USESTDHANDLES; + si.hStdInput = nul_file; + si.hStdOutput = nul_file; + si.hStdError = nul_file; + + strcpy(cmdline, cmd); + if (!CreateProcessA(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) + return FALSE; + + ret = WaitForSingleObject(pi.hProcess, 10000); + if (ret == WAIT_TIMEOUT) + TerminateProcess(pi.hProcess, 1); + + bret = GetExitCodeProcess(pi.hProcess, rc); + ok_(__FILE__, line)(bret, "GetExitCodeProcess failed: %ld\n", GetLastError()); + + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + return bret; +} + +static void test_stop(void) +{ + DWORD r; + + /* Stop non existing service */ + + run_net_exe("net stop non-existing-service", &r); + todo_wine + check_exit_code(2); +} + +START_TEST(net) +{ + SECURITY_ATTRIBUTES secattr = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; + + nul_file = CreateFileA("NUL", GENERIC_READ | GENERIC_WRITE, 0, &secattr, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, NULL); + + test_stop(); + + CloseHandle(nul_file); +}