fix fakebank logic

This commit is contained in:
Christian Grothoff 2020-01-16 15:06:09 +01:00
parent 1fc8fd22dc
commit 14ab704cde
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
5 changed files with 62 additions and 31 deletions

View File

@ -40,11 +40,6 @@ struct TALER_BANK_DebitHistoryHandle
*/
char *request_url;
/**
* The base URL of the bank.
*/
char *bank_base_url;
/**
* Handle for the request.
*/
@ -220,7 +215,7 @@ handle_history_finished (void *cls,
* Request the debit history of the exchange's bank account.
*
* @param ctx curl context for the event loop
* @param bank_base_url URL of the base INCLUDING account number
* @param account_base_url URL of the base INCLUDING account number
* @param auth authentication data to use
* @param start_row from which row on do we want to get results,
* use UINT64_MAX for the latest; exclusive
@ -237,7 +232,7 @@ handle_history_finished (void *cls,
*/
struct TALER_BANK_DebitHistoryHandle *
TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
const char *bank_base_url,
const char *account_base_url,
const struct TALER_BANK_AuthenticationData *auth,
uint64_t start_row,
int64_t num_results,
@ -269,8 +264,7 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
hh = GNUNET_new (struct TALER_BANK_DebitHistoryHandle);
hh->hcb = hres_cb;
hh->hcb_cls = hres_cb_cls;
hh->bank_base_url = GNUNET_strdup (bank_base_url);
hh->request_url = TALER_BANK_path_to_url_ (bank_base_url,
hh->request_url = TALER_BANK_path_to_url_ (account_base_url,
url);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@ -317,7 +311,6 @@ TALER_BANK_debit_history_cancel (struct TALER_BANK_DebitHistoryHandle *hh)
hh->job = NULL;
}
GNUNET_free (hh->request_url);
GNUNET_free (hh->bank_base_url);
GNUNET_free (hh);
}

View File

@ -951,7 +951,7 @@ handle_debit_history (struct TALER_FAKEBANK_Handle *h,
char *debit_payto;
credit_payto = TALER_payto_xtalerbank_make (h->my_baseurl,
account);
pos->credit_account);
debit_payto = TALER_payto_xtalerbank_make (h->my_baseurl,
pos->debit_account);
trans = json_pack

View File

@ -73,7 +73,7 @@ run (void *cls,
&bc.exchange_auth,
NULL,
1),
TALER_TESTING_cmd_admin_add_incoming ("debit-1",
TALER_TESTING_cmd_admin_add_incoming ("credit-1",
"KUDOS:5.01",
bc.exchange_account_url,
&bc.exchange_auth,
@ -88,12 +88,12 @@ run (void *cls,
&bc.exchange_auth,
NULL,
5),
TALER_TESTING_cmd_admin_add_incoming ("debit-2",
TALER_TESTING_cmd_admin_add_incoming ("credit-2",
"KUDOS:3.21",
bc.exchange_account_url,
&bc.exchange_auth,
bc.user42_payto),
TALER_TESTING_cmd_transfer ("credit-2",
TALER_TESTING_cmd_transfer ("debit-1",
"KUDOS:3.22",
bc.exchange_account_url,
&bc.exchange_auth,

View File

@ -50,7 +50,12 @@ struct History
/**
* URL to free.
*/
char *url;
char *c_url;
/**
* URL to free.
*/
char *d_url;
};
@ -64,6 +69,11 @@ struct HistoryState
*/
const char *account_url;
/**
* Payto URL of the debited account offering the "history" operation.
*/
char *debit_payto;
/**
* Reference to command defining the
* first row number we want in the result.
@ -189,8 +199,8 @@ build_history (struct TALER_TESTING_Interpreter *is,
struct History *h;
const struct TALER_TESTING_Command *add_incoming_cmd;
int inc;
unsigned int start;
unsigned int end;
int start;
int end;
/* #GNUNET_YES whenever either no 'start' value was given for the history
* query, or the given value is found in the list of all the CMDs. */
int ok;
@ -222,15 +232,15 @@ build_history (struct TALER_TESTING_Interpreter *is,
/* AKA 'delta' */
if (hs->num_results > 0)
{
inc = 1; /* _inc_rement */
inc = 1; /* _inc_rement: go forwards */
start = 0;
end = is->ip - 1;
end = is->ip;
}
else
{
inc = -1;
inc = -1; /* decrement: we go backwards */
start = is->ip - 1;
end = 0;
end = -1; /* range is exclusive, do look at 0! */
}
ok = GNUNET_NO;
@ -242,7 +252,11 @@ build_history (struct TALER_TESTING_Interpreter *is,
total,
4);
pos = 0;
for (unsigned int off = start; off != end + inc; off += inc)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Checking commands %u to %u for debit history\n",
start,
end);
for (int off = start; off != end; off += inc)
{
const struct TALER_TESTING_Command *cmd = &is->commands[off];
const uint64_t *row_id;
@ -250,8 +264,11 @@ build_history (struct TALER_TESTING_Interpreter *is,
const char *credit_account;
const struct TALER_Amount *amount;
const struct TALER_WireTransferIdentifierRawP *wtid;
const char *account_debit_url;
const char *exchange_base_url;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Checking if command %s is relevant for debit history\n",
cmd->label);
if ( (GNUNET_OK !=
TALER_TESTING_get_trait_bank_row (cmd,
&row_id)) ||
@ -274,9 +291,12 @@ build_history (struct TALER_TESTING_Interpreter *is,
(GNUNET_OK !=
TALER_TESTING_get_trait_url (cmd,
0,
&account_debit_url)) )
&exchange_base_url)) )
continue; /* not an event we care about */
/* Seek "/history" starting row. */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Command %s is relevant for debit history!\n",
cmd->label);
if ( (NULL != row_id_start) &&
(*row_id_start == *row_id) &&
(GNUNET_NO == ok) )
@ -288,9 +308,15 @@ build_history (struct TALER_TESTING_Interpreter *is,
/* when 'start' was _not_ given, then ok == GNUNET_YES */
if (GNUNET_NO == ok)
continue; /* skip until we find the marker */
if (0 != strcasecmp (hs->account_url,
if (0 != strcasecmp (hs->debit_payto,
debit_account))
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Account %s does not match desired account %s\n",
debit_account,
hs->debit_payto);
continue; /* account missmatch */
}
if (total >= GNUNET_MAX (hs->num_results,
-hs->num_results) )
{
@ -306,12 +332,14 @@ build_history (struct TALER_TESTING_Interpreter *is,
GNUNET_array_grow (h,
total,
pos * 2);
h[pos].url = GNUNET_strdup (credit_account);
h[pos].details.credit_account_url = h[pos].url;
h[pos].c_url = GNUNET_strdup (credit_account);
h[pos].d_url = GNUNET_strdup (debit_account);
h[pos].details.credit_account_url = h[pos].c_url;
h[pos].details.debit_account_url = h[pos].d_url;
h[pos].details.amount = *amount;
h[pos].row_id = *row_id;
h[pos].details.wtid = *wtid;
h[pos].details.debit_account_url = account_debit_url;
h[pos].details.exchange_base_url = exchange_base_url;
pos++;
}
GNUNET_assert (GNUNET_YES == ok);
@ -539,7 +567,11 @@ history_cleanup (void *cls,
TALER_BANK_debit_history_cancel (hs->hh);
}
for (unsigned int off = 0; off<hs->total; off++)
GNUNET_free (hs->h[off].url);
{
GNUNET_free (hs->h[off].c_url);
GNUNET_free (hs->h[off].d_url);
}
GNUNET_free (hs->debit_payto);
GNUNET_free_non_null (hs->h);
GNUNET_free (hs);
}
@ -572,6 +604,7 @@ TALER_TESTING_cmd_bank_debits (const char *label,
hs->start_row_reference = start_row_reference;
hs->num_results = num_results;
hs->auth = *auth;
hs->debit_payto = TALER_payto_xtalerbank_make2 (account_url);
{
struct TALER_TESTING_Command cmd = {

View File

@ -228,6 +228,11 @@ transfer_run (void *cls,
void *buf;
size_t buf_size;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Transfer of %s from %s to %s\n",
TALER_amount2s (&fts->amount),
fts->account_debit_url,
fts->payto_credit_account);
TALER_BANK_prepare_wire_transfer (fts->payto_credit_account,
&fts->amount,
fts->exchange_base_url,
@ -304,7 +309,7 @@ transfer_traits (void *cls,
struct TransferState *fts = cls;
struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_url (0,
fts->account_debit_url),
fts->exchange_base_url),
TALER_TESTING_make_trait_bank_row (&fts->serial_id),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT,
fts->payto_credit_account),
@ -352,7 +357,7 @@ TALER_TESTING_cmd_transfer
fts = GNUNET_new (struct TransferState);
fts->account_debit_url = account_base_url;
fts->exchange_base_url = exchange_base_url;
fts->payto_debit_account = TALER_payto_xtalerbank_make2 (exchange_base_url);
fts->payto_debit_account = TALER_payto_xtalerbank_make2 (account_base_url);
fts->payto_credit_account = payto_credit_account;
fts->auth = *auth;
fts->wtid = *wtid;