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