Line data Source code
1 : /* 2 : This file is part of TALER 3 : Copyright (C) 2024 Taler Systems SA 4 : 5 : TALER is free software; you can redistribute it and/or modify 6 : it under the terms of the GNU General Public License as 7 : published by the Free Software Foundation; either version 3, 8 : or (at your option) any later version. 9 : 10 : TALER is distributed in the hope that it will be useful, 11 : but WITHOUT ANY WARRANTY; without even the implied warranty of 12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 : GNU General Public License for more details. 14 : 15 : You should have received a copy of the GNU General Public 16 : License along with TALER; see the file COPYING. If not, see 17 : <http://www.gnu.org/licenses/> 18 : */ 19 : /** 20 : * @file testing/testing_api_cmd_depositcheck.c 21 : * @brief run the taler-merchant-depositcheck command 22 : * @author Priscilla HUANG 23 : * @author Christian Grothoff 24 : */ 25 : #include "platform.h" 26 : #include "taler/taler_json_lib.h" 27 : #include <gnunet/gnunet_curl_lib.h> 28 : #include "taler/taler_signatures.h" 29 : #include "taler/taler_testing_lib.h" 30 : #include "taler_merchant_testing_lib.h" 31 : 32 : 33 : /** 34 : * State for a "depositcheck" CMD. 35 : */ 36 : struct DepositcheckState 37 : { 38 : 39 : /** 40 : * Process for the depositcheck. 41 : */ 42 : struct GNUNET_OS_Process *depositcheck_proc; 43 : 44 : /** 45 : * Configuration file used by the depositcheck. 46 : */ 47 : const char *config_filename; 48 : }; 49 : 50 : 51 : /** 52 : * Run the command; use the `taler-merchant-depositcheck' program. 53 : * 54 : * @param cls closure. 55 : * @param cmd command currently being executed. 56 : * @param is interpreter state. 57 : */ 58 : static void 59 1 : depositcheck_run (void *cls, 60 : const struct TALER_TESTING_Command *cmd, 61 : struct TALER_TESTING_Interpreter *is) 62 : { 63 1 : struct DepositcheckState *ws = cls; 64 : 65 : (void) cmd; 66 : ws->depositcheck_proc 67 1 : = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_ALL, 68 : NULL, NULL, NULL, 69 : "taler-merchant-depositcheck", 70 : "taler-merchant-depositcheck", 71 : "-c", ws->config_filename, 72 : "-t", /* exit when done */ 73 : "-L", "DEBUG", 74 : NULL); 75 1 : if (NULL == ws->depositcheck_proc) 76 : { 77 0 : GNUNET_break (0); 78 0 : TALER_TESTING_interpreter_fail (is); 79 0 : return; 80 : } 81 1 : TALER_TESTING_wait_for_sigchld (is); 82 : } 83 : 84 : 85 : /** 86 : * Free the state of a "depositcheck" CMD, and possibly 87 : * kills its process if it did not terminate regularly. 88 : * 89 : * @param cls closure. 90 : * @param cmd the command being freed. 91 : */ 92 : static void 93 1 : depositcheck_cleanup (void *cls, 94 : const struct TALER_TESTING_Command *cmd) 95 : { 96 1 : struct DepositcheckState *ws = cls; 97 : 98 : (void) cmd; 99 1 : if (NULL != ws->depositcheck_proc) 100 : { 101 0 : GNUNET_break (0 == 102 : GNUNET_OS_process_kill (ws->depositcheck_proc, 103 : SIGKILL)); 104 0 : GNUNET_OS_process_wait (ws->depositcheck_proc); 105 0 : GNUNET_OS_process_destroy (ws->depositcheck_proc); 106 0 : ws->depositcheck_proc = NULL; 107 : } 108 1 : GNUNET_free (ws); 109 1 : } 110 : 111 : 112 : /** 113 : * Offer "depositcheck" CMD internal data to other commands. 114 : * 115 : * @param cls closure. 116 : * @param[out] ret result. 117 : * @param trait name of the trait. 118 : * @param index index number of the object to offer. 119 : * @return #GNUNET_OK on success. 120 : */ 121 : static enum GNUNET_GenericReturnValue 122 2 : depositcheck_traits (void *cls, 123 : const void **ret, 124 : const char *trait, 125 : unsigned int index) 126 : { 127 2 : struct DepositcheckState *ws = cls; 128 : struct TALER_TESTING_Trait traits[] = { 129 2 : TALER_TESTING_make_trait_process (&ws->depositcheck_proc), 130 2 : TALER_TESTING_trait_end () 131 : }; 132 : 133 2 : return TALER_TESTING_get_trait (traits, 134 : ret, 135 : trait, 136 : index); 137 : } 138 : 139 : 140 : struct TALER_TESTING_Command 141 1 : TALER_TESTING_cmd_depositcheck (const char *label, 142 : const char *config_filename) 143 : { 144 : struct DepositcheckState *ws; 145 : 146 1 : ws = GNUNET_new (struct DepositcheckState); 147 1 : ws->config_filename = config_filename; 148 : 149 : { 150 1 : struct TALER_TESTING_Command cmd = { 151 : .cls = ws, 152 : .label = label, 153 : .run = &depositcheck_run, 154 : .cleanup = &depositcheck_cleanup, 155 : .traits = &depositcheck_traits 156 : }; 157 : 158 1 : return cmd; 159 : } 160 : } 161 : 162 : 163 : /* end of testing_api_cmd_depositcheck.c */