diff options
Diffstat (limited to 'src/lib/testing_api_cmd_bank_history_credit.c')
-rw-r--r-- | src/lib/testing_api_cmd_bank_history_credit.c | 212 |
1 files changed, 79 insertions, 133 deletions
diff --git a/src/lib/testing_api_cmd_bank_history_credit.c b/src/lib/testing_api_cmd_bank_history_credit.c index d2f962e20..be820ab4b 100644 --- a/src/lib/testing_api_cmd_bank_history_credit.c +++ b/src/lib/testing_api_cmd_bank_history_credit.c @@ -32,6 +32,30 @@ /** + * Item in the transaction history, as reconstructed from the + * command history. + */ +struct History +{ + + /** + * Wire details. + */ + struct TALER_BANK_CreditDetails details; + + /** + * Serial ID of the wire transfer. + */ + uint64_t row_id; + + /** + * URL to free. + */ + char *url; +}; + + +/** * State for a "history" CMD. */ struct HistoryState @@ -74,30 +98,16 @@ struct HistoryState */ int failed; -}; - - -/** - * Item in the transaction history, as reconstructed from the - * command history. - */ -struct History -{ - /** - * Wire details. + * Expected history. */ - struct TALER_BANK_CreditDetails details; + struct History *h; /** - * Serial ID of the wire transfer. + * Length of @e h */ - uint64_t row_id; + unsigned int total; - /** - * URL to free. - */ - char *url; }; @@ -128,22 +138,6 @@ history_traits (void *cls, /** - * Free history @a h of length @a h_len. - * - * @param h history array to free. - * @param h_len number of entries in @a h. - */ -static void -free_history (struct History *h, - uint64_t h_len) -{ - for (uint64_t off = 0; off<h_len; off++) - GNUNET_free (h[off].url); - GNUNET_free_non_null (h); -} - - -/** * Log which history we expected. Called when an error occurs. * * @param h what we expected. @@ -152,7 +146,7 @@ free_history (struct History *h, */ static void print_expected (struct History *h, - uint64_t h_len, + unsigned int h_len, unsigned int off) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -161,12 +155,12 @@ print_expected (struct History *h, (unsigned long long) h_len); GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected history:\n"); - for (uint64_t i = 0; i<h_len; i++) + for (unsigned int i = 0; i<h_len; i++) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "H(%llu): %s (serial: %llu, subject: %s," + "H(%u): %s (serial: %llu, subject: %s," " counterpart: %s)\n", - (unsigned long long) i, + i, TALER_amount2s (&h[i].details.amount), (unsigned long long) h[i].row_id, TALER_B2S (&h[i].details.reserve_pub), @@ -176,26 +170,6 @@ print_expected (struct History *h, /** - * Tell if the current item is beyond the allowed limit. - * - * @param total current number of items in the built history list. - * Note, this is the list we build locally and compare with - * what the server returned. - * @param hs the history CMD state. - * @param pos current item to be evaluated or not (if the list - * has already enough elements). - * @return GNUNET_OK / GNUNET_NO. - */ -static int -build_history_hit_limit (uint64_t total, - const struct HistoryState *hs, - const struct TALER_TESTING_Command *pos) -{ - return total >= hs->num_results; -} - - -/** * This function constructs the list of history elements that * interest the account number of the caller. It has two main * loops: the first to figure out how many history elements have @@ -205,50 +179,49 @@ build_history_hit_limit (uint64_t total, * @param is interpreter state (supposedly having the * current CMD pointing at a "history" CMD). * @param[out] rh history array to initialize. - * * @return number of entries in @a rh. */ -static uint64_t +static unsigned int build_history (struct TALER_TESTING_Interpreter *is, struct History **rh) { struct HistoryState *hs = is->commands[is->ip].cls; - uint64_t total; + unsigned int total; struct History *h; const struct TALER_TESTING_Command *add_incoming_cmd; int inc; unsigned int start; unsigned int end; - /** - * @var turns GNUNET_YES whenever either no 'start' value was + /* @var turns GNUNET_YES whenever either no 'start' value was * given for the history query, or the given value is found - * in the list of all the CMDs. - */int ok; + * in the list of all the CMDs. */// + int ok; const uint64_t *row_id_start = NULL; if (NULL != hs->start_row_reference) { - TALER_LOG_INFO - ("`%s': start row given via reference `%s'\n", - TALER_TESTING_interpreter_get_current_label (is), - hs->start_row_reference); - add_incoming_cmd = TALER_TESTING_interpreter_lookup_command - (is, hs->start_row_reference); + TALER_LOG_INFO ("`%s': start row given via reference `%s'\n", + TALER_TESTING_interpreter_get_current_label (is), + hs->start_row_reference); + add_incoming_cmd + = TALER_TESTING_interpreter_lookup_command (is, + hs->start_row_reference); GNUNET_assert (NULL != add_incoming_cmd); - GNUNET_assert (GNUNET_OK == TALER_TESTING_get_trait_uint64 - (add_incoming_cmd, 0, &row_id_start)); + GNUNET_assert (GNUNET_OK == + TALER_TESTING_get_trait_uint64 (add_incoming_cmd, + 0, + &row_id_start)); } GNUNET_assert (0 != hs->num_results); if (0 == is->ip) { - TALER_LOG_DEBUG ("Checking history at first CMD..\n"); + TALER_LOG_DEBUG ("Checking history at first CMD (empty history)\n"); *rh = NULL; return 0; } - /* AKA 'delta'. */ if (hs->num_results > 0) { inc = 1; /* _inc_rement */ @@ -304,9 +277,8 @@ build_history (struct TALER_TESTING_Interpreter *is, continue; /* skip until we find the marker */ TALER_LOG_DEBUG ("Found first row\n"); - if (build_history_hit_limit (total, - hs, - pos)) + if (total >= GNUNET_MAX (hs->num_results, + -hs->num_results) ) { TALER_LOG_DEBUG ("Hit history limit\n"); break; @@ -343,8 +315,7 @@ build_history (struct TALER_TESTING_Interpreter *is, } - GNUNET_assert (total < UINT_MAX); - h = GNUNET_new_array ((unsigned int) total, + h = GNUNET_new_array (total, struct History); total = 0; ok = GNUNET_NO; @@ -391,9 +362,8 @@ build_history (struct TALER_TESTING_Interpreter *is, continue; /* skip until we find the marker */ } - if (build_history_hit_limit (total, - hs, - pos)) + if (total >= GNUNET_MAX (hs->num_results, + -hs->num_results) ) { TALER_LOG_INFO ("Hit history limit (2)\n"); break; @@ -454,51 +424,31 @@ build_history (struct TALER_TESTING_Interpreter *is, /** - * Compute how many results we expect to be returned for - * the current command at @a is. - * - * @param is the interpreter state to inspect. - * @return number of results expected. - */ -static uint64_t -compute_result_count (struct TALER_TESTING_Interpreter *is) -{ - uint64_t total; - struct History *h; - - total = build_history (is, &h); - free_history (h, total); - return total; -} - - -/** * Check that the "/history" response matches the * CMD whose offset in the list of CMDs is @a off. * * @param is the interpreter state. + * @param h expected history (array) + * @param total length of @a h * @param off the offset (of the CMD list) where the command * to check is. * @param dir the expected direction of the transaction. * @param details the expected transaction details. - * * @return #GNUNET_OK if the transaction is what we expect. */ static int check_result (struct TALER_TESTING_Interpreter *is, + struct History *h, + unsigned int total, unsigned int off, const struct TALER_BANK_CreditDetails *details) { - uint64_t total; - struct History *h; - - total = build_history (is, &h); if (off >= total) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Test says history has at most %u" " results, but got result #%u to check\n", - (unsigned int) total, + total, off); print_expected (h, total, @@ -516,12 +466,8 @@ check_result (struct TALER_TESTING_Interpreter *is, print_expected (h, total, off); - free_history (h, - total); return GNUNET_SYSERR; } - free_history (h, - total); return GNUNET_OK; } @@ -561,31 +507,34 @@ history_cb (void *cls, struct HistoryState *hs = is->commands[is->ip].cls; (void) row_id; + if (MHD_HTTP_OK != http_status) + { + hs->hh = NULL; + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Unwanted response code from /history: %u\n", + http_status); + TALER_TESTING_interpreter_fail (is); + return GNUNET_SYSERR; + } if (NULL == details) { hs->hh = NULL; - if ( (hs->results_obtained != compute_result_count (is)) || + if ( (hs->results_obtained != hs->total) || (GNUNET_YES == hs->failed) || (MHD_HTTP_NO_CONTENT != http_status) ) { - uint64_t total; - struct History *h; - GNUNET_break (0); - total = build_history (is, &h); GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected history of length %llu, got %llu;" + "Expected history of length %u, got %llu;" " HTTP status code: %u/%d, failed: %d\n", - (unsigned long long) total, + hs->total, (unsigned long long) hs->results_obtained, http_status, (int) ec, hs->failed); - print_expected (h, - total, + print_expected (hs->h, + hs->total, UINT_MAX); - free_history (h, - total); TALER_TESTING_interpreter_fail (is); return GNUNET_SYSERR; } @@ -593,17 +542,10 @@ history_cb (void *cls, return GNUNET_OK; } - if (MHD_HTTP_OK != http_status) - { - hs->hh = NULL; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unwanted response code from /history: %u\n", - http_status); - TALER_TESTING_interpreter_fail (is); - return GNUNET_SYSERR; - } /* check current element */ if (GNUNET_OK != check_result (is, + hs->h, + hs->total, hs->results_obtained, details)) { @@ -664,7 +606,8 @@ history_run (void *cls, TALER_LOG_DEBUG ("row id (from trait) is %llu\n", (unsigned long long) row_id); } - + hs->total = build_history (is, + &hs->h); hs->hh = TALER_BANK_credit_history (is->ctx, hs->account_url, &hs->auth, @@ -696,6 +639,9 @@ history_cleanup (void *cls, TALER_BANK_credit_history_cancel (hs->hh); } GNUNET_free (hs->account_url); + for (unsigned int off = 0; off<hs->total; off++) + GNUNET_free (hs->h[off].url); + GNUNET_free_non_null (hs->h); GNUNET_free (hs); } |