/* This file is part of TALER Copyright (C) 2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. TALER is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, see */ /** * @file testing_api_cmd_kyc_get.c * @brief command to test kyc_get request * @author Christian Grothoff */ #include "platform.h" #include #include #include "taler_merchant_service.h" #include "taler_merchant_testing_lib.h" /** * State for a "/kyc" GET CMD. */ struct KycGetState { /** * Operation handle for a GET /private/kyc GET request. */ struct TALER_MERCHANT_KycGetHandle *kgh; /** * Base URL of the merchant serving the request. */ const char *merchant_url; /** * Instance to query, NULL if part of @e merchant_url */ const char *instance_id; /** * Reference to command providing wire hash, NULL to * query all accounts. */ const char *h_wire_ref; /** * URL of exchange to query. */ const char *exchange_url; /** * Expected HTTP response code. */ unsigned int expected_http_status; /** * Interpreter state. */ struct TALER_TESTING_Interpreter *is; }; /** * Free the state of a "/kyc" GET CMD, and * possibly cancel a pending "kyc" GET operation. * * @param cls closure with the `struct KycGetState` * @param cmd command currently being freed. */ static void kyc_get_cleanup (void *cls, const struct TALER_TESTING_Command *cmd) { struct KycGetState *cs = cls; if (NULL != cs->kgh) { TALER_LOG_WARNING ("/kyc GET operation did not complete\n"); TALER_MERCHANT_kyc_get_cancel (cs->kgh); } GNUNET_free (cs); } /** * Process "GET /public/kyc_get" (lookup) response. * * @param cls closure * @param kr response we got */ static void kyc_get_cb (void *cls, const struct TALER_MERCHANT_KycResponse *kr) { struct KycGetState *cs = cls; cs->kgh = NULL; if (kr->hr.http_status != cs->expected_http_status) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected status %u, got %u\n", cs->expected_http_status, kr->hr.http_status); TALER_TESTING_FAIL (cs->is); } TALER_TESTING_interpreter_next (cs->is); } /** * Run the "kyc_get" CMD. * * @param cls closure. * @param cmd command being currently run. * @param is interpreter state. */ static void kyc_get_run (void *cls, const struct TALER_TESTING_Command *cmd, struct TALER_TESTING_Interpreter *is) { struct KycGetState *cs = cls; const struct TALER_MerchantWireHash *h_wire = NULL; cs->is = is; if (NULL != cs->h_wire_ref) { const struct TALER_TESTING_Command *wire_cmd; if (NULL == (wire_cmd = TALER_TESTING_interpreter_lookup_command (cs->is, cs->h_wire_ref))) { GNUNET_break (0); TALER_TESTING_FAIL (cs->is); } /* Note: at the time of writing, no command offers an h_wire trait, so for now this code is dead and 'h_wire_ref' must always be NULL... */ if (GNUNET_OK != TALER_TESTING_get_trait_h_wire (wire_cmd, &h_wire)) { GNUNET_break (0); TALER_TESTING_FAIL (cs->is); } } if (NULL == cs->instance_id) cs->kgh = TALER_MERCHANT_kyc_get (is->ctx, cs->merchant_url, h_wire, cs->exchange_url, GNUNET_TIME_UNIT_ZERO, &kyc_get_cb, cs); else cs->kgh = TALER_MERCHANT_management_kyc_get (is->ctx, cs->merchant_url, cs->instance_id, h_wire, cs->exchange_url, GNUNET_TIME_UNIT_ZERO, &kyc_get_cb, cs); GNUNET_assert (NULL != cs->kgh); } struct TALER_TESTING_Command TALER_TESTING_cmd_merchant_kyc_get (const char *label, const char *merchant_url, const char *instance_id, const char *h_wire_ref, const char *exchange_url, unsigned int expected_http_status) { struct KycGetState *cs; cs = GNUNET_new (struct KycGetState); cs->merchant_url = merchant_url; cs->instance_id = instance_id; cs->h_wire_ref = h_wire_ref; cs->exchange_url = exchange_url; cs->expected_http_status = expected_http_status; { struct TALER_TESTING_Command cmd = { .cls = cs, .label = label, .run = &kyc_get_run, .cleanup = &kyc_get_cleanup }; return cmd; } } /* end of testing_api_cmd_kyc_get.c */