[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant] 171/277: tests/fixes for tips and pickups in backenddb
From: |
gnunet |
Subject: |
[taler-merchant] 171/277: tests/fixes for tips and pickups in backenddb |
Date: |
Sun, 05 Jul 2020 20:51:24 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository merchant.
commit 4bd45c1fc2618a4be74f6204577651365e3d2254
Author: Jonathan Buchanan <jonathan.russ.buchanan@gmail.com>
AuthorDate: Wed Jun 3 03:01:12 2020 -0400
tests/fixes for tips and pickups in backenddb
---
src/backenddb/plugin_merchantdb_postgres.c | 40 ++++++---
src/backenddb/test_merchantdb.c | 132 ++++++++++++++++++++++++-----
2 files changed, 137 insertions(+), 35 deletions(-)
diff --git a/src/backenddb/plugin_merchantdb_postgres.c
b/src/backenddb/plugin_merchantdb_postgres.c
index 0de8360..a5f6818 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -4516,7 +4516,7 @@ RETRY:
postgres_rollback (pg);
return TALER_EC_TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE;
}
- if (0 <
+ if (0 >
TALER_amount_cmp (&remaining,
amount))
{
@@ -4555,13 +4555,18 @@ RETRY:
tip_id,
sizeof (*tip_id));
{
+ struct TALER_Amount amount_zero;
+ TALER_amount_get_zero (pg->currency,
+ &amount_zero);
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_string (instance_id),
GNUNET_PQ_query_param_auto_from_type (reserve_pubp),
GNUNET_PQ_query_param_auto_from_type (tip_id),
GNUNET_PQ_query_param_string (justification),
GNUNET_PQ_query_param_string (next_url),
+ GNUNET_PQ_query_param_absolute_time (expiration),
TALER_PQ_query_param_amount (amount),
+ TALER_PQ_query_param_amount (&amount_zero),
GNUNET_PQ_query_param_end
};
@@ -5041,14 +5046,14 @@ RETRY:
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_string (instance_id),
- GNUNET_PQ_query_param_auto_from_type (&tip_id),
+ GNUNET_PQ_query_param_auto_from_type (tip_id),
GNUNET_PQ_query_param_end
};
struct GNUNET_PQ_ResultSpec rs[] = {
- TALER_PQ_RESULT_SPEC_AMOUNT ("tips_picked_up",
- &reserve_picked_up),
GNUNET_PQ_result_spec_uint64 ("reserve_serial",
&reserve_serial),
+ TALER_PQ_RESULT_SPEC_AMOUNT ("tips_picked_up",
+ &reserve_picked_up),
GNUNET_PQ_result_spec_end
};
@@ -5066,12 +5071,13 @@ RETRY:
return qs;
}
}
- if (0 <=
+ if (0 >=
TALER_amount_add (&reserve_picked_up,
&reserve_picked_up,
total_requested))
{
GNUNET_break (0);
+ postgres_rollback (pg);
return GNUNET_DB_STATUS_HARD_ERROR;
}
@@ -6902,7 +6908,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
GNUNET_PQ_make_prepare ("activate_reserve",
"UPDATE merchant_tip_reserves SET"
" exchange_initial_balance_val=$3"
- " exchange_initial_balance_frac=$4"
+ ",exchange_initial_balance_frac=$4"
" WHERE reserve_pub=$2"
" AND merchant_serial="
" (SELECT merchant_serial"
@@ -7052,17 +7058,20 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
GNUNET_PQ_make_prepare ("insert_tip",
"INSERT INTO merchant_tips"
"(reserve_serial"
+ ",tip_id"
",justification"
",next_url"
",expiration"
",amount_val"
",amount_frac"
+ ",picked_up_val"
+ ",picked_up_frac"
") "
"SELECT"
- " reserve_serial, $3, $4, $5, $6, $7"
+ " reserve_serial, $3, $4, $5, $6, $7, $8, $9, $10"
" FROM merchant_tip_reserves"
" WHERE reserve_pub=$2"
- " AND reserve_serial = "
+ " AND merchant_serial = "
" (SELECT merchant_serial"
" FROM merchant_instances"
" WHERE merchant_id=$1)",
@@ -7077,8 +7086,8 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
" JOIN merchant_tips USING (tip_serial)"
" JOIN merchant_tip_reserves USING
(reserve_serial)"
" JOIN merchant_tip_reserve_keys USING
(reserve_serial)"
- " WHERE pickup_id = $2"
- " AND tip_id = $3"
+ " WHERE pickup_id = $3"
+ " AND tip_id = $2"
" AND merchant_serial ="
" (SELECT merchant_serial"
" FROM merchant_instances"
@@ -7137,9 +7146,13 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
" pickup_id"
",amount_val"
",amount_frac"
- ",COUNT(blind_sig) AS num_planchets"
+ ",(SELECT"
+ " COUNT(blind_sig)"
+ " FROM merchant_tip_pickups"
+ " JOIN merchant_tip_pickup_signatures USING
(pickup_serial)"
+ " WHERE tip_serial = $1)"
+ " AS num_planchets"
" FROM merchant_tip_pickups"
- " JOIN merchant_tip_pickup_signatures USING
(pickup_serial)"
" WHERE tip_serial = $1",
1),
/* for postgres_insert_pickup() */
@@ -7153,8 +7166,9 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
"SELECT"
" tip_serial, $3, $4, $5"
" FROM merchant_tips"
+ " JOIN merchant_tip_reserves USING
(reserve_serial)"
" WHERE tip_id=$2"
- " AND reserve_serial = "
+ " AND merchant_serial = "
" (SELECT merchant_serial"
" FROM merchant_instances"
" WHERE merchant_id=$1)",
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index 49b086b..d225fec 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -3086,7 +3086,7 @@ test_lookup_tip (const char *instance_id,
struct TALER_Amount total_authorized;
struct TALER_Amount total_picked_up;
struct GNUNET_TIME_Absolute expiration;
- char *exchange_url;
+ char *exchange_url = NULL;
struct TALER_ReservePrivateKeyP reserve_priv;
if (1 != plugin->lookup_tip (plugin->cls,
instance_id,
@@ -3259,14 +3259,14 @@ test_lookup_pickup (const char *instance_id,
memset (sigs,
0,
sizeof (struct GNUNET_CRYPTO_RsaSignature *) * expected_sigs_length);
- if (1 != plugin->lookup_pickup (plugin->cls,
- instance_id,
- tip_id,
- pickup_id,
- &exchange_url,
- &reserve_priv,
- expected_sigs_length,
- sigs))
+ if (0 > plugin->lookup_pickup (plugin->cls,
+ instance_id,
+ tip_id,
+ pickup_id,
+ &exchange_url,
+ &reserve_priv,
+ expected_sigs_length,
+ sigs))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Lookup pickup failed\n");
@@ -3343,6 +3343,13 @@ struct TestTips_Closure
*/
struct ReserveData reserve;
+ /* Tip and pickup data */
+ struct TALER_Amount tip_amount;
+ struct GNUNET_HashCode tip_id;
+ struct GNUNET_HashCode pickup_id;
+ struct GNUNET_CRYPTO_RsaPrivateKey *pickup_priv;
+ struct GNUNET_CRYPTO_RsaSignature *pickup_sig;
+
};
@@ -3384,6 +3391,18 @@ pre_test_tips (struct TestTips_Closure *cls)
cls->reserve.expiration =
GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get (),
GNUNET_TIME_UNIT_WEEKS);
+
+ /* Tip/pickup */
+ GNUNET_assert (GNUNET_OK ==
+ TALER_string_to_amount ("EUR:0.99",
+ &cls->tip_amount));
+ GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG,
+ &cls->tip_id);
+ GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG,
+ &cls->tip_id);
+ cls->pickup_priv = GNUNET_CRYPTO_rsa_private_key_create (2048);
+ cls->pickup_sig = GNUNET_CRYPTO_rsa_sign_fdh (cls->pickup_priv,
+ &cls->pickup_id);
}
@@ -3392,12 +3411,18 @@ post_test_tips (struct TestTips_Closure *cls)
{
json_decref (cls->is.address);
json_decref (cls->is.jurisdiction);
+
+ GNUNET_CRYPTO_rsa_private_key_free (cls->pickup_priv);
+ GNUNET_CRYPTO_rsa_signature_free (cls->pickup_sig);
}
static int
run_test_tips (struct TestTips_Closure *cls)
{
+ struct TALER_Amount zero;
+ TALER_amount_get_zero ("EUR", &zero);
+
TEST_RET_ON_FAIL (test_insert_instance (&cls->merchant_pub,
&cls->merchant_priv,
&cls->is));
@@ -3421,29 +3446,84 @@ run_test_tips (struct TestTips_Closure *cls)
&cls->reserve.reserve_pub,
&cls->reserve));
+ /* Test reserve activation */
+ if (1 != plugin->activate_reserve (plugin->cls,
+ cls->is.id,
+ &cls->reserve.reserve_pub,
+ &cls->reserve.initial_amount))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Active reserve failed\n");
+ return 1;
+ }
+
/* Test inserting a tip */
- /*
- struct TALER_Amount tip_amount;
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount ("EUR:0.99",
- &tip_amount));
- struct GNUNET_HashCode tip_id;
- GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG,
- &tip_id);
if (TALER_EC_NONE != plugin->authorize_tip (plugin->cls,
cls->is.id,
- &cls->reserve_pub,
- &tip_amount,
+ &cls->reserve.reserve_pub,
+ &cls->tip_amount,
"because",
"https://taler.net",
- &tip_id,
- &expiration))
+ &cls->tip_id,
+ &cls->reserve.expiration))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Authorize tip failed\n");
return 1;
}
- */
+
+ /* Test lookup tip */
+ TEST_RET_ON_FAIL (test_lookup_tip (cls->is.id,
+ &cls->tip_id,
+ &cls->tip_amount,
+ &zero,
+ &cls->reserve.expiration,
+ cls->reserve.exchange_url,
+ &cls->reserve.reserve_priv));
+
+ /* Test lookup tip details */
+ TEST_RET_ON_FAIL (test_lookup_tip_details (cls->is.id,
+ cls->tip_id,
+ &cls->tip_amount,
+ &zero,
+ "because",
+ &cls->reserve.expiration,
+ &cls->reserve.reserve_pub,
+ 0,
+ NULL));
+
+ /* Test insert pickup */
+ if (1 != plugin->insert_pickup (plugin->cls,
+ cls->is.id,
+ &cls->tip_id,
+ &cls->tip_amount,
+ &cls->pickup_id,
+ &cls->tip_amount))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error inserting pickup\n");
+ return 1;
+ }
+
+ /* Test lookup pickup */
+ TEST_RET_ON_FAIL (test_lookup_pickup (cls->is.id,
+ &cls->tip_id,
+ &cls->pickup_id,
+ cls->reserve.exchange_url,
+ &cls->reserve.reserve_priv,
+ 0,
+ NULL));
+
+ /* Test insert pickup blind signature */
+ if (1 != plugin->insert_pickup_blind_signature (plugin->cls,
+ &cls->pickup_id,
+ 0,
+ cls->pickup_sig))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Error inserting pickup blind signature\n");
+ return 1;
+ }
/* Test lookup reserves */
TEST_RET_ON_FAIL (test_lookup_reserves (cls->is.id,
@@ -3845,6 +3925,14 @@ pre_test_refunds (struct TestRefunds_Closure *cls)
cls->is.default_wire_transfer_delay = GNUNET_TIME_relative_get_minute_ ();
cls->is.default_pay_delay = GNUNET_TIME_relative_get_second_ ();
+ /* Account */
+ GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG,
+ &cls->account.h_wire);
+ GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG,
+ &cls->account.salt);
+ cls->account.payto_uri = "payto://x-taler-bank/bank.demo.taler.net/4";
+ cls->account.active = true;
+
/* Signing key */
GNUNET_CRYPTO_eddsa_key_create (&cls->exchange_priv.eddsa_priv);
GNUNET_CRYPTO_eddsa_key_get_public (&cls->exchange_priv.eddsa_priv,
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-merchant] 159/277: add POST /tips logic, (continued)
- [taler-merchant] 159/277: add POST /tips logic, gnunet, 2020/07/05
- [taler-merchant] 164/277: fixed db test building and added test for wire fee storage, gnunet, 2020/07/05
- [taler-merchant] 163/277: implement filter, gnunet, 2020/07/05
- [taler-merchant] 165/277: add logic for activation of reserves to merchant backend DB, gnunet, 2020/07/05
- [taler-merchant] 147/277: added more tests for contract terms, deposits, and transfers, gnunet, 2020/07/05
- [taler-merchant] 160/277: address DB fixes for missing EC values, gnunet, 2020/07/05
- [taler-merchant] 157/277: fix DB use, gnunet, 2020/07/05
- [taler-merchant] 166/277: SQL fixing, gnunet, 2020/07/05
- [taler-merchant] 152/277: wrote db tests for tips/lookups, gnunet, 2020/07/05
- [taler-merchant] 145/277: refactored the existing product and order tests, gnunet, 2020/07/05
- [taler-merchant] 171/277: tests/fixes for tips and pickups in backenddb,
gnunet <=
- [taler-merchant] 169/277: implement POST /private/reserves, gnunet, 2020/07/05
- [taler-merchant] 161/277: fix misc issues in client APIs, gnunet, 2020/07/05
- [taler-merchant] 162/277: implement GET /reserves/RPUB, gnunet, 2020/07/05
- [taler-merchant] 170/277: implement POST /private/reserves, gnunet, 2020/07/05
- [taler-merchant] 175/277: avoid amount_zero, use DEFAULT instead, gnunet, 2020/07/05
- [taler-merchant] 174/277: new backenddb APIs for GET /private/orders/ID, gnunet, 2020/07/05
- [taler-merchant] 168/277: implement GET /reserves/RESERVE_ID, gnunet, 2020/07/05
- [taler-merchant] 167/277: implement TALER_MERCHANT_reserves_get(), gnunet, 2020/07/05
- [taler-merchant] 173/277: Merge branch 'protocolV1' of git+ssh://git.taler.net/merchant into protocolV1, gnunet, 2020/07/05
- [taler-merchant] 172/277: first high-level hack job at GET /orders/ID -- certainly FTBFS still, gnunet, 2020/07/05