From 49bf8134fb00790901d2a7aab78bea790977aea0 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 11 Aug 2025 11:48:38 +0900 Subject: tests: Add a test with assuan_pipe_kill_server. * tests/pipeconnect.c (run_client_testing_kill): New. (main): Call run_client_testing_kill. -- Signed-off-by: NIIBE Yutaka --- tests/pipeconnect.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tests/pipeconnect.c b/tests/pipeconnect.c index 2c43e7e..8bdce65 100644 --- a/tests/pipeconnect.c +++ b/tests/pipeconnect.c @@ -265,6 +265,68 @@ run_client (const char *servername) } +static void +run_client_testing_kill (const char *servername) +{ + gpg_error_t err; + assuan_context_t ctx; + assuan_fd_t no_close_fds[2]; + const char *arglist[5]; + + no_close_fds[0] = assuan_fd_from_posix_fd (fileno (stderr)); + no_close_fds[1] = ASSUAN_INVALID_FD; + + arglist[0] = servername; + arglist[1] = "--server"; + arglist[2] = debug? "--debug" : verbose? "--verbose":NULL; + arglist[3] = NULL; + + err = assuan_new (&ctx); + if (err) + log_fatal ("assuan_new failed: %s\n", gpg_strerror (err)); + + err = assuan_pipe_connect (ctx, servername, arglist, no_close_fds, + NULL, NULL, 0); + if (err) + { + log_error ("assuan_pipe_connect failed: %s\n", + gpg_strerror (err)); + assuan_release (ctx); + return; + } + + log_info ("server started; pid is %ld\n", + (long)assuan_get_pid (ctx)); + + err = assuan_transact (ctx, "ECHO Your lucky number is 3552664958674928. " + "Watch for it everywhere.", + data_cb, NULL, NULL, NULL, NULL, NULL); + if (err) + { + log_error ("sending ECHO failed: %s\n", gpg_strerror (err)); + return; + } + + err = assuan_pipe_kill_server (ctx); + if (err) + { + log_error ("Killing server process failed: %s\n", gpg_strerror (err)); + return; + } + + err = assuan_transact (ctx, "BYE", NULL, NULL, NULL, NULL, NULL, NULL); + if (!err) + { + log_error ("sending BYE *NOT* failed: %s\n", gpg_strerror (err)); + return; + } + log_info ("sending BYE correctly failed: %s\n", gpg_strerror (err)); + + assuan_release (ctx); + return; +} + + static void parse_std_file_handles (int *argcp, char ***argvp) { @@ -361,6 +423,9 @@ main (int argc, char **argv) assuan_set_assuan_log_stream (stderr); run_client (myname); log_info ("client finished\n"); + log_info ("another client started\n"); + run_client_testing_kill (myname); + log_info ("client finished\n"); } return errorcount ? 1 : 0; -- cgit v1.2.3