exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

test_auditor_api_version.c (6374B)


      1 /*
      2   This file is part of TALER
      3   Copyright (C) 2014-2023 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 testing/test_auditor_api_version.c
     21  * @brief testcase to test auditor's HTTP API interface to fetch /version
     22  * @author Christian Grothoff
     23  * @author Marcello Stanisci
     24  */
     25 #include "platform.h"
     26 #include "taler/taler_util.h"
     27 #include "taler/taler_signatures.h"
     28 #include "taler/taler_auditor_service.h"
     29 #include "taler/taler_json_lib.h"
     30 #include <gnunet/gnunet_util_lib.h>
     31 #include <microhttpd.h>
     32 #include "taler/taler_bank_service.h"
     33 #include "taler/taler_testing_lib.h"
     34 
     35 
     36 /**
     37  * Configuration file we use.  One (big) configuration is used
     38  * for the various components for this test.
     39  */
     40 #define CONFIG_FILE "test_auditor_api-rsa.conf"
     41 
     42 static struct TALER_AUDITOR_GetConfigHandle *ah;
     43 
     44 static struct GNUNET_CURL_Context *ctx;
     45 
     46 static struct GNUNET_CURL_RescheduleContext *rc;
     47 
     48 static int global_ret;
     49 
     50 static struct GNUNET_SCHEDULER_Task *tt;
     51 
     52 
     53 static void
     54 do_shutdown (void *cls)
     55 {
     56   (void) cls;
     57 
     58   if (NULL != tt)
     59   {
     60     GNUNET_SCHEDULER_cancel (tt);
     61     tt = NULL;
     62   }
     63   if (NULL != ah)
     64   {
     65     TALER_AUDITOR_get_config_cancel (ah);
     66     ah = NULL;
     67   }
     68   GNUNET_CURL_fini (ctx);
     69   GNUNET_CURL_gnunet_rc_destroy (rc);
     70 }
     71 
     72 
     73 static void
     74 do_timeout (void *cls)
     75 {
     76   (void) cls;
     77   tt = NULL;
     78   global_ret = 3;
     79   GNUNET_SCHEDULER_shutdown ();
     80 }
     81 
     82 
     83 /**
     84  * Function called with information about the auditor.
     85  *
     86  * @param cls closure
     87  * @param vr response details
     88  */
     89 static void
     90 version_cb (void *cls,
     91             const struct TALER_AUDITOR_ConfigResponse *vr)
     92 {
     93   (void) cls;
     94   ah = NULL;
     95   if ( (MHD_HTTP_OK == vr->hr.http_status) &&
     96        (TALER_AUDITOR_VC_MATCH == vr->details.ok.compat) )
     97     global_ret = 0;
     98   else
     99     global_ret = 2;
    100   GNUNET_SCHEDULER_shutdown ();
    101 }
    102 
    103 
    104 /**
    105  * Main function that will tell the interpreter what commands to
    106  * run.
    107  *
    108  * @param cls closure
    109  */
    110 static void
    111 run (void *cls)
    112 {
    113   const char *auditor_url = "http://localhost:8083/";
    114 
    115   (void) cls;
    116   ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
    117                           &rc);
    118   rc = GNUNET_CURL_gnunet_rc_create (ctx);
    119   ah = TALER_AUDITOR_get_config (ctx,
    120                                  auditor_url,
    121                                  &version_cb,
    122                                  NULL);
    123   GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
    124                                  NULL);
    125   tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
    126                                      &do_timeout,
    127                                      NULL);
    128 }
    129 
    130 
    131 int
    132 main (int argc,
    133       char *const *argv)
    134 {
    135   struct GNUNET_Process *proc;
    136 
    137   (void) argc;
    138   (void) argv;
    139   /* These environment variables get in the way... */
    140   unsetenv ("XDG_DATA_HOME");
    141   unsetenv ("XDG_CONFIG_HOME");
    142   GNUNET_log_setup ("test-auditor-api-version",
    143                     "INFO",
    144                     NULL);
    145   proc = GNUNET_process_create (GNUNET_OS_INHERIT_STD_ALL);
    146   if (GNUNET_OK !=
    147       GNUNET_process_run_command_va (proc,
    148                                      "taler-auditor-dbinit",
    149                                      "taler-auditor-dbinit",
    150                                      "-c", CONFIG_FILE,
    151                                      "-L", "INFO",
    152                                      NULL))
    153   {
    154     GNUNET_log (
    155       GNUNET_ERROR_TYPE_ERROR,
    156       "Failed to run `taler-auditor-dbinit`, is your PATH correct?\n");
    157     GNUNET_process_destroy (proc);
    158     return 77;
    159   }
    160   GNUNET_break (GNUNET_OK ==
    161                 GNUNET_process_wait (proc,
    162                                      true,
    163                                      NULL,
    164                                      NULL));
    165   GNUNET_process_destroy (proc);
    166   proc = GNUNET_process_create (GNUNET_OS_INHERIT_STD_ALL);
    167   if (GNUNET_OK !=
    168       GNUNET_process_run_command_va (proc,
    169                                      "taler-exchange-dbinit",
    170                                      "taler-exchange-dbinit",
    171                                      "-c", CONFIG_FILE,
    172                                      "-L", "INFO",
    173                                      NULL))
    174   {
    175     GNUNET_log (
    176       GNUNET_ERROR_TYPE_ERROR,
    177       "Failed to run `taler-auditor-dbinit`, is your PATH correct?\n");
    178     GNUNET_process_destroy (proc);
    179     return 77;
    180   }
    181   GNUNET_break (GNUNET_OK ==
    182                 GNUNET_process_wait (proc,
    183                                      true,
    184                                      NULL,
    185                                      NULL));
    186   GNUNET_process_destroy (proc);
    187   proc = GNUNET_process_create (GNUNET_OS_INHERIT_STD_ALL);
    188   if (GNUNET_OK !=
    189       GNUNET_process_run_command_va (proc,
    190                                      "taler-auditor-httpd",
    191                                      "taler-auditor-httpd",
    192                                      "-c", CONFIG_FILE,
    193                                      "-L", "INFO",
    194                                      NULL))
    195   {
    196     GNUNET_log (
    197       GNUNET_ERROR_TYPE_ERROR,
    198       "Failed to run `taler-auditor-httpd`, is your PATH correct?\n");
    199     GNUNET_process_destroy (proc);
    200     return 77;
    201   }
    202   global_ret = TALER_TESTING_wait_httpd_ready ("http://localhost:8083/");
    203   if (0 != global_ret)
    204   {
    205     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
    206                 "Failed to launch `taler-auditor-httpd`\n");
    207   }
    208   else
    209   {
    210     GNUNET_SCHEDULER_run (&run,
    211                           NULL);
    212   }
    213   GNUNET_break (GNUNET_OK ==
    214                 GNUNET_process_kill (proc,
    215                                      SIGTERM));
    216   GNUNET_break (GNUNET_OK ==
    217                 GNUNET_process_wait (proc,
    218                                      true,
    219                                      NULL,
    220                                      NULL));
    221   GNUNET_process_destroy (proc);
    222   return global_ret;
    223 }
    224 
    225 
    226 /* end of test_auditor_api_version.c */