commit 152c64b1b3ab84e3dc78b1fef5e49a2f221f2d8c
parent 5a25fa6199284cde29904fad63b608f544f61861
Author: Marcello Stanisci <stanisci.m@gmail.com>
Date: Thu, 22 Mar 2018 12:44:46 +0100
cover invalid /pay abortion.
Diffstat:
2 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c
@@ -1226,6 +1226,7 @@ check_coin_paid (void *cls,
if (GNUNET_YES == dc->found_in_db)
continue; /* processed earlier */
+
/* Get matching coin from results*/
if ( (0 != memcmp (coin_pub,
&dc->coin_pub,
@@ -1663,6 +1664,8 @@ begin_transaction (struct PayContext *pc)
"Merchant database error (could not start transaction)");
return;
}
+
+ /* Init. some price accumulators. */
GNUNET_break (GNUNET_OK ==
TALER_amount_get_zero (pc->amount.currency,
&pc->total_paid));
@@ -1673,7 +1676,7 @@ begin_transaction (struct PayContext *pc)
TALER_amount_get_zero (pc->amount.currency,
&pc->total_refunded));
- /* Check if some of these coins already succeeded */
+ /* Check if some of these coins already succeeded for _this_ contract. */
qs = db->find_payments (db->cls,
&pc->h_contract_terms,
&pc->mi->pubkey,
@@ -1725,6 +1728,7 @@ begin_transaction (struct PayContext *pc)
/* The wallet is going for a refund,
(on aborted operation)! */
+
/* check payment was indeed incomplete */
qs = db->find_paid_contract_terms_from_hash (db->cls,
&terms,
diff --git a/src/lib/test_merchant_api_twisted.c b/src/lib/test_merchant_api_twisted.c
@@ -509,6 +509,78 @@ run (void *cls,
"deposit-simple",
"EUR:0.01"), // ignored
+ /****** Covering /pay *******/
+
+ /**
+ * Move money to the exchange's bank account.
+ */
+ CMD_TRANSFER_TO_EXCHANGE ("create-reserve-abort-1",
+ "EUR:1.01"),
+
+ /**
+ * Make a reserve exist, according to the previous
+ * transfer.
+ */
+ CMD_EXEC_WIREWATCH ("wirewatch-abort-1"),
+
+ TALER_TESTING_cmd_check_bank_transfer
+ ("check_bank_transfer-abort-1",
+ "http://localhost:8081/",
+ "EUR:1.01", USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO),
+
+ TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-abort-1",
+ is->exchange,
+ "create-reserve-abort-1",
+ "EUR:1",
+ MHD_HTTP_OK),
+
+ TALER_TESTING_cmd_status ("withdraw-status-abort-1",
+ is->exchange,
+ "create-reserve-abort-1",
+ "EUR:0",
+ MHD_HTTP_OK),
+
+ TALER_TESTING_cmd_proposal
+ ("create-proposal-abort-1",
+ twister_merchant_url,
+ is->ctx,
+ MHD_HTTP_OK,
+ "{\"max_fee\":\
+ {\"currency\":\"EUR\",\
+ \"value\":0,\
+ \"fraction\":50000000},\
+ \"order_id\":\"abort-one\",\
+ \"refund_deadline\":\"\\/Date(0)\\/\",\
+ \"pay_deadline\":\"\\/Date(99999999999)\\/\",\
+ \"fulfillment_url\": \"https://example.com/\",\
+ \"amount\":\
+ {\"currency\":\"EUR\",\
+ \"value\":3,\
+ \"fraction\":0},\
+ \"summary\": \"merchant-lib testcase\",\
+ \"products\": [ {\"description\":\"ice cream\",\
+ \"value\":\"{EUR:3}\"} ] }",
+ NULL),
+
+ TALER_TESTING_cmd_pay ("deposit-simple-for-abort",
+ twister_merchant_url,
+ is->ctx,
+ 0,
+ "create-proposal-abort-1",
+ "withdraw-coin-abort-1",
+ "EUR:1",
+ "EUR:1.99", // no sense now
+ "EUR:0.01"), // no sense now
+
+ TALER_TESTING_cmd_delete_object ("hack-abort",
+ PROXY_MERCHANT_CONFIG_FILE,
+ "merchant_pub"),
+
+ TALER_TESTING_cmd_pay_abort ("pay-abort-1",
+ twister_merchant_url,
+ "deposit-simple-for-abort",
+ is->ctx,
+ MHD_HTTP_OK),
/**
* End the suite. Fixme: better to have a label for this
* too, as it shows a "(null)" token on logs.