diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-05-23 10:36:39 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-05-23 10:36:39 +0200 |
commit | b3844e4923df39b41b8a8d46df173b1432c92364 (patch) | |
tree | d3bfa4a3019321d53828817994709c3ac4f1a4f5 | |
parent | fcaf508647f86af4409aaec25a138e45fcb90be3 (diff) | |
download | exchange-b3844e4923df39b41b8a8d46df173b1432c92364.tar.xz |
-deduplicate and expand reserve history validation logic in testing library
-rw-r--r-- | src/include/taler_exchange_service.h | 5 | ||||
-rw-r--r-- | src/include/taler_testing_lib.h | 14 | ||||
-rw-r--r-- | src/lib/exchange_api_common.c | 4 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_common.c | 112 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_reserve_history.c | 77 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_reserve_status.c | 74 |
6 files changed, 133 insertions, 153 deletions
diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h index 5829ebce1..afaa28136 100644 --- a/src/include/taler_exchange_service.h +++ b/src/include/taler_exchange_service.h @@ -1472,11 +1472,6 @@ struct TALER_EXCHANGE_ReserveHistoryEntry { /** - * Fee paid for the request. - */ - struct TALER_Amount history_fee; - - /** * When was the request made. */ struct GNUNET_TIME_Timestamp request_timestamp; diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index b0dee023f..ff3936cfe 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -956,6 +956,20 @@ TALER_TESTING_parse_coin_reference ( unsigned int *idx); +/** + * Compare @a h1 and @a h2. + * + * @param h1 a history entry + * @param h2 a history entry + * @return 0 if @a h1 and @a h2 are equal + */ +int +TALER_TESTING_history_entry_cmp (const struct + TALER_EXCHANGE_ReserveHistoryEntry *h1, + const struct + TALER_EXCHANGE_ReserveHistoryEntry *h2); + + /* ************** Specific interpreter commands ************ */ diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c index 373989e4f..9ef2d3f44 100644 --- a/src/lib/exchange_api_common.c +++ b/src/lib/exchange_api_common.c @@ -475,7 +475,7 @@ parse_history (struct TALER_EXCHANGE_ReserveHistoryEntry *rh, GNUNET_JSON_spec_fixed_auto ("reserve_sig", &rh->details.history_details.reserve_sig), TALER_JSON_spec_amount_any ("history_fee", - &rh->details.history_details.history_fee), + &rh->amount), GNUNET_JSON_spec_timestamp ("request_timestamp", &rh->details.history_details.request_timestamp), GNUNET_JSON_spec_end () @@ -493,7 +493,7 @@ parse_history (struct TALER_EXCHANGE_ReserveHistoryEntry *rh, if (GNUNET_OK != TALER_wallet_reserve_history_verify ( rh->details.history_details.request_timestamp, - &rh->details.history_details.history_fee, + &rh->amount, uc->reserve_pub, &rh->details.history_details.reserve_sig)) { diff --git a/src/testing/testing_api_cmd_common.c b/src/testing/testing_api_cmd_common.c index 2d828a2b0..1e2439377 100644 --- a/src/testing/testing_api_cmd_common.c +++ b/src/testing/testing_api_cmd_common.c @@ -25,6 +25,118 @@ #include "taler_testing_lib.h" +int +TALER_TESTING_history_entry_cmp (const struct + TALER_EXCHANGE_ReserveHistoryEntry *h1, + const struct + TALER_EXCHANGE_ReserveHistoryEntry *h2) +{ + if (h1->type != h2->type) + return 1; + switch (h1->type) + { + case TALER_EXCHANGE_RTT_CREDIT: + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (0 == strcasecmp (h1->details.in_details.sender_url, + h2->details.in_details.sender_url)) && + (h1->details.in_details.wire_reference == + h2->details.in_details.wire_reference) && + (GNUNET_TIME_timestamp_cmp (h1->details.in_details.timestamp, + ==, + h2->details.in_details.timestamp)) ) + return 0; + return 1; + case TALER_EXCHANGE_RTT_WITHDRAWAL: + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (0 == + TALER_amount_cmp (&h1->details.withdraw.fee, + &h2->details.withdraw.fee)) ) + /* testing_api_cmd_withdraw doesn't set the out_authorization_sig, + so we cannot test for it here. but if the amount matches, + that should be good enough. */ + return 0; + return 1; + case TALER_EXCHANGE_RTT_RECOUP: + /* exchange_sig, exchange_pub and timestamp are NOT available + from the original recoup response, hence here NOT check(able/ed) */ + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (0 == + GNUNET_memcmp (&h1->details.recoup_details.coin_pub, + &h2->details.recoup_details.coin_pub)) ) + return 0; + return 1; + case TALER_EXCHANGE_RTT_CLOSE: + /* testing_api_cmd_exec_closer doesn't set the + receiver_account_details, exchange_sig, exchange_pub or wtid or timestamp + so we cannot test for it here. but if the amount matches, + that should be good enough. */ + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (0 == + TALER_amount_cmp (&h1->details.close_details.fee, + &h2->details.close_details.fee)) ) + return 0; + return 1; + case TALER_EXCHANGE_RTT_HISTORY: + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (GNUNET_TIME_timestamp_cmp ( + h1->details.history_details.request_timestamp, + ==, + h2->details.history_details. + request_timestamp)) && + (0 == + GNUNET_memcmp (&h1->details.history_details.reserve_sig, + &h2->details.history_details.reserve_sig)) ) + return 0; + return 1; + case TALER_EXCHANGE_RTT_MERGE: + if ( (0 == + TALER_amount_cmp (&h1->amount, + &h2->amount)) && + (0 == + TALER_amount_cmp (&h1->details.merge_details.purse_fee, + &h2->details.merge_details.purse_fee)) && + (GNUNET_TIME_timestamp_cmp (h1->details.merge_details.merge_timestamp, + ==, + h2->details.merge_details.merge_timestamp)) + && + (GNUNET_TIME_timestamp_cmp (h1->details.merge_details.purse_expiration, + ==, + h2->details.merge_details.purse_expiration)) + && + (0 == + GNUNET_memcmp (&h1->details.merge_details.merge_pub, + &h2->details.merge_details.merge_pub)) && + (0 == + GNUNET_memcmp (&h1->details.merge_details.h_contract_terms, + &h2->details.merge_details.h_contract_terms)) && + (0 == + GNUNET_memcmp (&h1->details.merge_details.purse_pub, + &h2->details.merge_details.purse_pub)) && + (0 == + GNUNET_memcmp (&h1->details.merge_details.reserve_sig, + &h2->details.merge_details.reserve_sig)) && + (h1->details.merge_details.min_age == + h2->details.merge_details.min_age) && + (h1->details.merge_details.flags == + h2->details.merge_details.flags) ) + return 0; + return 1; + } + GNUNET_assert (0); + return 1; +} + + enum GNUNET_GenericReturnValue TALER_TESTING_parse_coin_reference ( const char *coin_reference, diff --git a/src/testing/testing_api_cmd_reserve_history.c b/src/testing/testing_api_cmd_reserve_history.c index fc94d8443..e79180643 100644 --- a/src/testing/testing_api_cmd_reserve_history.c +++ b/src/testing/testing_api_cmd_reserve_history.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014-2020 Taler Systems SA + Copyright (C) 2014-2022 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -71,76 +71,6 @@ struct HistoryState /** - * Compare @a h1 and @a h2. - * - * @param h1 a history entry - * @param h2 a history entry - * @return 0 if @a h1 and @a h2 are equal - */ -static int -history_entry_cmp (const struct TALER_EXCHANGE_ReserveHistoryEntry *h1, - const struct TALER_EXCHANGE_ReserveHistoryEntry *h2) -{ - if (h1->type != h2->type) - return 1; - switch (h1->type) - { - case TALER_EXCHANGE_RTT_CREDIT: - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == strcasecmp (h1->details.in_details.sender_url, - h2->details.in_details.sender_url)) && - (h1->details.in_details.wire_reference == - h2->details.in_details.wire_reference) && - (GNUNET_TIME_timestamp_cmp (h1->details.in_details.timestamp, - ==, - h2->details.in_details.timestamp)) ) - return 0; - return 1; - case TALER_EXCHANGE_RTT_WITHDRAWAL: - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - TALER_amount_cmp (&h1->details.withdraw.fee, - &h2->details.withdraw.fee)) ) - /* testing_api_cmd_withdraw doesn't set the out_authorization_sig, - so we cannot test for it here. but if the amount matches, - that should be good enough. */ - return 0; - return 1; - case TALER_EXCHANGE_RTT_RECOUP: - /* exchange_sig, exchange_pub and timestamp are NOT available - from the original recoup response, hence here NOT check(able/ed) */ - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - GNUNET_memcmp (&h1->details.recoup_details.coin_pub, - &h2->details.recoup_details.coin_pub)) ) - return 0; - return 1; - case TALER_EXCHANGE_RTT_CLOSE: - /* testing_api_cmd_exec_closer doesn't set the - receiver_account_details, exchange_sig, exchange_pub or wtid or timestamp - so we cannot test for it here. but if the amount matches, - that should be good enough. */ - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - TALER_amount_cmp (&h1->details.close_details.fee, - &h2->details.close_details.fee)) ) - return 0; - return 1; - } - GNUNET_assert (0); - return 1; -} - - -/** * Check if @a cmd changed the reserve, if so, find the * entry in @a history and set the respective index in @a found * to #GNUNET_YES. If the entry is not found, return #GNUNET_SYSERR. @@ -216,8 +146,8 @@ analyze_command (const struct TALER_ReservePublicKeyP *reserve_pub, if (found[i]) continue; /* already found, skip */ if (0 == - history_entry_cmp (he, - &history[i])) + TALER_TESTING_history_entry_cmp (he, + &history[i])) { found[i] = GNUNET_YES; return GNUNET_OK; @@ -336,7 +266,6 @@ history_run (void *cls, create_reserve = TALER_TESTING_interpreter_lookup_command (is, ss->reserve_reference); - if (NULL == create_reserve) { GNUNET_break (0); diff --git a/src/testing/testing_api_cmd_reserve_status.c b/src/testing/testing_api_cmd_reserve_status.c index 10f3ee99b..63f50772f 100644 --- a/src/testing/testing_api_cmd_reserve_status.c +++ b/src/testing/testing_api_cmd_reserve_status.c @@ -71,76 +71,6 @@ struct StatusState /** - * Compare @a h1 and @a h2. - * - * @param h1 a history entry - * @param h2 a history entry - * @return 0 if @a h1 and @a h2 are equal - */ -static int -history_entry_cmp (const struct TALER_EXCHANGE_ReserveHistoryEntry *h1, - const struct TALER_EXCHANGE_ReserveHistoryEntry *h2) -{ - if (h1->type != h2->type) - return 1; - switch (h1->type) - { - case TALER_EXCHANGE_RTT_CREDIT: - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == strcasecmp (h1->details.in_details.sender_url, - h2->details.in_details.sender_url)) && - (h1->details.in_details.wire_reference == - h2->details.in_details.wire_reference) && - (GNUNET_TIME_timestamp_cmp (h1->details.in_details.timestamp, - ==, - h2->details.in_details.timestamp)) ) - return 0; - return 1; - case TALER_EXCHANGE_RTT_WITHDRAWAL: - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - TALER_amount_cmp (&h1->details.withdraw.fee, - &h2->details.withdraw.fee)) ) - /* testing_api_cmd_withdraw doesn't set the out_authorization_sig, - so we cannot test for it here. but if the amount matches, - that should be good enough. */ - return 0; - return 1; - case TALER_EXCHANGE_RTT_RECOUP: - /* exchange_sig, exchange_pub and timestamp are NOT available - from the original recoup response, hence here NOT check(able/ed) */ - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - GNUNET_memcmp (&h1->details.recoup_details.coin_pub, - &h2->details.recoup_details.coin_pub)) ) - return 0; - return 1; - case TALER_EXCHANGE_RTT_CLOSE: - /* testing_api_cmd_exec_closer doesn't set the - receiver_account_details, exchange_sig, exchange_pub or wtid or timestamp - so we cannot test for it here. but if the amount matches, - that should be good enough. */ - if ( (0 == - TALER_amount_cmp (&h1->amount, - &h2->amount)) && - (0 == - TALER_amount_cmp (&h1->details.close_details.fee, - &h2->details.close_details.fee)) ) - return 0; - return 1; - } - GNUNET_assert (0); - return 1; -} - - -/** * Check if @a cmd changed the reserve, if so, find the * entry in @a history and set the respective index in @a found * to #GNUNET_YES. If the entry is not found, return #GNUNET_SYSERR. @@ -216,8 +146,8 @@ analyze_command (const struct TALER_ReservePublicKeyP *reserve_pub, if (found[i]) continue; /* already found, skip */ if (0 == - history_entry_cmp (he, - &history[i])) + TALER_TESTING_history_entry_cmp (he, + &history[i])) { found[i] = GNUNET_YES; return GNUNET_OK; |