LCOV - code coverage report
Current view: top level - testing - testing_api_cmd_post_donau_instances.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 66.7 % 51 34
Test Date: 2026-09-11 17:45:24 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /*
       2              :   This file is part of TALER
       3              :   Copyright (C) 2020-2024 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,
      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 src/testing/testing_api_cmd_post_donau_instances.c
      21              :  * @brief command to test POST /donau request
      22              :  * @author Bohdan Potuzhnyi
      23              :  * @author Vlada Svirsh
      24              :  */
      25              : 
      26              : #include "platform.h"
      27              : struct PostDonauState;
      28              : #define TALER_MERCHANT_POST_PRIVATE_DONAU_RESULT_CLOSURE struct PostDonauState
      29              : #include <taler/taler_exchange_service.h>
      30              : #include <taler/taler_testing_lib.h>
      31              : #include "taler/taler_merchant_service.h"
      32              : #include "taler/taler_merchant_testing_lib.h"
      33              : #include <donau/donau_testing_lib.h>
      34              : #include <taler/merchant/post-private-donau.h>
      35              : 
      36              : /**
      37              :  * State of a "POST /donau" CMD.
      38              :  */
      39              : struct PostDonauState
      40              : {
      41              :   /**
      42              :    * Handle for a "POST donau" request.
      43              :    */
      44              :   struct TALER_MERCHANT_PostPrivateDonauHandle *dph;
      45              : 
      46              :   /**
      47              :    * The interpreter state.
      48              :    */
      49              :   struct TALER_TESTING_Interpreter *is;
      50              : 
      51              :   /**
      52              :    * Base URL of the merchant serving the request.
      53              :    */
      54              :   const char *merchant_url;
      55              : 
      56              :   /**
      57              :    * Charity details.
      58              :    */
      59              :   struct TALER_MERCHANT_Charity charity;
      60              : 
      61              :   /**
      62              :    * Merchant reference to fetch public key.
      63              :    */
      64              :   const char *merchant_reference;
      65              : 
      66              :   /**
      67              :    * Expected HTTP response code.
      68              :    */
      69              :   unsigned int http_status;
      70              : };
      71              : 
      72              : /**
      73              :  * Callback for a POST /donau operation.
      74              :  *
      75              :  * @param cls closure for this function
      76              :  * @param pdr response being processed
      77              :  */
      78              : static void
      79            4 : post_donau_cb (struct PostDonauState *pds,
      80              :                const struct TALER_MERCHANT_PostPrivateDonauResponse *pdr)
      81              : {
      82              : 
      83            4 :   pds->dph = NULL;
      84            4 :   if (pds->http_status != pdr->hr.http_status)
      85              :   {
      86            0 :     TALER_TESTING_unexpected_status_with_body (
      87              :       pds->is,
      88              :       pdr->hr.http_status,
      89              :       pds->http_status,
      90              :       pdr->hr.reply);
      91            0 :     return;
      92              :   }
      93              : 
      94            4 :   switch (pdr->hr.http_status)
      95              :   {
      96            4 :   case MHD_HTTP_NO_CONTENT:
      97            4 :     break;
      98            0 :   case MHD_HTTP_BAD_REQUEST:
      99              :     {
     100            0 :       char *s = json_dumps (pdr->hr.reply, JSON_INDENT (2));
     101              : 
     102            0 :       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
     103              :                   "POST /donau returned BAD REQUEST: %s\n",
     104              :                   s);
     105            0 :       free (s);
     106              :     }
     107            0 :     break;
     108            0 :   case MHD_HTTP_UNAUTHORIZED:
     109            0 :     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
     110              :                 "POST /donau returned UNAUTHORIZED\n");
     111            0 :     break;
     112            0 :   case MHD_HTTP_NOT_FOUND:
     113            0 :     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
     114              :                 "POST /donau returned NOT FOUND\n");
     115            0 :     break;
     116            0 :   default:
     117            0 :     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
     118              :                 "Unhandled HTTP status %u for POST /donau\n",
     119              :                 pdr->hr.http_status);
     120              :   }
     121            4 :   TALER_TESTING_interpreter_next (pds->is);
     122              : }
     123              : 
     124              : 
     125              : /**
     126              :  * Run the "POST /donau" CMD.
     127              :  *
     128              :  * @param cls closure.
     129              :  * @param cmd command being run now.
     130              :  * @param is interpreter state.
     131              :  */
     132              : static void
     133            4 : post_donau_run (void *cls,
     134              :                 const struct TALER_TESTING_Command *cmd,
     135              :                 struct TALER_TESTING_Interpreter *is)
     136              : {
     137            4 :   struct PostDonauState *pds = cls;
     138              : 
     139            4 :   pds->is = is;
     140            4 :   pds->charity.charity_url = TALER_TESTING_get_donau_url (is);
     141            4 :   pds->dph = TALER_MERCHANT_post_private_donau_create (
     142              :     TALER_TESTING_interpreter_get_context (is),
     143              :     pds->merchant_url,
     144            4 :     &pds->charity);
     145              :   {
     146              :     enum TALER_ErrorCode ec;
     147              : 
     148            4 :     ec = TALER_MERCHANT_post_private_donau_start (pds->dph,
     149              :                                                   &post_donau_cb,
     150              :                                                   pds);
     151            4 :     GNUNET_assert (TALER_EC_NONE == ec);
     152              :   }
     153            4 : }
     154              : 
     155              : 
     156              : /**
     157              :  * Free the state of a "POST /donau" CMD, and possibly
     158              :  * cancel a pending operation thereof.
     159              :  *
     160              :  * @param cls closure.
     161              :  * @param cmd command being run.
     162              :  */
     163              : static void
     164            4 : post_donau_cleanup (void *cls,
     165              :                     const struct TALER_TESTING_Command *cmd)
     166              : {
     167            4 :   struct PostDonauState *pds = cls;
     168              : 
     169            4 :   if (NULL != pds->dph)
     170              :   {
     171            0 :     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
     172              :                 "POST /donau operation did not complete\n");
     173            0 :     TALER_MERCHANT_post_private_donau_cancel (pds->dph);
     174              :   }
     175            4 :   GNUNET_free (pds);
     176            4 : }
     177              : 
     178              : 
     179              : /**
     180              :  * Create a new testing command for POST /donau.
     181              :  */
     182              : struct TALER_TESTING_Command
     183            4 : TALER_TESTING_cmd_merchant_post_donau_instance (
     184              :   const char *label,
     185              :   const char *url,
     186              :   const char *merchant_reference,
     187              :   unsigned int
     188              :   expected_http_status,
     189              :   ...)
     190              : {
     191            4 :   struct PostDonauState *pds = GNUNET_new (struct PostDonauState);
     192              :   struct TALER_Amount max_amount;
     193              :   struct TALER_Amount date_amount;
     194              : 
     195            4 :   const char*mamount = "EUR:100";
     196            4 :   const char*damount = "EUR:20";
     197              : 
     198            4 :   GNUNET_assert (GNUNET_OK ==
     199              :                  TALER_string_to_amount (mamount,
     200              :                                          &max_amount));
     201              : 
     202            4 :   GNUNET_assert (GNUNET_OK ==
     203              :                  TALER_string_to_amount (damount,
     204              :                                          &date_amount));
     205              : 
     206              :   {
     207            4 :     struct TALER_MERCHANT_Charity charity = {
     208              :       .charity_url = "http://replaced.in.post_donau_run/",
     209              :       .charity_id = 1,
     210              :     };
     211              : 
     212            4 :     pds->merchant_reference = merchant_reference;
     213            4 :     pds->merchant_url = url;
     214            4 :     pds->charity = charity;
     215            4 :     pds->http_status = expected_http_status;
     216              : 
     217              :     {
     218            4 :       struct TALER_TESTING_Command cmd = {
     219              :         .cls = pds,
     220              :         .label = label,
     221              :         .run = &post_donau_run,
     222              :         .cleanup = &post_donau_cleanup
     223              :       };
     224              : 
     225            4 :       return cmd;
     226              :     }
     227              : 
     228              :   }
     229              : }
        

Generated by: LCOV version 2.0-1