diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Makefile.am | 3 | ||||
| -rw-r--r-- | src/lib/testing_api_cmd_fakebank_transfer.c | 30 | ||||
| -rw-r--r-- | src/lib/testing_api_trait_time.c | 76 | 
3 files changed, 99 insertions, 10 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index adf075fa..8b20860b 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -107,7 +107,8 @@ libtalertesting_la_SOURCES = \    testing_api_trait_key_peer.c \    testing_api_trait_wtid.c \    testing_api_trait_amount.c \ -  testing_api_trait_cmd.c +  testing_api_trait_cmd.c \ +  testing_api_trait_time.c  libtalertesting_la_LIBADD = \    libtalerexchange.la \    $(top_builddir)/src/wire/libtalerwire.la \ diff --git a/src/lib/testing_api_cmd_fakebank_transfer.c b/src/lib/testing_api_cmd_fakebank_transfer.c index 43f72573..ce9ad854 100644 --- a/src/lib/testing_api_cmd_fakebank_transfer.c +++ b/src/lib/testing_api_cmd_fakebank_transfer.c @@ -102,6 +102,11 @@ struct FakebankTransferState    uint64_t serial_id;    /** +   * Timestamp of the transaction (as returned from the bank). +   */ +  struct GNUNET_TIME_Absolute timestamp; + +  /**     * Exchange URL.  This value is fed to the bank when requesting     * the wire transfer; note: the bank needs it because a merchant     * might want to know which exchange performed a wire transfer to @@ -182,6 +187,7 @@ do_retry (void *cls)   *        bogus (fails to follow the protocol)   * @param ec taler-specific error code, #TALER_EC_NONE on success   * @param serial_id unique ID of the wire transfer + * @param timestamp time stamp of the transaction made.   * @param full_response full response from the exchange (for   *        logging, in case of errors)   */ @@ -190,13 +196,13 @@ add_incoming_cb (void *cls,                   unsigned int http_status,  		 enum TALER_ErrorCode ec,                   uint64_t serial_id, +                 struct GNUNET_TIME_Absolute timestamp,                   const json_t *full_response)  {    struct FakebankTransferState *fts = cls;    struct TALER_TESTING_Interpreter *is = fts->is;    fts->aih = NULL; -  fts->serial_id = serial_id;    if (MHD_HTTP_OK != http_status)    {      if (GNUNET_YES == fts->do_retry) @@ -205,18 +211,20 @@ add_incoming_cb (void *cls,             (TALER_EC_DB_COMMIT_FAILED_ON_RETRY == ec) ||  	   (MHD_HTTP_INTERNAL_SERVER_ERROR == http_status) )        { -        GNUNET_log (GNUNET_ERROR_TYPE_INFO, -                    "Retrying fakebank transfer failed with %u/%d\n", -                    http_status, -                    (int) ec); +        GNUNET_log +          (GNUNET_ERROR_TYPE_INFO, +           "Retrying fakebank transfer failed with %u/%d\n", +           http_status, +           (int) ec);  	/* on DB conflicts, do not use backoff */  	if (TALER_EC_DB_COMMIT_FAILED_ON_RETRY == ec)  	  fts->backoff = GNUNET_TIME_UNIT_ZERO;  	else  	  fts->backoff = EXCHANGE_LIB_BACKOFF (fts->backoff); -	fts->retry_task = GNUNET_SCHEDULER_add_delayed (fts->backoff, -                                                        &do_retry, -                                                        fts); +	fts->retry_task = GNUNET_SCHEDULER_add_delayed +          (fts->backoff, +           &do_retry, +           fts);  	return;        }      } @@ -228,6 +236,9 @@ add_incoming_cb (void *cls,      TALER_TESTING_interpreter_fail (is);      return;    } + +  fts->serial_id = serial_id; +  fts->timestamp = timestamp;    TALER_TESTING_interpreter_next (is);  } @@ -422,7 +433,7 @@ fakebank_transfer_traits (void *cls,                            unsigned int index)  {    struct FakebankTransferState *fts = cls; -  #define MANDATORY 6 +  #define MANDATORY 7    struct TALER_TESTING_Trait traits[MANDATORY + 1] = {      TALER_TESTING_MAKE_TRAIT_DEBIT_ACCOUNT        (&fts->debit_account_no), @@ -431,6 +442,7 @@ fakebank_transfer_traits (void *cls,      TALER_TESTING_make_trait_url (0, fts->exchange_url),      TALER_TESTING_MAKE_TRAIT_ROW_ID (&fts->serial_id),      TALER_TESTING_make_trait_amount_obj (0, &fts->amount), +    TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp)    };    /** diff --git a/src/lib/testing_api_trait_time.c b/src/lib/testing_api_trait_time.c new file mode 100644 index 00000000..3fd07bbb --- /dev/null +++ b/src/lib/testing_api_trait_time.c @@ -0,0 +1,76 @@ +/* +  This file is part of TALER +  Copyright (C) 2018 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 exchange-lib/testing_api_trait_time.c + * @brief traits to offer time stamps. + * @author Marcello Stanisci + */ +#include "platform.h" +#include "taler_json_lib.h" +#include <gnunet/gnunet_curl_lib.h> +#include "exchange_api_handle.h" +#include "taler_signatures.h" +#include "taler_testing_lib.h" + +#define TALER_TESTING_TRAIT_TIME_ABS "time-abs" + +/** + * Obtain a absolute time from @a cmd. + * + * @param cmd command to extract trait from + * @param index which time stamp to pick if + *        @a cmd has multiple on offer. + * @param time[out] set to the wanted WTID. + * @return #GNUNET_OK on success + */ +int +TALER_TESTING_get_trait_absolute_time +  (const struct TALER_TESTING_Command *cmd, +   unsigned int index, +   const struct GNUNET_TIME_Absolute **time) +{ +  return cmd->traits (cmd->cls, +                      (const void **) time, +                      TALER_TESTING_TRAIT_TIME_ABS, +                      index); +} + + +/** + * Offer a absolute time. + * + * @param index associate the object with this index + * @param time which object should be returned + * @return the trait. + */ +struct TALER_TESTING_Trait +TALER_TESTING_make_trait_absolute_time +  (unsigned int index, +   const struct GNUNET_TIME_Absolute *time) +{ +  struct TALER_TESTING_Trait ret = { +    .index = index, +    .trait_name = TALER_TESTING_TRAIT_TIME_ABS, +    .ptr = (const void *) time +  }; +  return ret; +} + +/* end of testing_api_trait_time.c */  | 
