LCOV - code coverage report
Current view: top level - testing - testing_api_cmd_kyc_check_get.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 62.3 % 77 48
Test Date: 2026-03-07 14:54:45 Functions: 100.0 % 5 5

            Line data    Source code
       1              : /*
       2              :   This file is part of TALER
       3              :   Copyright (C) 2021-2026 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              : /**
      21              :  * @file testing/testing_api_cmd_kyc_check_get.c
      22              :  * @brief Implement the testing CMDs for the /kyc_check/ GET operations.
      23              :  * @author Christian Grothoff
      24              :  */
      25              : #include "taler/platform.h"
      26              : #include "taler/taler_json_lib.h"
      27              : #include <gnunet/gnunet_curl_lib.h>
      28              : 
      29              : /**
      30              :  * State for a "track transaction" CMD.
      31              :  */
      32              : struct KycCheckGetState;
      33              : 
      34              : #define TALER_EXCHANGE_GET_KYC_CHECK_RESULT_CLOSURE \
      35              :         struct KycCheckGetState
      36              : #include "taler/taler-exchange/get-kyc-check-H_NORMALIZED_PAYTO.h"
      37              : #include "taler/taler_testing_lib.h"
      38              : 
      39              : /**
      40              :  * State for a "track transaction" CMD.
      41              :  */
      42              : struct KycCheckGetState
      43              : {
      44              : 
      45              :   /**
      46              :    * Set to the KYC URL *if* the exchange replied with
      47              :    * a request for KYC (#MHD_HTTP_ACCEPTED or #MHD_HTTP_OK).
      48              :    */
      49              :   struct TALER_AccountAccessTokenP access_token;
      50              : 
      51              :   /**
      52              :    * Handle to the "track transaction" pending operation.
      53              :    */
      54              :   struct TALER_EXCHANGE_GetKycCheckHandle *kwh;
      55              : 
      56              :   /**
      57              :    * Interpreter state.
      58              :    */
      59              :   struct TALER_TESTING_Interpreter *is;
      60              : 
      61              :   /**
      62              :    * Command to get a reserve private key from.
      63              :    */
      64              :   const char *payment_target_reference;
      65              : 
      66              :   /**
      67              :    * Command to get an account private key from.
      68              :    */
      69              :   const char *account_reference;
      70              : 
      71              :   /**
      72              :    * Expected HTTP response code.
      73              :    */
      74              :   unsigned int expected_response_code;
      75              : 
      76              :   /**
      77              :    * What are we waiting for when long-polling?
      78              :    */
      79              :   enum TALER_EXCHANGE_KycLongPollTarget lpt;
      80              : 
      81              : };
      82              : 
      83              : 
      84              : /**
      85              :  * Handle response to the command.
      86              :  *
      87              :  * @param kcg our state
      88              :  * @param ks GET KYC status response details
      89              :  */
      90              : static void
      91           14 : check_kyc_cb (
      92              :   TALER_EXCHANGE_GET_KYC_CHECK_RESULT_CLOSURE *kcg,
      93              :   const struct TALER_EXCHANGE_GetKycCheckResponse *ks)
      94              : {
      95           14 :   struct TALER_TESTING_Interpreter *is = kcg->is;
      96              : 
      97           14 :   kcg->kwh = NULL;
      98           14 :   if (kcg->expected_response_code != ks->hr.http_status)
      99              :   {
     100            0 :     TALER_TESTING_unexpected_status (is,
     101              :                                      ks->hr.http_status,
     102              :                                      kcg->expected_response_code);
     103            0 :     return;
     104              :   }
     105           14 :   switch (ks->hr.http_status)
     106              :   {
     107            3 :   case MHD_HTTP_OK:
     108            3 :     kcg->access_token = ks->details.ok.access_token;
     109            3 :     break;
     110           11 :   case MHD_HTTP_ACCEPTED:
     111           11 :     kcg->access_token = ks->details.accepted.access_token;
     112           11 :     break;
     113            0 :   case MHD_HTTP_NO_CONTENT:
     114            0 :     break;
     115            0 :   default:
     116            0 :     GNUNET_break (0);
     117            0 :     break;
     118              :   }
     119           14 :   TALER_TESTING_interpreter_next (kcg->is);
     120              : }
     121              : 
     122              : 
     123              : /**
     124              :  * Run the command.
     125              :  *
     126              :  * @param cls closure.
     127              :  * @param cmd the command to execute.
     128              :  * @param is the interpreter state.
     129              :  */
     130              : static void
     131           14 : check_kyc_run (void *cls,
     132              :                const struct TALER_TESTING_Command *cmd,
     133              :                struct TALER_TESTING_Interpreter *is)
     134              : {
     135           14 :   struct KycCheckGetState *kcg = cls;
     136              :   const struct TALER_TESTING_Command *res_cmd;
     137              :   const struct TALER_TESTING_Command *acc_cmd;
     138              :   const struct TALER_NormalizedPaytoHashP *h_payto;
     139              :   const union TALER_AccountPrivateKeyP *account_priv;
     140              : 
     141              :   (void) cmd;
     142           14 :   kcg->is = is;
     143           14 :   res_cmd = TALER_TESTING_interpreter_lookup_command (
     144              :     kcg->is,
     145              :     kcg->payment_target_reference);
     146           14 :   if (NULL == res_cmd)
     147              :   {
     148            0 :     GNUNET_break (0);
     149            0 :     TALER_TESTING_interpreter_fail (kcg->is);
     150            0 :     return;
     151              :   }
     152           14 :   acc_cmd = TALER_TESTING_interpreter_lookup_command (
     153              :     kcg->is,
     154              :     kcg->account_reference);
     155           14 :   if (NULL == acc_cmd)
     156              :   {
     157            0 :     GNUNET_break (0);
     158            0 :     TALER_TESTING_interpreter_fail (kcg->is);
     159            0 :     return;
     160              :   }
     161           14 :   if (GNUNET_OK !=
     162           14 :       TALER_TESTING_get_trait_h_normalized_payto (
     163              :         res_cmd,
     164              :         &h_payto))
     165              :   {
     166            0 :     GNUNET_break (0);
     167            0 :     TALER_TESTING_interpreter_fail (kcg->is);
     168            0 :     return;
     169              :   }
     170           14 :   if (GNUNET_OK !=
     171           14 :       TALER_TESTING_get_trait_account_priv (acc_cmd,
     172              :                                             &account_priv))
     173              :   {
     174            0 :     GNUNET_break (0);
     175            0 :     TALER_TESTING_interpreter_fail (kcg->is);
     176            0 :     return;
     177              :   }
     178           14 :   if (0 == h_payto)
     179              :   {
     180            0 :     GNUNET_break (0);
     181            0 :     TALER_TESTING_interpreter_fail (kcg->is);
     182            0 :     return;
     183              :   }
     184           14 :   kcg->kwh = TALER_EXCHANGE_get_kyc_check_create (
     185              :     TALER_TESTING_interpreter_get_context (is),
     186              :     TALER_TESTING_get_exchange_url (is),
     187              :     h_payto,
     188              :     account_priv);
     189           14 :   GNUNET_assert (NULL != kcg->kwh);
     190           14 :   if (TALER_EXCHANGE_KLPT_NONE != kcg->lpt)
     191           14 :     TALER_EXCHANGE_get_kyc_check_set_options (
     192              :       kcg->kwh,
     193              :       TALER_EXCHANGE_get_kyc_check_option_lpt (kcg->lpt),
     194              :       TALER_EXCHANGE_get_kyc_check_option_timeout (GNUNET_TIME_UNIT_MINUTES));
     195              :   {
     196              :     enum TALER_ErrorCode ec;
     197              : 
     198           14 :     ec = TALER_EXCHANGE_get_kyc_check_start (kcg->kwh,
     199              :                                              &check_kyc_cb,
     200              :                                              kcg);
     201           14 :     if (TALER_EC_NONE != ec)
     202              :     {
     203            0 :       GNUNET_break (0);
     204            0 :       kcg->kwh = NULL;
     205            0 :       TALER_TESTING_interpreter_fail (kcg->is);
     206            0 :       return;
     207              :     }
     208              :   }
     209              : }
     210              : 
     211              : 
     212              : /**
     213              :  * Cleanup the state from a "track transaction" CMD, and possibly
     214              :  * cancel a operation thereof.
     215              :  *
     216              :  * @param cls closure.
     217              :  * @param cmd the command which is being cleaned up.
     218              :  */
     219              : static void
     220           14 : check_kyc_cleanup (void *cls,
     221              :                    const struct TALER_TESTING_Command *cmd)
     222              : {
     223           14 :   struct KycCheckGetState *kcg = cls;
     224              : 
     225           14 :   if (NULL != kcg->kwh)
     226              :   {
     227            0 :     TALER_TESTING_command_incomplete (kcg->is,
     228              :                                       cmd->label);
     229            0 :     TALER_EXCHANGE_get_kyc_check_cancel (kcg->kwh);
     230            0 :     kcg->kwh = NULL;
     231              :   }
     232           14 :   GNUNET_free (kcg);
     233           14 : }
     234              : 
     235              : 
     236              : /**
     237              :  * Offer internal data from a "check KYC" CMD.
     238              :  *
     239              :  * @param cls closure.
     240              :  * @param[out] ret result (could be anything).
     241              :  * @param trait name of the trait.
     242              :  * @param index index number of the object to offer.
     243              :  * @return #GNUNET_OK on success.
     244              :  */
     245              : static enum GNUNET_GenericReturnValue
     246           36 : check_kyc_traits (void *cls,
     247              :                   const void **ret,
     248              :                   const char *trait,
     249              :                   unsigned int index)
     250              : {
     251           36 :   struct KycCheckGetState *kcg = cls;
     252              :   struct TALER_TESTING_Trait traits[] = {
     253           36 :     TALER_TESTING_make_trait_account_access_token (&kcg->access_token),
     254           36 :     TALER_TESTING_trait_end ()
     255              :   };
     256              : 
     257           36 :   return TALER_TESTING_get_trait (traits,
     258              :                                   ret,
     259              :                                   trait,
     260              :                                   index);
     261              : }
     262              : 
     263              : 
     264              : struct TALER_TESTING_Command
     265           14 : TALER_TESTING_cmd_check_kyc_get (
     266              :   const char *label,
     267              :   const char *payment_target_reference,
     268              :   const char *account_reference,
     269              :   enum TALER_EXCHANGE_KycLongPollTarget lpt,
     270              :   unsigned int expected_response_code)
     271              : {
     272              :   struct KycCheckGetState *kcg;
     273              : 
     274           14 :   kcg = GNUNET_new (struct KycCheckGetState);
     275           14 :   kcg->payment_target_reference = payment_target_reference;
     276           14 :   kcg->account_reference = account_reference;
     277           14 :   kcg->expected_response_code = expected_response_code;
     278           14 :   kcg->lpt = lpt;
     279              :   {
     280           14 :     struct TALER_TESTING_Command cmd = {
     281              :       .cls = kcg,
     282              :       .label = label,
     283              :       .run = &check_kyc_run,
     284              :       .cleanup = &check_kyc_cleanup,
     285              :       .traits = &check_kyc_traits
     286              :     };
     287              : 
     288           14 :     return cmd;
     289              :   }
     290              : }
     291              : 
     292              : 
     293              : /* end of testing_api_cmd_kyc_check_get.c */
        

Generated by: LCOV version 2.0-1