diff options
Diffstat (limited to 'src/testing/test_bank_api.c')
-rw-r--r-- | src/testing/test_bank_api.c | 248 |
1 files changed, 83 insertions, 165 deletions
diff --git a/src/testing/test_bank_api.c b/src/testing/test_bank_api.c index d81fbe36e..8cbc86bbd 100644 --- a/src/testing/test_bank_api.c +++ b/src/testing/test_bank_api.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016-2020 Taler Systems SA + Copyright (C) 2016-2023 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 @@ -34,34 +34,27 @@ #include "taler_testing_lib.h" #define CONFIG_FILE_FAKEBANK "test_bank_api_fakebank.conf" -#define CONFIG_FILE_PYBANK "test_bank_api_pybank.conf" + #define CONFIG_FILE_NEXUS "test_bank_api_nexus.conf" -/** - * Bank configuration data. - */ -static struct TALER_TESTING_BankConfiguration bc; /** - * Handle to the Py-bank daemon. + * Configuration file. It changes based on + * whether Nexus or Fakebank are used. */ -static struct GNUNET_OS_Process *bankd; +static const char *cfgfile; /** - * Flag indicating whether the test is running against the - * Fakebank. Set up at runtime. + * Our credentials. */ -static int with_fakebank; +static struct TALER_TESTING_Credentials cred; /** - * Handles to the libeufin services. + * Which bank is the test running against? + * Set up at runtime. */ -static struct TALER_TESTING_LibeufinServices libeufin_services; +static enum TALER_TESTING_BankSystem bs; -/** - * Needed to shutdown differently. - */ -static int with_libeufin; /** * Main function that will tell the interpreter what commands to @@ -74,52 +67,76 @@ run (void *cls, struct TALER_TESTING_Interpreter *is) { struct TALER_WireTransferIdentifierRawP wtid; + const char *ssoptions; (void) cls; - memset (&wtid, 42, sizeof (wtid)); + switch (bs) + { + case TALER_TESTING_BS_FAKEBANK: + ssoptions = "-f"; + break; + case TALER_TESTING_BS_IBAN: + ssoptions = "-b"; + break; + default: + ssoptions = NULL; + break; + } + memset (&wtid, + 42, + sizeof (wtid)); { struct TALER_TESTING_Command commands[] = { + TALER_TESTING_cmd_system_start ("start-taler", + cfgfile, + ssoptions, + NULL), TALER_TESTING_cmd_bank_credits ("history-0", - &bc.exchange_auth, + &cred.ba, NULL, 1), TALER_TESTING_cmd_admin_add_incoming ("credit-1", - "KUDOS:5.01", - &bc.exchange_auth, - bc.user42_payto), + "EUR:5.01", + &cred.ba_admin, + cred.user42_payto), + /** + * This CMD doesn't care about the HTTP response code; that's + * because Fakebank and euFin behaves differently when a reserve + * pub is duplicate. Fakebank responds with 409, whereas euFin + * with 200 but it bounces the payment back to the customer. + */ TALER_TESTING_cmd_admin_add_incoming_with_ref ("credit-1-fail", - "KUDOS:2.01", - &bc.exchange_auth, - bc.user42_payto, + "EUR:2.01", + &cred.ba_admin, + cred.user42_payto, "credit-1", - MHD_HTTP_CONFLICT), - TALER_TESTING_cmd_sleep ("Waiting 4s for 'credit-1' to settle", - 4), + -1), + /** + * Check that the incoming payment with a duplicate + * reserve public key didn't make it to the exchange. + */ TALER_TESTING_cmd_bank_credits ("history-1c", - &bc.exchange_auth, + &cred.ba, NULL, 5), TALER_TESTING_cmd_bank_debits ("history-1d", - &bc.exchange_auth, + &cred.ba, NULL, 5), TALER_TESTING_cmd_admin_add_incoming ("credit-2", - "KUDOS:3.21", - &bc.exchange_auth, - bc.user42_payto), + "EUR:3.21", + &cred.ba_admin, + cred.user42_payto), TALER_TESTING_cmd_transfer ("debit-1", - "KUDOS:3.22", - &bc.exchange_auth, - bc.exchange_payto, - bc.user42_payto, + "EUR:3.22", + &cred.ba, + cred.exchange_payto, + cred.user42_payto, &wtid, "http://exchange.example.com/"), - - TALER_TESTING_cmd_sleep ("Waiting 5s for 'debit-1' to settle", - 5), TALER_TESTING_cmd_bank_debits ("history-2b", - &bc.exchange_auth, + &cred.ba, NULL, 5), TALER_TESTING_cmd_end () @@ -127,152 +144,53 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Bank serves at `%s'\n", - bc.exchange_auth.wire_gateway_url); - if (GNUNET_YES == with_fakebank) - TALER_TESTING_run_with_fakebank (is, - commands, - bc.exchange_auth.wire_gateway_url); - else - TALER_TESTING_run (is, - commands); + cred.ba.wire_gateway_url); + TALER_TESTING_run (is, + commands); } } -/** - * Runs #TALER_TESTING_setup() using the configuration. - * - * @param cls unused - * @param cfg configuration to use - * @return status code - */ -static int -setup_with_cfg (void *cls, - const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - (void) cls; - return TALER_TESTING_setup (&run, - NULL, - cfg, - NULL, - GNUNET_NO); -} - - int main (int argc, char *const *argv) { - int rv; - const char *cfgfile; - (void) argc; - (void) argv; - /* These environment variables get in the way... */ - unsetenv ("XDG_DATA_HOME"); - unsetenv ("XDG_CONFIG_HOME"); - GNUNET_log_setup ("test-bank-api", - "DEBUG", - NULL); - - with_fakebank = TALER_TESTING_has_in_name (argv[0], - "_with_fakebank"); - if (GNUNET_YES == with_fakebank) + if (TALER_TESTING_has_in_name (argv[0], + "_with_fakebank")) { - TALER_LOG_DEBUG ("Running against the Fakebank.\n"); + bs = TALER_TESTING_BS_FAKEBANK; cfgfile = CONFIG_FILE_FAKEBANK; - if (GNUNET_OK != - TALER_TESTING_prepare_fakebank (CONFIG_FILE_FAKEBANK, - "exchange-account-2", - &bc)) - { - GNUNET_break (0); - return 77; - } } - else if (GNUNET_YES == TALER_TESTING_has_in_name (argv[0], - "_with_pybank")) + else if (TALER_TESTING_has_in_name (argv[0], + "_with_nexus")) { - TALER_LOG_DEBUG ("Running against the Pybank.\n"); - cfgfile = CONFIG_FILE_PYBANK; - if (GNUNET_OK != - TALER_TESTING_prepare_bank (CONFIG_FILE_PYBANK, - GNUNET_YES, - "exchange-account-2", - &bc)) - { - GNUNET_break (0); - return 77; - } - - if (NULL == (bankd = TALER_TESTING_run_bank ( - CONFIG_FILE_PYBANK, - bc.exchange_auth.wire_gateway_url))) - { - GNUNET_break (0); - return 77; - } - } - else if (GNUNET_YES == TALER_TESTING_has_in_name (argv[0], - "_with_nexus")) - { - TALER_LOG_DEBUG ("Running with Nexus.\n"); - with_libeufin = GNUNET_YES; + bs = TALER_TESTING_BS_IBAN; cfgfile = CONFIG_FILE_NEXUS; - if (GNUNET_OK != - TALER_TESTING_prepare_nexus (CONFIG_FILE_NEXUS, - GNUNET_YES, - "exchange-account-2", - &bc)) + if (GNUNET_SYSERR == + GNUNET_OS_check_helper_binary ("libeufin-bank", + false, + NULL)) { - GNUNET_break (0); + fprintf (stderr, + "libeufin-bank not found. Skipping test.\n"); return 77; } - libeufin_services = TALER_TESTING_run_libeufin (&bc); - if ( (NULL == libeufin_services.nexus) || - (NULL == libeufin_services.sandbox) ) - return 77; } else { - /* no bank service was ever invoked. */ + /* no bank service was specified. */ + GNUNET_break (0); return 77; } - - if (GNUNET_OK != - GNUNET_CONFIGURATION_parse_and_run (cfgfile, - &setup_with_cfg, - NULL)) - rv = 1; - else - rv = 0; - - if (GNUNET_NO == with_fakebank) - { - // -> pybank - if (GNUNET_NO == with_libeufin) - { - - GNUNET_OS_process_kill (bankd, - SIGKILL); - GNUNET_OS_process_wait (bankd); - GNUNET_OS_process_destroy (bankd); - } - else // -> libeufin - { - GNUNET_OS_process_kill (libeufin_services.nexus, - SIGKILL); - GNUNET_OS_process_wait (libeufin_services.nexus); - GNUNET_OS_process_destroy (libeufin_services.nexus); - - GNUNET_OS_process_kill (libeufin_services.sandbox, - SIGKILL); - GNUNET_OS_process_wait (libeufin_services.sandbox); - GNUNET_OS_process_destroy (libeufin_services.sandbox); - } - } - - return rv; + return TALER_TESTING_main (argv, + "INFO", + cfgfile, + "exchange-account-2", + bs, + &cred, + &run, + NULL); } |