-work on reserve control test

This commit is contained in:
Christian Grothoff 2022-10-13 15:58:49 +02:00
parent d7ca9d3ecf
commit 4fc77b9dbf
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
5 changed files with 62 additions and 18 deletions

View File

@ -54,12 +54,12 @@ TEH_PG_insert_close_request (
",close_timestamp"
",reserve_sig"
",close_val"
",close_frac,"
",close_frac"
",close_fee_val"
",close_fee_frac"
",payto_uri"
")"
"VALUES ($1, $2, $3, $4, $5, $6, $7)"
"VALUES ($1, $2, $3, $4, $5, $6, $7, $8)"
" ON CONFLICT DO NOTHING;");
return GNUNET_PQ_eval_prepared_non_select (pg->conn,
"insert_account_close",

View File

@ -39,7 +39,7 @@ TEH_PG_select_reserve_close_info (
GNUNET_PQ_query_param_end
};
struct GNUNET_PQ_ResultSpec rs[] = {
TALER_PQ_RESULT_SPEC_AMOUNT ("close",
TALER_PQ_RESULT_SPEC_AMOUNT ("current_balance",
balance),
GNUNET_PQ_result_spec_string ("payto_uri",
payto_uri),
@ -49,10 +49,12 @@ TEH_PG_select_reserve_close_info (
PREPARE (pg,
"select_reserve_close_info",
"SELECT "
" close_frac"
",close_val"
",payto_uri"
" FROM close_requests"
" r.current_balance_val"
",r.current_balance_frac"
",wt.payto_uri"
" FROM reserves r"
" LEFT JOIN reserves_in ri USING (reserve_pub)"
" LEFT JOIN wire_targets wt ON (ri.wire_source_h_payto = wt.wire_target_h_payto)"
" WHERE reserve_pub=$1;");
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
"select_reserve_close_info",

View File

@ -2652,6 +2652,7 @@ TALER_TESTING_cmd_purse_poll_finish (const char *label,
* @param expected_http_status what HTTP status do we expect to get returned from the exchange
* @param contract_terms contract, JSON string
* @param upload_contract should we upload the contract
* @param pay_purse_fee should we pay a fee to create the purse
* @param expiration when should the purse expire
* @param reserve_ref reference to reserve key, or NULL to create a new reserve
* @return the command
@ -2662,6 +2663,7 @@ TALER_TESTING_cmd_purse_create_with_reserve (
unsigned int expected_http_status,
const char *contract_terms,
bool upload_contract,
bool pay_purse_fee,
struct GNUNET_TIME_Relative expiration,
const char *reserve_ref);

View File

@ -22,7 +22,7 @@
* @author Christian Grothoff
*
* TODO:
* - Test purse creation with reserve purse quota
* - enable reserve close test once implementation is complete!
*/
#include "platform.h"
#include "taler_util.h"
@ -216,6 +216,7 @@ run (void *cls,
MHD_HTTP_OK,
"{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
true /* upload contract */,
true /* pay purse fee */,
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"create-reserve-1"),
TALER_TESTING_cmd_contract_get (
@ -260,6 +261,7 @@ run (void *cls,
MHD_HTTP_OK,
"{\"amount\":\"EUR:4\",\"summary\":\"beer\"}",
true /* upload contract */,
true /* pay purse fee */,
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"create-reserve-1"),
TALER_TESTING_cmd_purse_deposit_coins (
@ -279,6 +281,7 @@ run (void *cls,
MHD_HTTP_OK,
"{\"amount\":\"EUR:2\",\"summary\":\"ice cream\"}",
true /* upload contract */,
true /* pay purse fee */,
GNUNET_TIME_relative_multiply (
GNUNET_TIME_UNIT_SECONDS,
1), /* expiration */
@ -404,7 +407,31 @@ run (void *cls,
"EUR:0.03", /* 0.02 for the reserve open, 0.01 for deposit fee */
NULL,
NULL),
/* FIXME: use purse creation with purse quota here */
/* Use purse creation with purse quota here */
TALER_TESTING_cmd_purse_create_with_reserve (
"purse-create-with-reserve-101-a",
MHD_HTTP_OK,
"{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
true /* upload contract */,
false /* pay purse fee */,
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"create-reserve-101"),
TALER_TESTING_cmd_purse_create_with_reserve (
"purse-create-with-reserve-101-b",
MHD_HTTP_OK,
"{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
true /* upload contract */,
false /* pay purse fee */,
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"create-reserve-101"),
TALER_TESTING_cmd_purse_create_with_reserve (
"purse-create-with-reserve-101-fail",
MHD_HTTP_CONFLICT,
"{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
true /* upload contract */,
false /* pay purse fee */,
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"create-reserve-101"),
TALER_TESTING_cmd_reserve_get_attestable ("reserve-101-attestable",
"create-reserve-101",
MHD_HTTP_NOT_FOUND,
@ -415,13 +442,23 @@ run (void *cls,
"nx-attribute-name",
NULL),
/* FIXME: do KYC for reserve, then get actual attributes attested */
#if 0
TALER_TESTING_cmd_reserve_close ("reserve-101-close",
"create-reserve-101",
NULL, /* to origin */
MHD_HTTP_OK),
/* FIXME: trigger helper to close reserve here */
/* FIXME: check reserve was actually closed (money wired back) */
#if FIXME
/* reserve close logic is not yet implemented, hence this fails: */
TALER_TESTING_cmd_exec_closer ("close-reserves-101",
config_file,
"EUR:1.02",
"EUR:0.01",
"create-reserve-101"),
TALER_TESTING_cmd_exec_transfer ("close-reserves-101-transfer",
config_file),
TALER_TESTING_cmd_status ("reserve-101-closed-status",
"create-reserve-101",
"EUR:0",
MHD_HTTP_OK),
#endif
TALER_TESTING_cmd_end ()
};
@ -456,11 +493,6 @@ run (void *cls,
config_file),
TALER_TESTING_cmd_check_keys_pull_all_keys ("refetch /keys",
1),
#if 0
TALER_TESTING_cmd_batch ("reserves",
reserves),
TALER_TESTING_cmd_end (), // FIXME
#endif
TALER_TESTING_cmd_batch ("withdraw",
withdraw),
TALER_TESTING_cmd_batch ("push",
@ -469,6 +501,8 @@ run (void *cls,
pull),
TALER_TESTING_cmd_batch ("expire",
expire),
TALER_TESTING_cmd_batch ("reserves",
reserves),
/* End the suite. */
TALER_TESTING_cmd_end ()
};

View File

@ -129,6 +129,10 @@ struct ReservePurseState
*/
unsigned int expected_response_code;
/**
* True to pay the purse fee.
*/
bool pay_purse_fee;
};
@ -239,7 +243,7 @@ purse_run (void *cls,
&ds->contract_priv,
ds->contract_terms,
true /* upload contract */,
true /* do pay purse fee -- FIXME #7274: make this a choice to test this case; then update testing_api_cmd_purse_deposit flags logic to match! */,
ds->pay_purse_fee,
ds->merge_timestamp,
&purse_cb,
ds);
@ -327,6 +331,7 @@ TALER_TESTING_cmd_purse_create_with_reserve (
unsigned int expected_http_status,
const char *contract_terms,
bool upload_contract,
bool pay_purse_fee,
struct GNUNET_TIME_Relative expiration,
const char *reserve_ref)
{
@ -339,6 +344,7 @@ TALER_TESTING_cmd_purse_create_with_reserve (
0 /* flags */,
&err);
GNUNET_assert (NULL != ds->contract_terms);
ds->pay_purse_fee = pay_purse_fee;
ds->reserve_ref = reserve_ref;
ds->expected_response_code = expected_http_status;