diff options
author | Christian Grothoff <christian@grothoff.org> | 2023-09-18 18:59:53 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2023-09-18 18:59:53 +0200 |
commit | 12cff1b4439ab5dcc26fcf79e19518ae1bdce069 (patch) | |
tree | b2ba500293a986475a66cde99a8bdb28e84368aa /src/testing | |
parent | 612828b7ef2299769a5b525a0fbf031858edc4f4 (diff) | |
download | exchange-12cff1b4439ab5dcc26fcf79e19518ae1bdce069.tar.xz |
remove coin and reserve histories from exchange replies
Diffstat (limited to 'src/testing')
-rw-r--r-- | src/testing/Makefile.am | 1 | ||||
-rw-r--r-- | src/testing/test_exchange_api.c | 6 | ||||
-rw-r--r-- | src/testing/test_exchange_p2p.c | 4 | ||||
-rw-r--r-- | src/testing/test_kyc_api.c | 4 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_common.c | 13 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_reserve_history.c | 31 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_reserve_status.c | 397 |
7 files changed, 8 insertions, 448 deletions
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am index 957f028d9..3a4f06323 100644 --- a/src/testing/Makefile.am +++ b/src/testing/Makefile.am @@ -100,7 +100,6 @@ libtalertesting_la_SOURCES = \ testing_api_cmd_reserve_history.c \ testing_api_cmd_reserve_open.c \ testing_api_cmd_reserve_purse.c \ - testing_api_cmd_reserve_status.c \ testing_api_cmd_revoke.c \ testing_api_cmd_revoke_denom_key.c \ testing_api_cmd_revoke_sign_key.c \ diff --git a/src/testing/test_exchange_api.c b/src/testing/test_exchange_api.c index 41b8301a3..e3ef5a5bb 100644 --- a/src/testing/test_exchange_api.c +++ b/src/testing/test_exchange_api.c @@ -1154,12 +1154,8 @@ run (void *cls, MHD_HTTP_OK), TALER_TESTING_cmd_reserve_history ("history-batch-1", "create-batch-reserve-1", - "EUR:0", + "EUR:0.01", MHD_HTTP_OK), - TALER_TESTING_cmd_status ("status-batch-2", - "create-batch-reserve-1", - "EUR:0.0", - MHD_HTTP_OK), /** * Spend the coins. */ diff --git a/src/testing/test_exchange_p2p.c b/src/testing/test_exchange_p2p.c index 2fd7dfb29..6f25dd2b0 100644 --- a/src/testing/test_exchange_p2p.c +++ b/src/testing/test_exchange_p2p.c @@ -202,7 +202,7 @@ run (void *cls, "EUR:1.02", MHD_HTTP_OK), /* POST history doesn't yet support P2P transfers */ - TALER_TESTING_cmd_reserve_status ( + TALER_TESTING_cmd_reserve_history ( "push-check-post-merge-reserve-balance-post", "create-reserve-1", "EUR:1.02", @@ -256,7 +256,7 @@ run (void *cls, "create-reserve-1", "EUR:2.01", MHD_HTTP_OK), - TALER_TESTING_cmd_reserve_status ( + TALER_TESTING_cmd_reserve_history ( "push-check-post-merge-reserve-balance-post", "create-reserve-1", "EUR:2.01", diff --git a/src/testing/test_kyc_api.c b/src/testing/test_kyc_api.c index 5f51b86e8..71f1216a0 100644 --- a/src/testing/test_kyc_api.c +++ b/src/testing/test_kyc_api.c @@ -335,7 +335,7 @@ run (void *cls, "p2p_create-reserve-1", "EUR:1.03", MHD_HTTP_OK), - TALER_TESTING_cmd_reserve_status ( + TALER_TESTING_cmd_reserve_history ( "push-check-post-merge-reserve-balance-post", "p2p_create-reserve-1", "EUR:1.03", @@ -399,7 +399,7 @@ run (void *cls, "p2p_create-reserve-3", "EUR:1.02", MHD_HTTP_OK), - TALER_TESTING_cmd_reserve_status ( + TALER_TESTING_cmd_reserve_history ( "push-check-post-merge-reserve-balance-post", "p2p_create-reserve-3", "EUR:1.02", diff --git a/src/testing/testing_api_cmd_common.c b/src/testing/testing_api_cmd_common.c index 2c29f4ec2..9ed0f16b6 100644 --- a/src/testing/testing_api_cmd_common.c +++ b/src/testing/testing_api_cmd_common.c @@ -97,19 +97,6 @@ TALER_TESTING_history_entry_cmp ( &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, diff --git a/src/testing/testing_api_cmd_reserve_history.c b/src/testing/testing_api_cmd_reserve_history.c index ff0a8a554..4b08e78e8 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-2022 Taler Systems SA + Copyright (C) 2014-2023 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 @@ -65,12 +65,6 @@ struct HistoryState struct TALER_TESTING_Interpreter *is; /** - * Reserve history entry that corresponds to this operation. - * Will be of type #TALER_EXCHANGE_RTT_HISTORY. - */ - struct TALER_EXCHANGE_ReserveHistoryEntry reserve_history; - - /** * Expected HTTP response code. */ unsigned int expected_response_code; @@ -232,21 +226,6 @@ reserve_history_cb (void *cls, struct TALER_Amount eb; ss->rsh = NULL; - if (MHD_HTTP_OK == rs->hr.http_status) - { - struct TALER_EXCHANGE_Keys *keys; - const struct TALER_EXCHANGE_GlobalFee *gf; - - ss->reserve_history.type = TALER_EXCHANGE_RTT_HISTORY; - keys = TALER_TESTING_get_keys (is); - GNUNET_assert (NULL != keys); - gf = TALER_EXCHANGE_get_global_fee (keys, - rs->ts); - GNUNET_assert (NULL != gf); - ss->reserve_history.amount = gf->fees.history; - ss->reserve_history.details.history_details.request_timestamp = rs->ts; - ss->reserve_history.details.history_details.reserve_sig = *rs->reserve_sig; - } if (ss->expected_response_code != rs->hr.http_status) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -366,6 +345,7 @@ history_run (void *cls, TALER_TESTING_get_exchange_url (is), TALER_TESTING_get_keys (is), ss->reserve_priv, + 0, &reserve_history_cb, ss); } @@ -388,16 +368,11 @@ history_traits (void *cls, { struct HistoryState *hs = cls; struct TALER_TESTING_Trait traits[] = { - /* history entry MUST be first due to response code logic below! */ - TALER_TESTING_make_trait_reserve_history (0, - &hs->reserve_history), TALER_TESTING_make_trait_reserve_pub (&hs->reserve_pub), TALER_TESTING_trait_end () }; - return TALER_TESTING_get_trait ((hs->expected_response_code == MHD_HTTP_OK) - ? &traits[0] /* we have reserve history */ - : &traits[1], /* skip reserve history */ + return TALER_TESTING_get_trait (traits, ret, trait, index); diff --git a/src/testing/testing_api_cmd_reserve_status.c b/src/testing/testing_api_cmd_reserve_status.c deleted file mode 100644 index 2438b2c21..000000000 --- a/src/testing/testing_api_cmd_reserve_status.c +++ /dev/null @@ -1,397 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2014-2020 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 - published by the Free Software Foundation; either version 3, or - (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_cmd_reserve_status.c - * @brief Implement the /reserve/$RID/status test command. - * @author Marcello Stanisci - */ -#include "platform.h" -#include "taler_json_lib.h" -#include <gnunet/gnunet_curl_lib.h> -#include "taler_testing_lib.h" - - -/** - * State for a "status" CMD. - */ -struct StatusState -{ - /** - * Label to the command which created the reserve to check, - * needed to resort the reserve key. - */ - const char *reserve_reference; - - /** - * Handle to the "reserve status" operation. - */ - struct TALER_EXCHANGE_ReservesStatusHandle *rsh; - - /** - * Expected reserve balance. - */ - const char *expected_balance; - - /** - * Private key of the reserve being analyzed. - */ - const struct TALER_ReservePrivateKeyP *reserve_priv; - - /** - * Public key of the reserve being analyzed. - */ - struct TALER_ReservePublicKeyP reserve_pub; - - /** - * Expected HTTP response code. - */ - unsigned int expected_response_code; - - /** - * Interpreter state. - */ - struct TALER_TESTING_Interpreter *is; -}; - -/** - * Closure for analysis_cb(). - */ -struct AnalysisContext -{ - /** - * Reserve public key we are looking at. - */ - const struct TALER_ReservePublicKeyP *reserve_pub; - - /** - * Length of the @e history array. - */ - unsigned int history_length; - - /** - * Array of history items to match. - */ - const struct TALER_EXCHANGE_ReserveHistoryEntry *history; - - /** - * Array of @e history_length of matched entries. - */ - bool *found; - - /** - * Set to true if an entry could not be found. - */ - bool failure; -}; - - -/** - * Check if @a cmd changed the reserve, if so, find the - * entry in our history and set the respective index in found - * to true. If the entry is not found, set failure. - * - * @param cls our `struct AnalysisContext *` - * @param cmd command to analyze for impact on history - */ -static void -analyze_command (void *cls, - const struct TALER_TESTING_Command *cmd) -{ - struct AnalysisContext *ac = cls; - const struct TALER_ReservePublicKeyP *reserve_pub = ac->reserve_pub; - const struct TALER_EXCHANGE_ReserveHistoryEntry *history = ac->history; - unsigned int history_length = ac->history_length; - bool *found = ac->found; - - if (TALER_TESTING_cmd_is_batch (cmd)) - { - struct TALER_TESTING_Command *cur; - struct TALER_TESTING_Command *bcmd; - - cur = TALER_TESTING_cmd_batch_get_current (cmd); - if (GNUNET_OK != - TALER_TESTING_get_trait_batch_cmds (cmd, - &bcmd)) - { - GNUNET_break (0); - ac->failure = true; - return; - } - for (unsigned int i = 0; NULL != bcmd[i].label; i++) - { - struct TALER_TESTING_Command *step = &bcmd[i]; - - if (step == cur) - break; /* if *we* are in a batch, make sure not to analyze commands past 'now' */ - analyze_command (ac, - step); - if (ac->failure) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Entry for batch step `%s' missing in history\n", - step->label); - return; - } - } - return; - } - - { - const struct TALER_ReservePublicKeyP *rp; - - if (GNUNET_OK != - TALER_TESTING_get_trait_reserve_pub (cmd, - &rp)) - return; /* command does nothing for reserves */ - if (0 != - GNUNET_memcmp (rp, - reserve_pub)) - return; /* command affects some _other_ reserve */ - for (unsigned int j = 0; true; j++) - { - const struct TALER_EXCHANGE_ReserveHistoryEntry *he; - bool matched = false; - - if (GNUNET_OK != - TALER_TESTING_get_trait_reserve_history (cmd, - j, - &he)) - { - /* NOTE: only for debugging... */ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Command `%s' has the reserve_pub trait, but does not reserve history trait\n", - cmd->label); - return; /* command does nothing for reserves */ - } - for (unsigned int i = 0; i<history_length; i++) - { - if (found[i]) - continue; /* already found, skip */ - if (0 == - TALER_TESTING_history_entry_cmp (he, - &history[i])) - { - found[i] = true; - matched = true; - break; - } - } - if (! matched) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Command `%s' reserve history entry #%u not found\n", - cmd->label, - j); - ac->failure = true; - return; - } - } - } -} - - -/** - * Check that the reserve balance and HTTP response code are - * both acceptable. - * - * @param cls closure. - * @param rs HTTP response details - */ -static void -reserve_status_cb (void *cls, - const struct TALER_EXCHANGE_ReserveStatus *rs) -{ - struct StatusState *ss = cls; - struct TALER_TESTING_Interpreter *is = ss->is; - struct TALER_Amount eb; - - ss->rsh = NULL; - if (ss->expected_response_code != rs->hr.http_status) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected HTTP response code: %d in %s:%u\n", - rs->hr.http_status, - __FILE__, - __LINE__); - json_dumpf (rs->hr.reply, - stderr, - JSON_INDENT (2)); - TALER_TESTING_interpreter_fail (ss->is); - return; - } - if (MHD_HTTP_OK != rs->hr.http_status) - { - TALER_TESTING_interpreter_next (is); - return; - } - GNUNET_assert (GNUNET_OK == - TALER_string_to_amount (ss->expected_balance, - &eb)); - - if (0 != TALER_amount_cmp (&eb, - &rs->details.ok.balance)) - { - GNUNET_break (0); - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected amount in reserve: %s\n", - TALER_amount_to_string (&rs->details.ok.balance)); - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected balance of: %s\n", - TALER_amount_to_string (&eb)); - TALER_TESTING_interpreter_fail (ss->is); - return; - } - { - bool found[rs->details.ok.history_len]; - struct AnalysisContext ac = { - .reserve_pub = &ss->reserve_pub, - .history = rs->details.ok.history, - .history_length = rs->details.ok.history_len, - .found = found - }; - - memset (found, - 0, - sizeof (found)); - TALER_TESTING_iterate (is, - true, - &analyze_command, - &ac); - if (ac.failure) - { - json_dumpf (rs->hr.reply, - stderr, - JSON_INDENT (2)); - TALER_TESTING_interpreter_fail (ss->is); - return; - } - for (unsigned int i = 0; i<rs->details.ok.history_len; i++) - { - if (found[i]) - continue; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "History entry at index %u of type %d not justified by command status\n", - i, - rs->details.ok.history[i].type); - json_dumpf (rs->hr.reply, - stderr, - JSON_INDENT (2)); - TALER_TESTING_interpreter_fail (ss->is); - return; - } - } - TALER_TESTING_interpreter_next (is); -} - - -/** - * Run the command. - * - * @param cls closure. - * @param cmd the command being executed. - * @param is the interpreter state. - */ -static void -status_run (void *cls, - const struct TALER_TESTING_Command *cmd, - struct TALER_TESTING_Interpreter *is) -{ - struct StatusState *ss = cls; - const struct TALER_TESTING_Command *create_reserve; - - ss->is = is; - create_reserve - = TALER_TESTING_interpreter_lookup_command (is, - ss->reserve_reference); - - if (NULL == create_reserve) - { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (is); - return; - } - if (GNUNET_OK != - TALER_TESTING_get_trait_reserve_priv (create_reserve, - &ss->reserve_priv)) - { - GNUNET_break (0); - TALER_LOG_ERROR ("Failed to find reserve_priv for status query\n"); - TALER_TESTING_interpreter_fail (is); - return; - } - GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv, - &ss->reserve_pub.eddsa_pub); - ss->rsh = TALER_EXCHANGE_reserves_status ( - TALER_TESTING_interpreter_get_context (is), - TALER_TESTING_get_exchange_url (is), - TALER_TESTING_get_keys (is), - ss->reserve_priv, - &reserve_status_cb, - ss); -} - - -/** - * Cleanup the state from a "reserve status" CMD, and possibly - * cancel a pending operation thereof. - * - * @param cls closure. - * @param cmd the command which is being cleaned up. - */ -static void -status_cleanup (void *cls, - const struct TALER_TESTING_Command *cmd) -{ - struct StatusState *ss = cls; - - if (NULL != ss->rsh) - { - TALER_TESTING_command_incomplete (ss->is, - cmd->label); - TALER_EXCHANGE_reserves_status_cancel (ss->rsh); - ss->rsh = NULL; - } - GNUNET_free (ss); -} - - -struct TALER_TESTING_Command -TALER_TESTING_cmd_reserve_status (const char *label, - const char *reserve_reference, - const char *expected_balance, - unsigned int expected_response_code) -{ - struct StatusState *ss; - - GNUNET_assert (NULL != reserve_reference); - ss = GNUNET_new (struct StatusState); - ss->reserve_reference = reserve_reference; - ss->expected_balance = expected_balance; - ss->expected_response_code = expected_response_code; - { - struct TALER_TESTING_Command cmd = { - .cls = ss, - .label = label, - .run = &status_run, - .cleanup = &status_cleanup - }; - - return cmd; - } -} |