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

View File

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

View File

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

View File

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

View File

@ -228,6 +228,11 @@ transfer_run (void *cls,
void *buf; void *buf;
size_t buf_size; 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, TALER_BANK_prepare_wire_transfer (fts->payto_credit_account,
&fts->amount, &fts->amount,
fts->exchange_base_url, fts->exchange_base_url,
@ -304,7 +309,7 @@ transfer_traits (void *cls,
struct TransferState *fts = cls; struct TransferState *fts = cls;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_url (0, 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_bank_row (&fts->serial_id),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT,
fts->payto_credit_account), fts->payto_credit_account),
@ -352,7 +357,7 @@ TALER_TESTING_cmd_transfer
fts = GNUNET_new (struct TransferState); fts = GNUNET_new (struct TransferState);
fts->account_debit_url = account_base_url; fts->account_debit_url = account_base_url;
fts->exchange_base_url = exchange_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->payto_credit_account = payto_credit_account;
fts->auth = *auth; fts->auth = *auth;
fts->wtid = *wtid; fts->wtid = *wtid;