testing_api_cmd_get_donau_instances.c (4797B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2021 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, or 8 (at your 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, see 17 <http://www.gnu.org/licenses/> 18 */ 19 /** 20 * @file src/testing/testing_api_cmd_get_donau_instances.c 21 * @brief command to test kyc_get request 22 * @author Bohdan Potuzhnyi 23 * @author Vlada Svirsh 24 */ 25 #include "platform.h" 26 struct GetDonauInstancesState; 27 #define TALER_MERCHANT_GET_PRIVATE_DONAU_RESULT_CLOSURE struct GetDonauInstancesState 28 #include <taler/taler_exchange_service.h> 29 #include <taler/taler_testing_lib.h> 30 #include "taler/taler_merchant_service.h" 31 #include "taler/taler_merchant_testing_lib.h" 32 #include <taler/merchant/get-private-donau.h> 33 34 /** 35 * State of a "GET donau instances" CMD. 36 */ 37 struct GetDonauInstancesState 38 { 39 /** 40 * Handle for a "GET donau instances" request. 41 */ 42 struct TALER_MERCHANT_GetPrivateDonauHandle *dgh; 43 44 /** 45 * The interpreter state. 46 */ 47 struct TALER_TESTING_Interpreter *is; 48 49 /** 50 * Base URL of the merchant/donau service. 51 */ 52 const char *url; 53 54 /** 55 * Expected HTTP response code. 56 */ 57 unsigned int expected_http_status; 58 59 /** 60 * The number of instances to expect. 61 */ 62 unsigned int instances_length; 63 }; 64 65 /** 66 * Callback for a /get/donau operation. 67 * 68 * @param cls closure for this function 69 * @param response response details from the Donau service 70 */ 71 static void 72 get_donau_instances_cb ( 73 struct GetDonauInstancesState *gis, 74 const struct TALER_MERCHANT_GetPrivateDonauResponse *response) 75 { 76 gis->dgh = NULL; 77 78 if (gis->expected_http_status != response->hr.http_status) 79 { 80 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 81 "Unexpected response code %u (%d) to command %s\n", 82 response->hr.http_status, 83 (int) response->hr.ec, 84 TALER_TESTING_interpreter_get_current_label (gis->is)); 85 TALER_TESTING_interpreter_fail (gis->is); 86 return; 87 } 88 89 if (MHD_HTTP_OK == response->hr.http_status) 90 { 91 unsigned int instance_count = response->details.ok.donau_instances_length; 92 if (instance_count != gis->instances_length) 93 { 94 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 95 "Expected %u instances, but got %u\n", 96 gis->instances_length, instance_count); 97 TALER_TESTING_interpreter_fail (gis->is); 98 return; 99 } 100 } 101 TALER_TESTING_interpreter_next (gis->is); 102 } 103 104 105 /** 106 * Run the "GET donau instance" CMD. 107 * 108 * @param cls closure. 109 * @param cmd command being run now. 110 * @param is interpreter state. 111 */ 112 static void 113 get_donau_instances_run (void *cls, 114 const struct TALER_TESTING_Command *cmd, 115 struct TALER_TESTING_Interpreter *is) 116 { 117 struct GetDonauInstancesState *gis = cls; 118 119 gis->is = is; 120 gis->dgh = TALER_MERCHANT_get_private_donau_create ( 121 TALER_TESTING_interpreter_get_context (is), 122 gis->url); 123 { 124 enum TALER_ErrorCode ec; 125 126 ec = TALER_MERCHANT_get_private_donau_start ( 127 gis->dgh, 128 &get_donau_instances_cb, 129 gis); 130 GNUNET_assert (TALER_EC_NONE == ec); 131 } 132 } 133 134 135 /** 136 * Free the state of a "GET donau instance" CMD, and possibly 137 * cancel a pending operation thereof. 138 * 139 * @param cls closure. 140 * @param cmd command being run. 141 */ 142 static void 143 get_donau_instances_cleanup (void *cls, 144 const struct TALER_TESTING_Command *cmd) 145 { 146 struct GetDonauInstancesState *gis = cls; 147 148 if (NULL != gis->dgh) 149 { 150 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 151 "GET /donau instances operation did not complete\n"); 152 TALER_MERCHANT_get_private_donau_cancel (gis->dgh); 153 } 154 155 GNUNET_free (gis); 156 } 157 158 159 /** 160 * Creation of the "GET donau instances" CMD. 161 */ 162 struct TALER_TESTING_Command 163 TALER_TESTING_cmd_merchant_get_donau_instances ( 164 const char *label, 165 const char *url, 166 unsigned int instance_count, 167 unsigned int expected_http_status) 168 { 169 struct GetDonauInstancesState *gis; 170 171 gis = GNUNET_new (struct GetDonauInstancesState); 172 gis->url = url; 173 gis->expected_http_status = expected_http_status; 174 gis->instances_length = instance_count; 175 176 { 177 struct TALER_TESTING_Command cmd = { 178 .cls = gis, 179 .label = label, 180 .run = &get_donau_instances_run, 181 .cleanup = &get_donau_instances_cleanup 182 }; 183 return cmd; 184 } 185 }