diff options
Diffstat (limited to 'src/testing/test_bank_api.c')
-rw-r--r-- | src/testing/test_bank_api.c | 196 |
1 files changed, 92 insertions, 104 deletions
diff --git a/src/testing/test_bank_api.c b/src/testing/test_bank_api.c index b0b61a166..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,23 +34,26 @@ #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. + * Configuration file. It changes based on + * whether Nexus or Fakebank are used. */ -static struct TALER_TESTING_BankConfiguration bc; +static const char *cfgfile; /** - * Handle to the Py-bank daemon. + * Our credentials. */ -static struct GNUNET_OS_Process *bankd; +static struct TALER_TESTING_Credentials cred; /** - * Flag indicating whether the test is running against the - * Fakebank. Set up at runtime. + * Which bank is the test running against? + * Set up at runtime. */ -static int with_fakebank; +static enum TALER_TESTING_BankSystem bs; /** @@ -64,40 +67,76 @@ run (void *cls, struct TALER_TESTING_Interpreter *is) { struct TALER_WireTransferIdentifierRawP wtid; + const char *ssoptions; - memset (&wtid, 42, sizeof (wtid)); + (void) cls; + 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", + "EUR:2.01", + &cred.ba_admin, + cred.user42_payto, + "credit-1", + -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_bank_debits ("history-2b", - &bc.exchange_auth, + &cred.ba, NULL, 5), TALER_TESTING_cmd_end () @@ -105,104 +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) { - const char *cfgfilename; - int rv; - - /* 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) + (void) argc; + if (TALER_TESTING_has_in_name (argv[0], + "_with_fakebank")) { - TALER_LOG_DEBUG ("Running against the Fakebank.\n"); - cfgfilename = CONFIG_FILE_FAKEBANK; - if (GNUNET_OK != - TALER_TESTING_prepare_fakebank (CONFIG_FILE_FAKEBANK, - "exchange-account-2", - &bc)) - { - GNUNET_break (0); - return 77; - } + bs = TALER_TESTING_BS_FAKEBANK; + cfgfile = CONFIG_FILE_FAKEBANK; } - else + else if (TALER_TESTING_has_in_name (argv[0], + "_with_nexus")) { - TALER_LOG_DEBUG ("Running against the Pybank.\n"); - cfgfilename = CONFIG_FILE_PYBANK; - if (GNUNET_OK != - TALER_TESTING_prepare_bank (CONFIG_FILE_PYBANK, - GNUNET_YES, - "exchange-account-2", - &bc)) + bs = TALER_TESTING_BS_IBAN; + cfgfile = CONFIG_FILE_NEXUS; + if (GNUNET_SYSERR == + GNUNET_OS_check_helper_binary ("libeufin-bank", + false, + NULL)) { - GNUNET_break (0); - return 77; - } - - if (NULL == (bankd = TALER_TESTING_run_bank (CONFIG_FILE_PYBANK, - bc.exchange_auth. - wire_gateway_url))) - { - GNUNET_break (0); + fprintf (stderr, + "libeufin-bank not found. Skipping test.\n"); return 77; } } - if (GNUNET_OK != - GNUNET_CONFIGURATION_parse_and_run (cfgfilename, - &setup_with_cfg, - NULL)) - rv = 1; else - rv = 0; - if (GNUNET_NO == with_fakebank) { - - GNUNET_OS_process_kill (bankd, - SIGKILL); - GNUNET_OS_process_wait (bankd); - GNUNET_OS_process_destroy (bankd); + /* no bank service was specified. */ + GNUNET_break (0); + return 77; } - return rv; + return TALER_TESTING_main (argv, + "INFO", + cfgfile, + "exchange-account-2", + bs, + &cred, + &run, + NULL); } |