Line data Source code
1 : /* 2 : This file is part of TALER 3 : Copyright (C) 2023 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_tme.c 21 : * @brief run the taler-merchant-reconciliation command 22 : * @author Christian Grothoff 23 : */ 24 : #include "platform.h" 25 : #include "taler/taler_json_lib.h" 26 : #include <gnunet/gnunet_curl_lib.h> 27 : #include "taler/taler_signatures.h" 28 : #include "taler/taler_testing_lib.h" 29 : #include "taler_merchant_testing_lib.h" 30 : 31 : 32 : /** 33 : * State for a "taler-merchant-reconciliation" CMD. 34 : */ 35 : struct MerchantExchangeState 36 : { 37 : 38 : /** 39 : * Process for taler-merchant-reconciliation 40 : */ 41 : struct GNUNET_OS_Process *merchant_reconciliation_proc; 42 : 43 : /** 44 : * Configuration file used by the program. 45 : */ 46 : const char *config_filename; 47 : }; 48 : 49 : 50 : /** 51 : * Run the command; use the `taler-merchant-reconciliation' program. 52 : * 53 : * @param cls closure. 54 : * @param cmd command currently being executed. 55 : * @param is interpreter state. 56 : */ 57 : static void 58 4 : tme_run (void *cls, 59 : const struct TALER_TESTING_Command *cmd, 60 : struct TALER_TESTING_Interpreter *is) 61 : { 62 4 : struct MerchantExchangeState *ws = cls; 63 : 64 : (void) cmd; 65 : ws->merchant_reconciliation_proc 66 4 : = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_ALL, 67 : NULL, NULL, NULL, 68 : "taler-merchant-reconciliation", 69 : "taler-merchant-reconciliation", 70 : "-c", ws->config_filename, 71 : "-t", /* exit when done */ 72 : "-L", "DEBUG", 73 : NULL); 74 4 : if (NULL == ws->merchant_reconciliation_proc) 75 : { 76 0 : GNUNET_break (0); 77 0 : TALER_TESTING_interpreter_fail (is); 78 0 : return; 79 : } 80 4 : TALER_TESTING_wait_for_sigchld (is); 81 : } 82 : 83 : 84 : /** 85 : * Free the state of a "exchange" CMD, and possibly 86 : * kills its process if it did not terminate regularly. 87 : * 88 : * @param cls closure. 89 : * @param cmd the command being freed. 90 : */ 91 : static void 92 4 : tme_cleanup (void *cls, 93 : const struct TALER_TESTING_Command *cmd) 94 : { 95 4 : struct MerchantExchangeState *ws = cls; 96 : 97 : (void) cmd; 98 4 : if (NULL != ws->merchant_reconciliation_proc) 99 : { 100 0 : GNUNET_break (0 == 101 : GNUNET_OS_process_kill (ws->merchant_reconciliation_proc, 102 : SIGKILL)); 103 0 : GNUNET_OS_process_wait (ws->merchant_reconciliation_proc); 104 0 : GNUNET_OS_process_destroy (ws->merchant_reconciliation_proc); 105 0 : ws->merchant_reconciliation_proc = NULL; 106 : } 107 4 : GNUNET_free (ws); 108 4 : } 109 : 110 : 111 : /** 112 : * Offer "tme" CMD internal data to other commands. 113 : * 114 : * @param cls closure. 115 : * @param[out] ret result. 116 : * @param trait name of the trait. 117 : * @param index index number of the object to offer. 118 : * @return #GNUNET_OK on success. 119 : */ 120 : static enum GNUNET_GenericReturnValue 121 8 : tme_traits (void *cls, 122 : const void **ret, 123 : const char *trait, 124 : unsigned int index) 125 : { 126 8 : struct MerchantExchangeState *ws = cls; 127 : struct TALER_TESTING_Trait traits[] = { 128 8 : TALER_TESTING_make_trait_process (&ws->merchant_reconciliation_proc), 129 8 : TALER_TESTING_trait_end () 130 : }; 131 : 132 8 : return TALER_TESTING_get_trait (traits, 133 : ret, 134 : trait, 135 : index); 136 : } 137 : 138 : 139 : struct TALER_TESTING_Command 140 4 : TALER_TESTING_cmd_run_tme (const char *label, 141 : const char *config_filename) 142 : { 143 : struct MerchantExchangeState *ws; 144 : 145 4 : ws = GNUNET_new (struct MerchantExchangeState); 146 4 : ws->config_filename = config_filename; 147 : 148 : { 149 4 : struct TALER_TESTING_Command cmd = { 150 : .cls = ws, 151 : .label = label, 152 : .run = &tme_run, 153 : .cleanup = &tme_cleanup, 154 : .traits = &tme_traits 155 : }; 156 : 157 4 : return cmd; 158 : } 159 : } 160 : 161 : 162 : /* end of testing_api_cmd_tme.c */