diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | contrib/Makefile.am | 3 | ||||
-rwxr-xr-x | contrib/taler-nexus-prepare | 128 | ||||
-rw-r--r-- | src/include/taler_testing_lib.h | 18 | ||||
-rw-r--r-- | src/json/json_wire.c | 13 | ||||
-rw-r--r-- | src/json/test_json_wire.c | 40 | ||||
-rw-r--r-- | src/lib/exchange_api_refund.c | 1 | ||||
-rw-r--r-- | src/testing/test_bank_api.c | 54 | ||||
-rw-r--r-- | src/testing/test_bank_api_nexus.conf | 8 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_deposits_get.c | 2 | ||||
-rw-r--r-- | src/testing/testing_api_helpers_bank.c | 187 |
11 files changed, 328 insertions, 128 deletions
diff --git a/configure.ac b/configure.ac index c8a824f76..a51b32475 100644 --- a/configure.ac +++ b/configure.ac @@ -180,8 +180,6 @@ AS_IF([test "x$curl" = x1],[ AC_CHECK_HEADER([curl/curl.h], AC_CHECK_DECLS(CURLINFO_TLS_SESSION,[curl=1],[curl=0],[[#include <curl/curl.h>]]), [curl=0]) - # need libcurl-gnutls.so, everything else is not acceptable - AC_CHECK_LIB([curl-gnutls],[curl_easy_getinfo],,[curl=0]) # cURL must support CURLINFO_TLS_SESSION, version >= 7.34 ]) diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 2e1160f53..b706202d7 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -27,7 +27,8 @@ rdata_DATA = \ bin_SCRIPTS = \ taler-bank-manage-testing \ - taler-exchange-revoke + taler-exchange-revoke \ + taler-nexus-prepare EXTRA_DIST = \ $(bin_SCRIPTS) \ diff --git a/contrib/taler-nexus-prepare b/contrib/taler-nexus-prepare new file mode 100755 index 000000000..66a0b1c1e --- /dev/null +++ b/contrib/taler-nexus-prepare @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +# This file is in the public domain. + +from requests import get, post +from subprocess import call +import base64 + +# EBICS details +EBICS_URL = "http://localhost:5000/ebicsweb" +HOST_ID = "HOST01" +PARTNER_ID = "PARTNER1" +USER_ID = "USER1" +EBICS_VERSION = "H004" + +SUBSCRIBER_IBAN = "ES9121000418450200051332" +SUBSCRIBER_BIC = "BIC" +SUBSCRIBER_NAME = "Exchange" + +BANK_ACCOUNT_LABEL = "my-bank-account" +BANK_CONNECTION_LABEL = "my-bank-connection" +FACADE_LABEL="my-facade" + +USERNAME="Exchange" +USER_AUTHORIZATION_HEADER = "basic {}".format( + base64.b64encode(b"Exchange:x").decode("utf-8") +) + +def assertResponse(response): + if response.status_code != 200: + print("Test failed on URL: {}".format(response.url)) + # stdout/stderr from both services is A LOT of text. + # Confusing to dump all that to console. + print("Check nexus.log and sandbox.log, probably under /tmp") + exit(1) + # Allows for finer grained checks. + return response + +# Create a nexus (super-) user +check_call(["libeufin-nexus", + "superuser", + "--db-name", "/tmp/nexus-exchange-test.sqlite3", + "Exchange", + "--password", "x"] +) + +# Create a EBICS bank connection. +assertResponse( + post( + "http://localhost:5001/bank-connections", + json=dict( + name=BANK_CONNECTION_LABEL, + source="new", + type="ebics", + data=dict( + ebicsURL=EBICS_URL, hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID + ), + ), + headers=dict(Authorization=USER_AUTHORIZATION_HEADER), + ) +) + +# Create a facade +assertResponse( + post( + "http://localhost:5001/facades", + json=dict( + name=FACADE_LABEL, + type="taler-wire-gateway", + creator=USERNAME, + config=dict( + bankAccount=BANK_ACCOUNT_LABEL, + bankConnection=BANK_CONNECTION_LABEL, + reserveTransferLevel="UNUSED", + intervalIncremental="UNUSED" + ) + ), + headers=dict(Authorization=USER_AUTHORIZATION_HEADER), + ) +) + +# Create the EBICS host at the Sandbox. +assertResponse( + post( + "http://localhost:5000/admin/ebics/host", + json=dict(hostID=HOST_ID, ebicsVersion=EBICS_VERSION), + ) +) + +# Create Exchange EBICS subscriber at the Sandbox. +assertResponse( + post( + "http://localhost:5000/admin/ebics/subscribers", + json=dict(hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID), + ) +) + +# Create a bank account associated to the Exchange's EBICS subscriber, +# again at the Sandbox. +assertResponse( + post( + "http://localhost:5000/admin/ebics/bank-accounts", + json=dict( + subscriber=dict(hostID=HOST_ID, partnerID=PARTNER_ID, userID=USER_ID), + iban=SUBSCRIBER_IBAN, + bic=SUBSCRIBER_BIC, + name=SUBSCRIBER_NAME, + label=BANK_ACCOUNT_LABEL, + ), + ) +) + +# 'connect' to the bank: upload+download keys. +assertResponse( + post( + "http://localhost:5001/bank-connections/{}/connect".format(BANK_CONNECTION_LABEL), + json=dict(), + headers=dict(Authorization=USER_AUTHORIZATION_HEADER), + ) +) + +# Download bank accounts. +assertResponse( + post( + "http://localhost:5001/bank-connections/{}/ebics/import-accounts".format(BANK_CONNECTION_LABEL), + json=dict(), + headers=dict(Authorization=USER_AUTHORIZATION_HEADER), + ) +) diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index f81acb99d..d4251364f 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -111,6 +111,20 @@ struct TALER_TESTING_DatabaseConnection struct TALER_EXCHANGEDB_Session *session; }; +struct TALER_TESTING_LibeufinServices +{ + /** + * Nexus + */ + struct GNUNET_OS_Process *nexus; + + /** + * Sandbox + */ + struct GNUNET_OS_Process *sandbox; + +}; + /** * Prepare launching an exchange. Checks that the configured * port is available, runs taler-exchange-keyup, @@ -835,8 +849,8 @@ TALER_TESTING_run_bank (const char *config_filename, * @return the process, or NULL if the process could not * be started. */ -struct GNUNET_OS_Process * -TALER_TESTING_run_nexus (const struct TALER_TESTING_BankConfiguration *bc); +struct TALER_TESTING_LibeufinServices +TALER_TESTING_run_libeufin (const struct TALER_TESTING_BankConfiguration *bc); /** diff --git a/src/json/json_wire.c b/src/json/json_wire.c index 1cd3fd7d5..7d3453e16 100644 --- a/src/json/json_wire.c +++ b/src/json/json_wire.c @@ -281,7 +281,15 @@ validate_iban (const char *iban) j++; } for (j = 0; '\0' != nbuf[j]; j++) - GNUNET_assert (isdigit ( (unsigned char) nbuf[j])); + { + if (! isdigit ( (unsigned char) nbuf[j])) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "IBAN `%s' didn't convert to numeric format\n", + iban); + return GNUNET_NO; + } + } GNUNET_assert (sizeof(dividend) >= 8); remainder = 0; for (unsigned int i = 0; i<j; i += 16) @@ -335,7 +343,8 @@ validate_payto_iban (const char *account_url) IBAN_PREFIX, strlen (IBAN_PREFIX))) return GNUNET_NO; - iban = &account_url[strlen (IBAN_PREFIX)]; + + iban = strrchr (account_url, '/') + 1; #undef IBAN_PREFIX q = strchr (iban, '?'); diff --git a/src/json/test_json_wire.c b/src/json/test_json_wire.c index 2725173b2..75208c40a 100644 --- a/src/json/test_json_wire.c +++ b/src/json/test_json_wire.c @@ -30,9 +30,12 @@ main (int argc, { struct TALER_MasterPublicKeyP master_pub; struct TALER_MasterPrivateKeyP master_priv; - json_t *wire; - const char *payto = "payto://x-taler-bank/42"; - char *p; + json_t *wire_xtalerbank; + json_t *wire_iban; + const char *payto_xtalerbank = "payto://x-taler-bank/42"; + const char *payto_iban = "payto://iban/BIC-TO-BE-SKIPPED/DE89370400440532013000"; + char *p_xtalerbank; + char *p_iban; (void) argc; (void) argv; @@ -42,15 +45,32 @@ main (int argc, GNUNET_CRYPTO_eddsa_key_create (&master_priv.eddsa_priv); GNUNET_CRYPTO_eddsa_key_get_public (&master_priv.eddsa_priv, &master_pub.eddsa_pub); - wire = TALER_JSON_exchange_wire_signature_make (payto, - &master_priv); - p = TALER_JSON_wire_to_payto (wire); - GNUNET_assert (0 == strcmp (p, payto)); - GNUNET_free (p); + wire_xtalerbank = TALER_JSON_exchange_wire_signature_make (payto_xtalerbank, + &master_priv); + wire_iban = TALER_JSON_exchange_wire_signature_make (payto_iban, + &master_priv); + if (NULL == wire_iban) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Could not parse payto/IBAN (%s) into 'wire object'\n", + payto_iban); + return 1; + } + p_xtalerbank = TALER_JSON_wire_to_payto (wire_xtalerbank); + p_iban = TALER_JSON_wire_to_payto (wire_iban); + GNUNET_assert (0 == strcmp (p_xtalerbank, payto_xtalerbank)); + GNUNET_assert (0 == strcmp (p_iban, payto_iban)); + GNUNET_free (p_xtalerbank); + GNUNET_free (p_iban); + + GNUNET_assert (GNUNET_OK == + TALER_JSON_exchange_wire_signature_check (wire_xtalerbank, + &master_pub)); GNUNET_assert (GNUNET_OK == - TALER_JSON_exchange_wire_signature_check (wire, + TALER_JSON_exchange_wire_signature_check (wire_iban, &master_pub)); - json_decref (wire); + json_decref (wire_xtalerbank); + json_decref (wire_iban); return 0; } diff --git a/src/lib/exchange_api_refund.c b/src/lib/exchange_api_refund.c index 6f91389f1..1af1f14b9 100644 --- a/src/lib/exchange_api_refund.c +++ b/src/lib/exchange_api_refund.c @@ -156,6 +156,7 @@ handle_refund_finished (void *cls, .http_status = (unsigned int) response_code }; + rh->job = NULL; switch (response_code) { diff --git a/src/testing/test_bank_api.c b/src/testing/test_bank_api.c index 2a709fb1c..3a3fd353b 100644 --- a/src/testing/test_bank_api.c +++ b/src/testing/test_bank_api.c @@ -53,6 +53,15 @@ static struct GNUNET_OS_Process *bankd; */ static int with_fakebank; +/** + * Handles to the libeufin services. + */ +static struct TALER_TESTING_LibeufinServices libeufin_services; + +/** + * Needed to shutdown differently. + */ +static int with_libeufin; /** * Main function that will tell the interpreter what commands to @@ -78,6 +87,8 @@ run (void *cls, "KUDOS:5.01", &bc.exchange_auth, bc.user42_payto), + TALER_TESTING_cmd_sleep ("Waiting 4s for 'credit-1' to settle", + 4), TALER_TESTING_cmd_bank_credits ("history-1c", &bc.exchange_auth, NULL, @@ -97,6 +108,9 @@ run (void *cls, bc.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, NULL, @@ -192,8 +206,9 @@ main (int argc, } else if (GNUNET_YES == TALER_TESTING_has_in_name (argv[0], "_with_nexus")) { - TALER_LOG_DEBUG ("Running against Nexus.\n"); - cfgfile = CONFIG_FILE_FAKEBANK; + TALER_LOG_DEBUG ("Running with Nexus.\n"); + with_libeufin = GNUNET_YES; + cfgfile = CONFIG_FILE_NEXUS; if (GNUNET_OK != TALER_TESTING_prepare_nexus (CONFIG_FILE_NEXUS, GNUNET_YES, "exchange-account-2", @@ -202,19 +217,16 @@ main (int argc, GNUNET_break (0); return 77; } - if (NULL == (bankd = TALER_TESTING_run_nexus (&bc))) + libeufin_services = TALER_TESTING_run_libeufin (&bc); + if ( (NULL == libeufin_services.nexus) || (NULL == libeufin_services.sandbox) ) { GNUNET_break (0); return 77; } - GNUNET_OS_process_kill (bankd, - SIGKILL); - GNUNET_OS_process_wait (bankd); - GNUNET_OS_process_destroy (bankd); - return 0; } else { + /* no bank service was ever invoked. */ GNUNET_break (0); return 77; } @@ -226,14 +238,32 @@ main (int argc, 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 (bankd, - SIGKILL); - GNUNET_OS_process_wait (bankd); - GNUNET_OS_process_destroy (bankd); + GNUNET_OS_process_kill (libeufin_services.sandbox, + SIGKILL); + GNUNET_OS_process_wait (libeufin_services.sandbox); + GNUNET_OS_process_destroy (libeufin_services.sandbox); + } } + return rv; } diff --git a/src/testing/test_bank_api_nexus.conf b/src/testing/test_bank_api_nexus.conf index 4635b2105..a437180f8 100644 --- a/src/testing/test_bank_api_nexus.conf +++ b/src/testing/test_bank_api_nexus.conf @@ -4,10 +4,12 @@ currency = KUDOS [exchange-account-2] -PAYTO_URI = payto://iban/IBAN/UNUSED -METHOD = x-taler-bank -WIRE_GATEWAY_URL = http://localhost:5001/taler +PAYTO_URI = payto://iban/BIC/ES9121000418450200051332?receiver-name=Exchange +METHOD = iban +WIRE_GATEWAY_URL = http://localhost:5001/facades/my-facade/taler/ WIRE_GATEWAY_AUTH_METHOD = basic +# the exchange authenticates as the 'admin' user, +# since that makes the test preparation just easier. USERNAME = Exchange PASSWORD = x diff --git a/src/testing/testing_api_cmd_deposits_get.c b/src/testing/testing_api_cmd_deposits_get.c index 33987e161..d5617ec25 100644 --- a/src/testing/testing_api_cmd_deposits_get.c +++ b/src/testing/testing_api_cmd_deposits_get.c @@ -147,6 +147,8 @@ deposit_wtid_cb (void *cls, return; } } + + break; case MHD_HTTP_ACCEPTED: /* allowed, nothing to check here */ diff --git a/src/testing/testing_api_helpers_bank.c b/src/testing/testing_api_helpers_bank.c index e8476d30d..ff5caa11b 100644 --- a/src/testing/testing_api_helpers_bank.c +++ b/src/testing/testing_api_helpers_bank.c @@ -104,38 +104,37 @@ TALER_TESTING_has_in_name (const char *prog, * Start the (nexus) bank process. Assume the port * is available and the database is clean. Use the "prepare * bank" function to do such tasks. This function is also - * responsible to create the exchange EBICS subscriber at - * the nexus. + * responsible to create the exchange user at Nexus. * - * @param config_filename configuration filename. Used to - * @return the process, or NULL if the process could not - * be started. + * @return the pair of both service handles. In case of + * errors, each element of the pair will be set to NULL. */ -struct GNUNET_OS_Process * -TALER_TESTING_run_nexus (const struct TALER_TESTING_BankConfiguration *bc) +struct TALER_TESTING_LibeufinServices +TALER_TESTING_run_libeufin (const struct TALER_TESTING_BankConfiguration *bc) { - struct GNUNET_OS_Process *bank_proc; + struct GNUNET_OS_Process *nexus_proc; + struct GNUNET_OS_Process *sandbox_proc; + struct TALER_TESTING_LibeufinServices ret = { 0 }; unsigned int iter; char *curl_check_cmd; - char *curl_cmd; - char *post_body; - char *register_url; - bank_proc = GNUNET_OS_start_process - (GNUNET_NO, - GNUNET_OS_INHERIT_STD_NONE, - NULL, NULL, NULL, - "nexus", - "nexus", - NULL); - if (NULL == bank_proc) + nexus_proc = GNUNET_OS_start_process + (GNUNET_NO, + GNUNET_OS_INHERIT_STD_NONE, + NULL, NULL, NULL, + "libeufin-nexus", + "libeufin-nexus", + "serve", + "--db-name", "/tmp/nexus-exchange-test.sqlite3", + NULL); + if (NULL == nexus_proc) { - BANK_FAIL (); + GNUNET_break (0); + return ret; } GNUNET_asprintf (&curl_check_cmd, "curl -s %s", bc->exchange_auth.wire_gateway_url); - /* give child time to start and bind against the socket */ fprintf (stderr, "Waiting for `nexus' to be ready (via %s)\n", curl_check_cmd); @@ -147,12 +146,13 @@ TALER_TESTING_run_nexus (const struct TALER_TESTING_BankConfiguration *bc) fprintf ( stderr, "Failed to launch `nexus'\n"); - GNUNET_OS_process_kill (bank_proc, + GNUNET_OS_process_kill (nexus_proc, SIGTERM); - GNUNET_OS_process_wait (bank_proc); - GNUNET_OS_process_destroy (bank_proc); + GNUNET_OS_process_wait (nexus_proc); + GNUNET_OS_process_destroy (nexus_proc); GNUNET_free (curl_check_cmd); - BANK_FAIL (); + GNUNET_break (0); + return ret; } fprintf (stderr, "."); sleep (1); @@ -160,40 +160,69 @@ TALER_TESTING_run_nexus (const struct TALER_TESTING_BankConfiguration *bc) } while (0 != system (curl_check_cmd)); - GNUNET_asprintf (&post_body, - "{ \ - \"ebicsURL\": \"http://mock\", \ - \"userID\": \"mock\", \ - \"partnerID\": \"mock\", \ - \"hostID\": \"mock\", \ - \"password\": \"%s\"}", - bc->exchange_auth.details.basic.password); - GNUNET_asprintf (®ister_url, - "http://localhost:5001/ebics/%s/subscribers", - bc->exchange_auth.details.basic.username); - GNUNET_asprintf (&curl_cmd, - "curl -d'%s' -H'Content-Type: application/json' %s", - post_body, - register_url); - - if (0 != system (curl_cmd)) + // start sandbox. + GNUNET_free (curl_check_cmd); + fprintf (stderr, "\n"); + + sandbox_proc = GNUNET_OS_start_process + (GNUNET_NO, + GNUNET_OS_INHERIT_STD_NONE, + NULL, NULL, NULL, + "libeufin-sandbox", + "libeufin-sandbox", + "serve", + "--db-name", "/tmp/sandbox-exchange-test.sqlite3", + NULL); + if (NULL == sandbox_proc) { - GNUNET_free (curl_check_cmd); - GNUNET_free (curl_cmd); - GNUNET_free (post_body); - GNUNET_free (register_url); - BANK_FAIL (); // includes logging and return (!) + GNUNET_break (0); + return ret; } - GNUNET_free (curl_check_cmd); - GNUNET_free (curl_cmd); - GNUNET_free (post_body); - GNUNET_free (register_url); + /* give child time to start and bind against the socket */ + fprintf (stderr, + "Waiting for `sandbox' to be ready.\n"); + iter = 0; + do + { + if (10 == iter) + { + fprintf ( + stderr, + "Failed to launch `sandbox'\n"); + GNUNET_OS_process_kill (sandbox_proc, + SIGTERM); + GNUNET_OS_process_wait (sandbox_proc); + GNUNET_OS_process_destroy (sandbox_proc); + GNUNET_break (0); + return ret; + } + fprintf (stderr, "."); + sleep (1); + iter++; + } + while (0 != system ("curl -s http://localhost:5000/")); fprintf (stderr, "\n"); - return bank_proc; + // Creates nexus user + bank loopback connection + Taler facade. + if (0 != system ("taler-nexus-prepare")) + { + GNUNET_OS_process_kill (nexus_proc, SIGTERM); + GNUNET_OS_process_wait (nexus_proc); + GNUNET_OS_process_destroy (nexus_proc); + GNUNET_OS_process_kill (sandbox_proc, SIGTERM); + GNUNET_OS_process_wait (sandbox_proc); + GNUNET_OS_process_destroy (sandbox_proc); + TALER_LOG_ERROR ("Could not prepare nexus\n"); + GNUNET_break (0); + return ret; + } + ret.nexus = nexus_proc; + ret.sandbox = sandbox_proc; + return ret; } + /** * Start the (Python) bank process. Assume the port * is available and the database is clean. Use the "prepare @@ -310,6 +339,7 @@ TALER_TESTING_run_bank (const char *config_filename, } + /** * Prepare the Nexus execution. Check if the port is available * and delete old database. @@ -329,9 +359,6 @@ TALER_TESTING_prepare_nexus (const char *config_filename, { struct GNUNET_CONFIGURATION_Handle *cfg; unsigned long long port; - struct GNUNET_OS_Process *dbreset_proc; - enum GNUNET_OS_ProcessStatusType type; - unsigned long code; char *database = NULL; // silence compiler char *exchange_payto_uri; @@ -389,15 +416,8 @@ TALER_TESTING_prepare_nexus (const char *config_filename, /* DB preparation */ if (GNUNET_YES == reset_db) { - if (NULL == - (dbreset_proc = GNUNET_OS_start_process ( - GNUNET_NO, - GNUNET_OS_INHERIT_STD_NONE, - NULL, NULL, NULL, - "rm", - "rm", - "-f", - "libeufin-nexus.sqlite3", NULL))) + if (0 != system ( + "rm -f /tmp/nexus-exchange-test.sqlite3 && rm -f /tmp/sandbox-exchange-test.sqlite3")) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to invoke db-removal command.\n"); @@ -405,36 +425,8 @@ TALER_TESTING_prepare_nexus (const char *config_filename, GNUNET_CONFIGURATION_destroy (cfg); return GNUNET_SYSERR; } - if (GNUNET_SYSERR == - GNUNET_OS_process_wait_status (dbreset_proc, - &type, - &code)) - { - GNUNET_OS_process_destroy (dbreset_proc); - GNUNET_break (0); - GNUNET_CONFIGURATION_destroy (cfg); - return GNUNET_SYSERR; - } - if ( (type == GNUNET_OS_PROCESS_EXITED) && - (0 != code) ) - { - fprintf (stderr, - "db-removal command was unsuccessful\n"); - GNUNET_break (0); - GNUNET_CONFIGURATION_destroy (cfg); - return GNUNET_SYSERR; - } - if ( (type != GNUNET_OS_PROCESS_EXITED) || - (0 != code) ) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected error running `rm libeufin-nexus.sqlite3'!\n"); - GNUNET_break (0); - GNUNET_CONFIGURATION_destroy (cfg); - return GNUNET_SYSERR; - } - GNUNET_OS_process_destroy (dbreset_proc); } + if (GNUNET_OK != TALER_BANK_auth_parse_cfg (cfg, config_section, @@ -446,8 +438,10 @@ TALER_TESTING_prepare_nexus (const char *config_filename, } GNUNET_CONFIGURATION_destroy (cfg); bc->exchange_payto = exchange_payto_uri; - bc->user42_payto = "payto://x-taler-bank/localhost/42"; - bc->user43_payto = "payto://x-taler-bank/localhost/43"; + bc->user42_payto = + "payto://iban/BIC/FR7630006000011234567890189?receiver-name=User42"; + bc->user43_payto = + "payto://iban/BIC/GB33BUKB20201555555555?receiver-name=User43"; GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Relying on nexus %s on port %u\n", bc->exchange_auth.wire_gateway_url, @@ -461,6 +455,7 @@ TALER_TESTING_prepare_nexus (const char *config_filename, return GNUNET_OK; } + /** * Prepare the bank execution. Check if the port is available * and reset database. @@ -720,7 +715,7 @@ TALER_TESTING_prepare_fakebank (const char *config_filename, bc->exchange_payto); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "user42_payto: %s\n", bc->user42_payto); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "user42_payto: %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "user43_payto: %s\n", bc->user43_payto); return GNUNET_OK; } |