gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] 32/130: work on testing ftbfs


From: gnunet
Subject: [taler-exchange] 32/130: work on testing ftbfs
Date: Wed, 17 Nov 2021 12:24:40 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

commit b449c7353ef5d789500244c790bae5affedf0ee7
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Oct 27 18:37:42 2021 +0200

    work on testing ftbfs
---
 src/include/taler_json_lib.h                       |  2 +-
 src/include/taler_testing_lib.h                    | 86 ++++++++++---------
 src/json/json.c                                    |  4 +-
 .../testing_api_cmd_auditor_add_denom_sig.c        | 25 +-----
 .../testing_api_cmd_auditor_deposit_confirmation.c | 60 +------------
 src/testing/testing_api_cmd_auditor_exec_auditor.c | 11 +--
 .../testing_api_cmd_auditor_exec_auditor_dbinit.c  |  9 +-
 .../testing_api_cmd_bank_admin_add_incoming.c      | 56 +++++--------
 src/testing/testing_api_cmd_bank_admin_check.c     | 31 +------
 src/testing/testing_api_cmd_bank_check.c           | 52 ++++++------
 src/testing/testing_api_cmd_bank_history_credit.c  | 97 +++++++--------------
 src/testing/testing_api_cmd_bank_history_debit.c   | 98 ++++++----------------
 src/testing/testing_api_cmd_bank_transfer.c        | 40 +++------
 src/testing/testing_api_cmd_batch.c                | 48 +----------
 src/testing/testing_api_cmd_deposit.c              | 33 +++-----
 src/testing/testing_api_cmd_deposits_get.c         | 12 +--
 src/testing/testing_api_cmd_exec_aggregator.c      | 12 +--
 src/testing/testing_api_cmd_exec_closer.c          | 33 ++------
 src/testing/testing_api_cmd_exec_transfer.c        | 12 +--
 src/testing/testing_api_cmd_exec_wirewatch.c       | 13 +--
 src/testing/testing_api_cmd_rewind.c               | 17 +---
 src/testing/testing_api_cmd_stat.c                 | 58 ++-----------
 src/testing/testing_api_cmd_status.c               | 18 +---
 src/testing/testing_api_loop.c                     | 98 +---------------------
 24 files changed, 223 insertions(+), 702 deletions(-)

diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h
index 42c3669d..e381a7a1 100644
--- a/src/include/taler_json_lib.h
+++ b/src/include/taler_json_lib.h
@@ -383,7 +383,7 @@ TALER_JSON_spec_i18n_str (const char *name,
  */
 enum GNUNET_GenericReturnValue
 TALER_JSON_contract_hash (const json_t *json,
-                          struct GNUNET_HashCode *hc);
+                          struct TALER_PrivateContractHash *hc);
 
 
 /**
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 041ed3d0..7c066294 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -1871,7 +1871,7 @@ TALER_TESTING_cmd_batch (const char *label,
  *
  * @return false if not, true if it is a batch command
  */
-int
+bool
 TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd);
 
 /**
@@ -2259,10 +2259,10 @@ TALER_TESTING_get_trait (const struct 
TALER_TESTING_Trait *traits,
   enum GNUNET_GenericReturnValue                          \
     TALER_TESTING_get_trait_ ## name (                    \
     const struct TALER_TESTING_Command *cmd,              \
-    const type **ret);                                    \
+    type **ret);                                          \
   struct TALER_TESTING_Trait                              \
     TALER_TESTING_make_trait_ ## name (                   \
-    const type * value);
+    type * value);
 
 
 /**
@@ -2273,8 +2273,9 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait 
*traits,
   enum GNUNET_GenericReturnValue                         \
     TALER_TESTING_get_trait_ ## name (                   \
     const struct TALER_TESTING_Command *cmd,             \
-    const type **ret)                                    \
+    type **ret)                                          \
   {                                                      \
+    if (NULL == cmd->traits) return GNUNET_SYSERR;       \
     return cmd->traits (cmd->cls,                        \
                         (const void **) ret,             \
                         TALER_S (name),                  \
@@ -2301,11 +2302,11 @@ TALER_TESTING_get_trait (const struct 
TALER_TESTING_Trait *traits,
     TALER_TESTING_get_trait_ ## name (                    \
     const struct TALER_TESTING_Command *cmd,              \
     unsigned int index,                                   \
-    const type **ret);                                    \
+    type **ret);                                          \
   struct TALER_TESTING_Trait                              \
     TALER_TESTING_make_trait_ ## name (                   \
     unsigned int index,                                   \
-    const type * value);
+    type * value);
 
 
 /**
@@ -2317,8 +2318,9 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait 
*traits,
     TALER_TESTING_get_trait_ ## name (                   \
     const struct TALER_TESTING_Command *cmd,             \
     unsigned int index,                                  \
-    const type **ret)                                    \
+    type **ret)                                          \
   {                                                      \
+    if (NULL == cmd->traits) return GNUNET_SYSERR;       \
     return cmd->traits (cmd->cls,                        \
                         (const void **) ret,             \
                         TALER_S (name),                  \
@@ -2327,7 +2329,7 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait 
*traits,
   struct TALER_TESTING_Trait                             \
     TALER_TESTING_make_trait_ ## name (                  \
     unsigned int index,                                  \
-    const type * value)                                  \
+    type * value)                                        \
   {                                                      \
     struct TALER_TESTING_Trait ret = {                   \
       .index = index,                                    \
@@ -2342,45 +2344,47 @@ TALER_TESTING_get_trait (const struct 
TALER_TESTING_Trait *traits,
  * Call #op on all simple traits.
  */
 #define TALER_TESTING_SIMPLE_TRAITS(op) \
-  op (exchange_pub, struct TALER_ExchangePublicKeyP)         \
-  op (bank_row, uint64_t)                                    \
-  op (reserve_priv, struct TALER_ReservePrivateKeyP) \
-  op (reserve_pub, struct TALER_ReservePublicKeyP)   \
-  op (exchange_sig, struct TALER_ExchangeSignatureP)         \
-  op (exchange_pub, struct TALER_ExchangePublicKeyP)         \
-  op (merchant_priv, struct TALER_MerchantPrivateKeyP)       \
-  op (merchant_pub, struct TALER_MerchantPublicKeyP)         \
-  op (wtid, struct TALER_WireTransferIdentifierRawP)         \
-  op (contract_terms, json_t)                                \
-  op (wire_details, json_t)                                  \
-  op (exchange_keys, json_t)                                 \
-  op (reserve_history, struct TALER_EXCHANGE_ReserveHistory) \
-  op (exchange_url, char *)                                  \
-  op (exchange_bank_account_url, char *)                     \
-  op (taler_uri, char *)                                     \
-  op (payto_uri, char *)                                     \
-  op (credit_payto_uri, char *)                              \
-  op (debit_payto_uri, char *)                               \
-  op (order_id, char *)                                      \
-  op (amount, struct TALER_Amount)                           \
-  op (cmd, struct TALER_TESTING_Command)                     \
-  op (uuid, struct GNUNET_Uuid)                              \
-  op (claim_token, struct TALER_ClaimTokenP)                 \
-  op (absolute_time, struct GNUNET_TIME_Absolute)            \
-  op (relative_time, struct GNUNET_TIME_Relative)            \
+  op (bank_row, const uint64_t)                                    \
+  op (reserve_priv, const struct TALER_ReservePrivateKeyP) \
+  op (reserve_pub, const struct TALER_ReservePublicKeyP)   \
+  op (merchant_priv, const struct TALER_MerchantPrivateKeyP)       \
+  op (merchant_pub, const struct TALER_MerchantPublicKeyP)         \
+  op (wtid, const struct TALER_WireTransferIdentifierRawP)         \
+  op (contract_terms, const json_t)                                \
+  op (wire_details, const json_t)                                  \
+  op (exchange_keys, const json_t)                                 \
+  op (reserve_history, const struct TALER_EXCHANGE_ReserveHistory) \
+  op (exchange_url, const char *)                                  \
+  op (exchange_bank_account_url, const char *)                     \
+  op (taler_uri, const char *)                                     \
+  op (payto_uri, const char *)                                     \
+  op (row, const uint64_t)                                     \
+  op (credit_payto_uri, const char *)                              \
+  op (debit_payto_uri, const char *)                               \
+  op (order_id, const char *)                                      \
+  op (amount, const struct TALER_Amount)                           \
+  op (deposit_amount, const struct TALER_Amount)                           \
+  op (deposit_fee_amount, const struct TALER_Amount)                           
\
+  op (batch_cmds, struct TALER_TESTING_Command *)                  \
+  op (uuid, const struct GNUNET_Uuid)                              \
+  op (claim_token, const struct TALER_ClaimTokenP)                 \
+  op (relative_time, const struct GNUNET_TIME_Relative)            \
   op (process, struct GNUNET_OS_Process *)
 
 
 /**
  * Call #op on all indexed traits.
  */
-#define TALER_TESTING_INDEXED_TRAITS(op)                          \
-  op (denom_pub, struct TALER_EXCHANGE_DenomPublicKey)         \
-  op (denom_sig, struct TALER_EXCHANGE_DenominationKeySignature)  \
-  op (coin_priv, struct TALER_CoinSpendPrivateKeyP)            \
-  op (coin_pub, struct TALER_CoinSpendPublicKeyP)              \
-  op (fresh_coin, struct TALER_TESTING_FreshCoinData)          \
-  op (blinding_key, struct TALER_DenominationBlindingKeyP)
+#define TALER_TESTING_INDEXED_TRAITS(op)                         \
+  op (denom_pub, const struct TALER_EXCHANGE_DenomPublicKey)           \
+  op (denom_sig, const struct TALER_DenominationSignature) \
+  op (coin_priv, const struct TALER_CoinSpendPrivateKeyP)              \
+  op (coin_pub, const struct TALER_CoinSpendPublicKeyP)                \
+  op (fresh_coin, const struct TALER_TESTING_FreshCoinData)            \
+  op (absolute_time, const struct GNUNET_TIME_Absolute)                \
+  op (exchange_pub, const struct TALER_ExchangePublicKeyP)             \
+  op (exchange_sig, const struct TALER_ExchangeSignatureP)             \
+  op (blinding_key, const struct TALER_DenominationBlindingKeyP)
 
 
 TALER_TESTING_SIMPLE_TRAITS (TALER_TESTING_MAKE_DECL_SIMPLE_TRAIT)
diff --git a/src/json/json.c b/src/json/json.c
index 4c2b82cc..2dfabbf9 100644
--- a/src/json/json.c
+++ b/src/json/json.c
@@ -325,7 +325,7 @@ forget (const json_t *in,
 
 enum GNUNET_GenericReturnValue
 TALER_JSON_contract_hash (const json_t *json,
-                          struct GNUNET_HashCode *hc)
+                          struct TALER_PrivateContractHash *hc)
 {
   enum GNUNET_GenericReturnValue ret;
   json_t *cjson;
@@ -339,7 +339,7 @@ TALER_JSON_contract_hash (const json_t *json,
     return ret;
   ret = dump_and_hash (cjson,
                        NULL,
-                       hc);
+                       &hc->hash);
   json_decref (cjson);
   return ret;
 }
diff --git a/src/testing/testing_api_cmd_auditor_add_denom_sig.c 
b/src/testing/testing_api_cmd_auditor_add_denom_sig.c
index efa4a9d7..33cd9575 100644
--- a/src/testing/testing_api_cmd_auditor_add_denom_sig.c
+++ b/src/testing/testing_api_cmd_auditor_add_denom_sig.c
@@ -108,7 +108,7 @@ auditor_add_run (void *cls,
 {
   struct AuditorAddDenomSigState *ds = cls;
   struct TALER_AuditorSignatureP auditor_sig;
-  struct GNUNET_HashCode h_denom_pub;
+  struct TALER_DenominationHash h_denom_pub;
   const struct TALER_EXCHANGE_DenomPublicKey *dk;
 
   (void) cmd;
@@ -202,26 +202,6 @@ auditor_add_cleanup (void *cls,
 }
 
 
-/**
- * Offer internal data from a "auditor_add" CMD, to other commands.
- *
- * @param cls closure.
- * @param[out] ret result.
- * @param trait name of the trait.
- * @param index index number of the object to offer.
- *
- * @return #GNUNET_OK on success.
- */
-static int
-auditor_add_traits (void *cls,
-                    const void **ret,
-                    const char *trait,
-                    unsigned int index)
-{
-  return GNUNET_NO;
-}
-
-
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_auditor_add_denom_sig (const char *label,
                                          unsigned int expected_http_status,
@@ -239,8 +219,7 @@ TALER_TESTING_cmd_auditor_add_denom_sig (const char *label,
       .cls = ds,
       .label = label,
       .run = &auditor_add_run,
-      .cleanup = &auditor_add_cleanup,
-      .traits = &auditor_add_traits
+      .cleanup = &auditor_add_cleanup
     };
 
     return cmd;
diff --git a/src/testing/testing_api_cmd_auditor_deposit_confirmation.c 
b/src/testing/testing_api_cmd_auditor_deposit_confirmation.c
index f40d78c8..6522fe5b 100644
--- a/src/testing/testing_api_cmd_auditor_deposit_confirmation.c
+++ b/src/testing/testing_api_cmd_auditor_deposit_confirmation.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018 Taler Systems SA
+  Copyright (C) 2018, 2021 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
@@ -201,8 +201,8 @@ deposit_confirmation_run (void *cls,
 {
   struct DepositConfirmationState *dcs = cls;
   const struct TALER_TESTING_Command *deposit_cmd;
-  struct GNUNET_HashCode h_wire;
-  struct GNUNET_HashCode h_contract_terms;
+  struct TALER_MerchantWireHash h_wire;
+  struct TALER_PrivateContractHash h_contract_terms;
   const struct GNUNET_TIME_Absolute *exchange_timestamp = NULL;
   struct GNUNET_TIME_Absolute timestamp;
   struct GNUNET_TIME_Absolute refund_deadline;
@@ -251,7 +251,6 @@ deposit_confirmation_run (void *cls,
 
   GNUNET_assert (GNUNET_OK ==
                  TALER_TESTING_get_trait_contract_terms (deposit_cmd,
-                                                         dcs->coin_index,
                                                          &contract_terms));
   /* Very unlikely to fail */
   GNUNET_assert (NULL != contract_terms);
@@ -260,7 +259,6 @@ deposit_confirmation_run (void *cls,
                                            &h_contract_terms));
   GNUNET_assert (GNUNET_OK ==
                  TALER_TESTING_get_trait_wire_details (deposit_cmd,
-                                                       dcs->coin_index,
                                                        &wire_details));
   GNUNET_assert (GNUNET_OK ==
                  TALER_JSON_merchant_wire_signature_hash (wire_details,
@@ -273,7 +271,6 @@ deposit_confirmation_run (void *cls,
                                       &coin_pub.eddsa_pub);
   GNUNET_assert (GNUNET_OK ==
                  TALER_TESTING_get_trait_merchant_priv (deposit_cmd,
-                                                        dcs->coin_index,
                                                         &merchant_priv));
   GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
                                       &merchant_pub.eddsa_pub);
@@ -371,47 +368,6 @@ deposit_confirmation_cleanup (void *cls,
 }
 
 
-/**
- * Offer internal data to other commands.
- *
- * @param cls closure.
- * @param[out] ret set to the wanted data.
- * @param trait name of the trait.
- * @param index index number of the traits to be returned.
- *
- * @return #GNUNET_OK on success
- */
-static int
-deposit_confirmation_traits (void *cls,
-                             const void **ret,
-                             const char *trait,
-                             unsigned int index)
-{
-  (void) cls;
-  (void) ret;
-  (void) trait;
-  (void) index;
-  /* Must define this function because some callbacks
-   * look for certain traits on _all_ the commands. */
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Create a "deposit-confirmation" command.
- *
- * @param label command label.
- * @param auditor auditor connection.
- * @param deposit_reference reference to any operation that can
- *        provide a coin.
- * @param coin_index if @a deposit_reference offers an array of
- *        coins, this parameter selects which one in that array.
- *        This value is currently ignored, as only one-coin
- *        deposits are implemented.
- * @param amount_without_fee deposited amount without the fee
- * @param expected_response_code expected HTTP response code.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_deposit_confirmation (const char *label,
                                         struct TALER_AUDITOR_Handle *auditor,
@@ -434,8 +390,7 @@ TALER_TESTING_cmd_deposit_confirmation (const char *label,
       .cls = dcs,
       .label = label,
       .run = &deposit_confirmation_run,
-      .cleanup = &deposit_confirmation_cleanup,
-      .traits = &deposit_confirmation_traits
+      .cleanup = &deposit_confirmation_cleanup
     };
 
     return cmd;
@@ -443,13 +398,6 @@ TALER_TESTING_cmd_deposit_confirmation (const char *label,
 }
 
 
-/**
- * Modify a deposit confirmation command to enable retries when we get
- * transient errors from the auditor.
- *
- * @param cmd a deposit confirmation command
- * @return the command with retries enabled
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_deposit_confirmation_with_retry (
   struct TALER_TESTING_Command cmd)
diff --git a/src/testing/testing_api_cmd_auditor_exec_auditor.c 
b/src/testing/testing_api_cmd_auditor_exec_auditor.c
index 06dfe91b..8ec128c0 100644
--- a/src/testing/testing_api_cmd_auditor_exec_auditor.c
+++ b/src/testing/testing_api_cmd_auditor_exec_auditor.c
@@ -115,7 +115,7 @@ auditor_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 auditor_traits (void *cls,
                 const void **ret,
                 const char *trait,
@@ -123,7 +123,7 @@ auditor_traits (void *cls,
 {
   struct AuditorState *ks = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0, &ks->auditor_proc),
+    TALER_TESTING_make_trait_process (&ks->auditor_proc),
     TALER_TESTING_trait_end ()
   };
 
@@ -134,13 +134,6 @@ auditor_traits (void *cls,
 }
 
 
-/**
- * Make the "exec-auditor" CMD.
- *
- * @param label command label.
- * @param config_filename configuration filename.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_auditor (const char *label,
                                 const char *config_filename)
diff --git a/src/testing/testing_api_cmd_auditor_exec_auditor_dbinit.c 
b/src/testing/testing_api_cmd_auditor_exec_auditor_dbinit.c
index c09ec291..2ab5bda8 100644
--- a/src/testing/testing_api_cmd_auditor_exec_auditor_dbinit.c
+++ b/src/testing/testing_api_cmd_auditor_exec_auditor_dbinit.c
@@ -124,7 +124,7 @@ auditor_dbinit_traits (void *cls,
 {
   struct AuditorDbinitState *ks = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0, &ks->auditor_dbinit_proc),
+    TALER_TESTING_make_trait_process (&ks->auditor_dbinit_proc),
     TALER_TESTING_trait_end ()
   };
 
@@ -135,13 +135,6 @@ auditor_dbinit_traits (void *cls,
 }
 
 
-/**
- * Make the "exec-auditor-dbinit" CMD.
- *
- * @param label command label.
- * @param config_filename configuration filename.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_auditor_dbinit (const char *label,
                                        const char *config_filename)
diff --git a/src/testing/testing_api_cmd_bank_admin_add_incoming.c 
b/src/testing/testing_api_cmd_bank_admin_add_incoming.c
index 28f907fd..10114ae7 100644
--- a/src/testing/testing_api_cmd_bank_admin_add_incoming.c
+++ b/src/testing/testing_api_cmd_bank_admin_add_incoming.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018-2020 Taler Systems SA
+  Copyright (C) 2018-2021 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
@@ -326,11 +326,9 @@ admin_add_incoming_run (void *cls,
     }
     if (GNUNET_OK !=
         TALER_TESTING_get_trait_reserve_priv (ref,
-                                              0,
                                               &reserve_priv))
     {
       if (GNUNET_OK != TALER_TESTING_get_trait_reserve_pub (ref,
-                                                            0,
                                                             &reserve_pub))
       {
         GNUNET_break (0);
@@ -420,13 +418,14 @@ admin_add_incoming_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 admin_add_incoming_traits (void *cls,
                            const void **ret,
                            const char *trait,
                            unsigned int index)
 {
   struct AdminAddIncomingState *fts = cls;
+  static const char *void_uri = "payto://void/the-exchange";
 
   if (MHD_HTTP_OK !=
       fts->expected_http_status)
@@ -435,21 +434,16 @@ admin_add_incoming_traits (void *cls,
   {
     struct TALER_TESTING_Trait traits[] = {
       TALER_TESTING_make_trait_bank_row (&fts->serial_id),
-      TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT,
-                                      fts->payto_debit_account),
+      TALER_TESTING_make_trait_debit_payto_uri (&fts->payto_debit_account),
       /* Used as a marker, content does not matter */
-      TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT,
-                                      "payto://void/the-exchange"),
-      TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL,
-                                    fts->exchange_credit_url),
-      TALER_TESTING_make_trait_amount_obj (0, &fts->amount),
+      TALER_TESTING_make_trait_credit_payto_uri (&void_uri),
+      TALER_TESTING_make_trait_exchange_bank_account_url (
+        &fts->exchange_credit_url),
+      TALER_TESTING_make_trait_amount (&fts->amount),
       TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
-      TALER_TESTING_make_trait_reserve_priv (0,
-                                             &fts->reserve_priv),
-      TALER_TESTING_make_trait_reserve_pub (0,
-                                            &fts->reserve_pub),
-      TALER_TESTING_make_trait_reserve_history (0,
-                                                &fts->reserve_history),
+      TALER_TESTING_make_trait_reserve_priv (&fts->reserve_priv),
+      TALER_TESTING_make_trait_reserve_pub (&fts->reserve_pub),
+      TALER_TESTING_make_trait_reserve_history (&fts->reserve_history),
       TALER_TESTING_trait_end ()
     };
 
@@ -462,19 +456,15 @@ admin_add_incoming_traits (void *cls,
   {
     struct TALER_TESTING_Trait traits[] = {
       TALER_TESTING_make_trait_bank_row (&fts->serial_id),
-      TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT,
-                                      fts->payto_debit_account),
+      TALER_TESTING_make_trait_debit_payto_uri (&fts->payto_debit_account),
       /* Used as a marker, content does not matter */
-      TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT,
-                                      "payto://void/the-exchange"),
-      TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL,
-                                    fts->exchange_credit_url),
-      TALER_TESTING_make_trait_amount_obj (0, &fts->amount),
+      TALER_TESTING_make_trait_credit_payto_uri (&void_uri),
+      TALER_TESTING_make_trait_exchange_bank_account_url (
+        &fts->exchange_credit_url),
+      TALER_TESTING_make_trait_amount (&fts->amount),
       TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
-      TALER_TESTING_make_trait_reserve_pub (0,
-                                            &fts->reserve_pub),
-      TALER_TESTING_make_trait_reserve_history (0,
-                                                &fts->reserve_history),
+      TALER_TESTING_make_trait_reserve_pub (&fts->reserve_pub),
+      TALER_TESTING_make_trait_reserve_history (&fts->reserve_history),
       TALER_TESTING_trait_end ()
     };
 
@@ -543,11 +533,11 @@ make_command (const char *label,
 
 
 struct TALER_TESTING_Command
-TALER_TESTING_cmd_admin_add_incoming (const char *label,
-                                      const char *amount,
-                                      const struct
-                                      TALER_BANK_AuthenticationData *auth,
-                                      const char *payto_debit_account)
+TALER_TESTING_cmd_admin_add_incoming (
+  const char *label,
+  const char *amount,
+  const struct TALER_BANK_AuthenticationData *auth,
+  const char *payto_debit_account)
 {
   return make_command (label,
                        make_fts (amount,
diff --git a/src/testing/testing_api_cmd_bank_admin_check.c 
b/src/testing/testing_api_cmd_bank_admin_check.c
index 473f3f3f..21a23083 100644
--- a/src/testing/testing_api_cmd_bank_admin_check.c
+++ b/src/testing/testing_api_cmd_bank_admin_check.c
@@ -95,7 +95,6 @@ check_bank_admin_transfer_run (void *cls,
   }
   if (GNUNET_OK !=
       TALER_TESTING_get_trait_reserve_pub (cmd_ref,
-                                           0,
                                            &reserve_pub))
   {
     GNUNET_break (0);
@@ -159,33 +158,6 @@ check_bank_admin_transfer_cleanup (void *cls,
 }
 
 
-/**
- * Offer internal data from a "bank admin check" CMD state.
- *
- * @param cls closure.
- * @param[out] ret result.
- * @param trait name of the trait.
- * @param index index number of the object to offer.
- * @return #GNUNET_OK on success.
- */
-static int
-check_bank_admin_transfer_traits (void *cls,
-                                  const void **ret,
-                                  const char *trait,
-                                  unsigned int index)
-{
-  struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_trait_end ()
-  };
-
-  (void) cls;
-  return TALER_TESTING_get_trait (traits,
-                                  ret,
-                                  trait,
-                                  index);
-}
-
-
 /**
  * Make a "bank check" CMD.  It checks whether a particular wire transfer to
  * the exchange (credit) has been made or not.
@@ -217,8 +189,7 @@ TALER_TESTING_cmd_check_bank_admin_transfer
       .label = label,
       .cls = bcs,
       .run = &check_bank_admin_transfer_run,
-      .cleanup = &check_bank_admin_transfer_cleanup,
-      .traits = &check_bank_admin_transfer_traits
+      .cleanup = &check_bank_admin_transfer_cleanup
     };
 
     return cmd;
diff --git a/src/testing/testing_api_cmd_bank_check.c 
b/src/testing/testing_api_cmd_bank_check.c
index c01bc709..ed4cde46 100644
--- a/src/testing/testing_api_cmd_bank_check.c
+++ b/src/testing/testing_api_cmd_bank_check.c
@@ -74,6 +74,7 @@ struct BankCheckState
   const char *deposit_reference;
 };
 
+
 /**
  * Run the command.
  *
@@ -90,17 +91,17 @@ check_bank_transfer_run (void *cls,
   struct TALER_Amount amount;
   char *debit_account;
   char *credit_account;
-  const char *exchange_base_url;
-  const char *debit_payto;
-  const char *credit_payto;
+  const char **exchange_base_url;
+  const char **debit_payto;
+  const char **credit_payto;
 
   (void) cmd;
   if (NULL == bcs->deposit_reference)
   {
     TALER_LOG_INFO ("Deposit reference NOT given\n");
-    debit_payto = bcs->debit_payto;
-    credit_payto = bcs->credit_payto;
-    exchange_base_url = bcs->exchange_base_url;
+    debit_payto = &bcs->debit_payto;
+    credit_payto = &bcs->credit_payto;
+    exchange_base_url = &bcs->exchange_base_url;
 
     if (GNUNET_OK !=
         TALER_string_to_amount (bcs->amount,
@@ -130,37 +131,33 @@ check_bank_transfer_run (void *cls,
     if (NULL == deposit_cmd)
       TALER_TESTING_FAIL (is);
     if ( (GNUNET_OK !=
-          TALER_TESTING_get_trait_amount_obj (deposit_cmd,
-                                              0,
-                                              &amount_ptr)) ||
+          TALER_TESTING_get_trait_amount (deposit_cmd,
+                                          &amount_ptr)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (deposit_cmd,
-                                         TALER_TESTING_PT_DEBIT,
-                                         &debit_payto)) ||
+          TALER_TESTING_get_trait_debit_payto_uri (deposit_cmd,
+                                                   &debit_payto)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (deposit_cmd,
-                                         TALER_TESTING_PT_CREDIT,
-                                         &credit_payto)) ||
+          TALER_TESTING_get_trait_credit_payto_uri (deposit_cmd,
+                                                    &credit_payto)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_url (deposit_cmd,
-                                       TALER_TESTING_UT_EXCHANGE_BASE_URL,
-                                       &exchange_base_url)) )
+          TALER_TESTING_get_trait_exchange_url (deposit_cmd,
+                                                &exchange_base_url)) )
       TALER_TESTING_FAIL (is);
     amount = *amount_ptr;
   }
 
 
-  debit_account = TALER_xtalerbank_account_from_payto (debit_payto);
-  credit_account = TALER_xtalerbank_account_from_payto (credit_payto);
+  debit_account = TALER_xtalerbank_account_from_payto (*debit_payto);
+  credit_account = TALER_xtalerbank_account_from_payto (*credit_payto);
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "converted debit_payto (%s) to debit_account (%s)\n",
-              debit_payto,
+              *debit_payto,
               debit_account);
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "converted credit_payto (%s) to credit_account (%s)\n",
-              credit_payto,
+              *credit_payto,
               credit_account);
 
   if (GNUNET_OK !=
@@ -168,7 +165,7 @@ check_bank_transfer_run (void *cls,
                                   &amount,
                                   debit_account,
                                   credit_account,
-                                  exchange_base_url,
+                                  *exchange_base_url,
                                   &bcs->wtid))
   {
     GNUNET_break (0);
@@ -209,7 +206,7 @@ check_bank_transfer_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 check_bank_transfer_traits (void *cls,
                             const void **ret,
                             const char *trait,
@@ -218,10 +215,9 @@ check_bank_transfer_traits (void *cls,
   struct BankCheckState *bcs = cls;
   struct TALER_WireTransferIdentifierRawP *wtid_ptr = &bcs->wtid;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_wtid (0,
-                                   wtid_ptr),
-    TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BASE_URL,
-                                  bcs->exchange_base_url),
+    TALER_TESTING_make_trait_wtid (wtid_ptr),
+    TALER_TESTING_make_trait_exchange_url (
+      &bcs->exchange_base_url),
     TALER_TESTING_trait_end ()
   };
 
diff --git a/src/testing/testing_api_cmd_bank_history_credit.c 
b/src/testing/testing_api_cmd_bank_history_credit.c
index c052b55f..a7ad40a4 100644
--- a/src/testing/testing_api_cmd_bank_history_credit.c
+++ b/src/testing/testing_api_cmd_bank_history_credit.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018-2020 Taler Systems SA
+  Copyright (C) 2018-2021 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
@@ -93,10 +93,10 @@ struct HistoryState
   uint64_t results_obtained;
 
   /**
-   * Set to GNUNET_YES if the callback detects something
+   * Set to true if the callback detects something
    * unexpected.
    */
-  int failed;
+  bool failed;
 
   /**
    * Expected history.
@@ -111,32 +111,6 @@ struct HistoryState
 };
 
 
-/**
- * Offer internal data to other commands.
- *
- * @param cls closure.
- * @param[out] ret set to the wanted data.
- * @param trait name of the trait.
- * @param index index number of the traits to be returned.
- *
- * @return #GNUNET_OK on success
- */
-static int
-history_traits (void *cls,
-                const void **ret,
-                const char *trait,
-                unsigned int index)
-{
-  (void) cls;
-  (void) ret;
-  (void) trait;
-  (void) index;
-  /* Must define this function because some callbacks
-   * look for certain traits on _all_ the commands. */
-  return GNUNET_SYSERR;
-}
-
-
 /**
  * Log which history we expected.  Called when an error occurs.
  *
@@ -210,9 +184,8 @@ build_history (struct TALER_TESTING_Interpreter *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));
+                   TALER_TESTING_get_trait_row (add_incoming_cmd,
+                                                &row_id_start));
   }
 
   GNUNET_assert (0 != hs->num_results);
@@ -249,11 +222,11 @@ build_history (struct TALER_TESTING_Interpreter *is,
   {
     const struct TALER_TESTING_Command *cmd = &is->commands[off];
     const uint64_t *row_id;
-    const char *credit_account;
-    const char *debit_account;
+    const char **credit_account;
+    const char **debit_account;
     const struct TALER_Amount *amount;
     const struct TALER_ReservePublicKeyP *reserve_pub;
-    const char *exchange_credit_url;
+    const char **exchange_credit_url;
 
     /* The following command allows us to skip over those CMDs
      * that do not offer a "row_id" trait.  Such skipped CMDs are
@@ -262,25 +235,21 @@ build_history (struct TALER_TESTING_Interpreter *is,
           TALER_TESTING_get_trait_bank_row (cmd,
                                             &row_id)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (cmd,
-                                         TALER_TESTING_PT_CREDIT,
-                                         &credit_account)) ||
+          TALER_TESTING_get_trait_credit_payto_uri (cmd,
+                                                    &credit_account)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (cmd,
-                                         TALER_TESTING_PT_DEBIT,
-                                         &debit_account)) ||
+          TALER_TESTING_get_trait_debit_payto_uri (cmd,
+                                                   &debit_account)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_amount_obj (cmd,
-                                              0,
-                                              &amount)) ||
+          TALER_TESTING_get_trait_amount (cmd,
+                                          &amount)) ||
          (GNUNET_OK !=
           TALER_TESTING_get_trait_reserve_pub (cmd,
-                                               0,
                                                &reserve_pub)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_url (cmd,
-                                       
TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL,
-                                       &exchange_credit_url)) )
+          TALER_TESTING_get_trait_exchange_bank_account_url (
+            cmd,
+            &exchange_credit_url)) )
       continue; /* not an interesting event */
     /* Seek "/history/incoming" starting row.  */
     if ( (NULL != row_id_start) &&
@@ -295,7 +264,7 @@ build_history (struct TALER_TESTING_Interpreter *is,
     if (GNUNET_NO == ok)
       continue; /* skip until we find the marker */
     if (0 != strcasecmp (hs->account_url,
-                         exchange_credit_url))
+                         *exchange_credit_url))
       continue; /* account mismatch */
     if (total >= GNUNET_MAX (hs->num_results,
                              -hs->num_results) )
@@ -304,20 +273,20 @@ build_history (struct TALER_TESTING_Interpreter *is,
       break;
     }
     TALER_LOG_INFO ("Found history: %s->%s for account %s\n",
-                    debit_account,
-                    credit_account,
+                    *debit_account,
+                    *credit_account,
                     hs->account_url);
     /* found matching record, make sure we have room */
     if (pos == total)
       GNUNET_array_grow (h,
                          total,
                          pos * 2);
-    h[pos].url = GNUNET_strdup (debit_account);
+    h[pos].url = GNUNET_strdup (*debit_account);
     h[pos].details.debit_account_uri = h[pos].url;
     h[pos].details.amount = *amount;
     h[pos].row_id = *row_id;
     h[pos].details.reserve_pub = *reserve_pub;
-    h[pos].details.credit_account_uri = exchange_credit_url;
+    h[pos].details.credit_account_uri = *exchange_credit_url;
     pos++;
   }
   GNUNET_assert (GNUNET_YES == ok);
@@ -405,7 +374,7 @@ check_result (struct History *h,
  *        reply was not in JSON.
  * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
  */
-static int
+static enum GNUNET_GenericReturnValue
 history_cb (void *cls,
             unsigned int http_status,
             enum TALER_ErrorCode ec,
@@ -421,7 +390,7 @@ history_cb (void *cls,
   {
     hs->hh = NULL;
     if ( (hs->results_obtained != hs->total) ||
-         (GNUNET_YES == hs->failed) ||
+         (hs->failed) ||
          (MHD_HTTP_NO_CONTENT != http_status) )
     {
       GNUNET_break (0);
@@ -432,7 +401,7 @@ history_cb (void *cls,
                   (unsigned long long) hs->results_obtained,
                   http_status,
                   (int) ec,
-                  hs->failed);
+                  hs->failed ? 1 : 0);
       print_expected (hs->h,
                       hs->total,
                       UINT_MAX);
@@ -469,7 +438,7 @@ history_cb (void *cls,
                 acc);
     if (NULL != acc)
       free (acc);
-    hs->failed = GNUNET_YES;
+    hs->failed = true;
     return GNUNET_SYSERR;
   }
   hs->results_obtained++;
@@ -499,16 +468,15 @@ history_run (void *cls,
   {
     const struct TALER_TESTING_Command *history_cmd;
 
-    history_cmd = TALER_TESTING_interpreter_lookup_command
-                    (is, hs->start_row_reference);
-
+    history_cmd = TALER_TESTING_interpreter_lookup_command (
+      is,
+      hs->start_row_reference);
     if (NULL == history_cmd)
       TALER_TESTING_FAIL (is);
 
     if (GNUNET_OK !=
-        TALER_TESTING_get_trait_uint64 (history_cmd,
-                                        0,
-                                        &row_ptr))
+        TALER_TESTING_get_trait_row (history_cmd,
+                                     &row_ptr))
       TALER_TESTING_FAIL (is);
     else
       row_id = *row_ptr;
@@ -574,8 +542,7 @@ TALER_TESTING_cmd_bank_credits (
       .label = label,
       .cls = hs,
       .run = &history_run,
-      .cleanup = &history_cleanup,
-      .traits = &history_traits
+      .cleanup = &history_cleanup
     };
 
     return cmd;
diff --git a/src/testing/testing_api_cmd_bank_history_debit.c 
b/src/testing/testing_api_cmd_bank_history_debit.c
index 779facee..a1dee81e 100644
--- a/src/testing/testing_api_cmd_bank_history_debit.c
+++ b/src/testing/testing_api_cmd_bank_history_debit.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018-2020 Taler Systems SA
+  Copyright (C) 2018-2021 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
@@ -115,32 +115,6 @@ struct HistoryState
 };
 
 
-/**
- * Offer internal data to other commands.
- *
- * @param cls closure.
- * @param[out] ret set to the wanted data.
- * @param trait name of the trait.
- * @param index index number of the traits to be returned.
- *
- * @return #GNUNET_OK on success
- */
-static int
-history_traits (void *cls,
-                const void **ret,
-                const char *trait,
-                unsigned int index)
-{
-  (void) cls;
-  (void) ret;
-  (void) trait;
-  (void) index;
-  /* Must define this function because some callbacks
-   * look for certain traits on _all_ the commands. */
-  return GNUNET_SYSERR;
-}
-
-
 /**
  * Log which history we expected.  Called when an error occurs.
  *
@@ -207,13 +181,13 @@ build_history (struct TALER_TESTING_Interpreter *is,
       ("`%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);
+    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));
+                   TALER_TESTING_get_trait_row (add_incoming_cmd,
+                                                &row_id_start));
   }
 
   GNUNET_assert (0 != hs->num_results);
@@ -255,11 +229,11 @@ build_history (struct TALER_TESTING_Interpreter *is,
   {
     const struct TALER_TESTING_Command *cmd = &is->commands[off];
     const uint64_t *row_id;
-    const char *debit_account;
-    const char *credit_account;
+    const char **debit_account;
+    const char **credit_account;
     const struct TALER_Amount *amount;
     const struct TALER_WireTransferIdentifierRawP *wtid;
-    const char *exchange_base_url;
+    const char **exchange_base_url;
 
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Checking if command %s is relevant for debit history\n",
@@ -268,25 +242,20 @@ build_history (struct TALER_TESTING_Interpreter *is,
           TALER_TESTING_get_trait_bank_row (cmd,
                                             &row_id)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (cmd,
-                                         TALER_TESTING_PT_DEBIT,
-                                         &debit_account)) ||
+          TALER_TESTING_get_trait_debit_payto_uri (cmd,
+                                                   &debit_account)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_payto (cmd,
-                                         TALER_TESTING_PT_CREDIT,
-                                         &credit_account)) ||
+          TALER_TESTING_get_trait_credit_payto_uri (cmd,
+                                                    &credit_account)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_amount_obj (cmd,
-                                              0,
-                                              &amount)) ||
+          TALER_TESTING_get_trait_amount (cmd,
+                                          &amount)) ||
          (GNUNET_OK !=
           TALER_TESTING_get_trait_wtid (cmd,
-                                        0,
                                         &wtid)) ||
          (GNUNET_OK !=
-          TALER_TESTING_get_trait_url (cmd,
-                                       TALER_TESTING_UT_EXCHANGE_BASE_URL,
-                                       &exchange_base_url)) )
+          TALER_TESTING_get_trait_exchange_url (cmd,
+                                                &exchange_base_url)) )
       continue; /* not an event we care about */
     /* Seek "/history/outgoing" starting row.  */
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -310,22 +279,22 @@ build_history (struct TALER_TESTING_Interpreter *is,
       break;
     }
     TALER_LOG_INFO ("Found history: %s->%s for account %s\n",
-                    debit_account,
-                    credit_account,
+                    *debit_account,
+                    *credit_account,
                     hs->account_url);
     /* found matching record, make sure we have room */
     if (pos == total)
       GNUNET_array_grow (h,
                          total,
                          pos * 2);
-    h[pos].c_url = GNUNET_strdup (credit_account);
-    h[pos].d_url = GNUNET_strdup (debit_account);
+    h[pos].c_url = GNUNET_strdup (*credit_account);
+    h[pos].d_url = GNUNET_strdup (*debit_account);
     h[pos].details.credit_account_uri = h[pos].c_url;
     h[pos].details.debit_account_uri = h[pos].d_url;
     h[pos].details.amount = *amount;
     h[pos].row_id = *row_id;
     h[pos].details.wtid = *wtid;
-    h[pos].details.exchange_base_url = exchange_base_url;
+    h[pos].details.exchange_base_url = *exchange_base_url;
     pos++;
   }
   GNUNET_assert (GNUNET_YES == ok);
@@ -350,7 +319,7 @@ build_history (struct TALER_TESTING_Interpreter *is,
  * @param details the expected transaction details.
  * @return #GNUNET_OK if the transaction is what we expect.
  */
-static int
+static enum GNUNET_GenericReturnValue
 check_result (struct History *h,
               uint64_t total,
               unsigned int off,
@@ -407,7 +376,7 @@ check_result (struct History *h,
  *        reply was not in JSON.
  * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
  */
-static int
+static enum GNUNET_GenericReturnValue
 history_cb (void *cls,
             unsigned int http_status,
             enum TALER_ErrorCode ec,
@@ -508,9 +477,8 @@ history_run (void *cls,
     if (NULL == history_cmd)
       TALER_TESTING_FAIL (is);
     if (GNUNET_OK !=
-        TALER_TESTING_get_trait_uint64 (history_cmd,
-                                        0,
-                                        &row_ptr))
+        TALER_TESTING_get_trait_row (history_cmd,
+                                     &row_ptr))
       TALER_TESTING_FAIL (is);
     else
       row_id = *row_ptr;
@@ -558,17 +526,6 @@ history_cleanup (void *cls,
 }
 
 
-/**
- * Make a "history" CMD.
- *
- * @param label command label.
- * @param auth login data to use
- * @param start_row_reference reference to a command that can
- *        offer a row identifier, to be used as the starting row
- *        to accept in the result.
- * @param num_results how many rows we want in the result.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_bank_debits (const char *label,
                                const struct TALER_BANK_AuthenticationData 
*auth,
@@ -588,8 +545,7 @@ TALER_TESTING_cmd_bank_debits (const char *label,
       .label = label,
       .cls = hs,
       .run = &history_run,
-      .cleanup = &history_cleanup,
-      .traits = &history_traits
+      .cleanup = &history_cleanup
     };
 
     return cmd;
diff --git a/src/testing/testing_api_cmd_bank_transfer.c 
b/src/testing/testing_api_cmd_bank_transfer.c
index 565d6e46..0755a71d 100644
--- a/src/testing/testing_api_cmd_bank_transfer.c
+++ b/src/testing/testing_api_cmd_bank_transfer.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018-2020 Taler Systems SA
+  Copyright (C) 2018-2021 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
@@ -310,7 +310,7 @@ transfer_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 transfer_traits (void *cls,
                  const void **ret,
                  const char *trait,
@@ -318,17 +318,16 @@ transfer_traits (void *cls,
 {
   struct TransferState *fts = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BASE_URL,
-                                  fts->exchange_base_url),
+    TALER_TESTING_make_trait_exchange_url (
+      (const char **) &fts->exchange_base_url),
     TALER_TESTING_make_trait_bank_row (&fts->serial_id),
-    TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT,
-                                    fts->payto_credit_account),
-    TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT,
-                                    fts->payto_debit_account),
-    TALER_TESTING_make_trait_amount_obj (0, &fts->amount),
+    TALER_TESTING_make_trait_credit_payto_uri (
+      (const char **) &fts->payto_credit_account),
+    TALER_TESTING_make_trait_debit_payto_uri (
+      (const char **) &fts->payto_debit_account),
+    TALER_TESTING_make_trait_amount (&fts->amount),
     TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
-    TALER_TESTING_make_trait_wtid (0,
-                                   &fts->wtid),
+    TALER_TESTING_make_trait_wtid (&fts->wtid),
     TALER_TESTING_trait_end ()
   };
 
@@ -339,18 +338,6 @@ transfer_traits (void *cls,
 }
 
 
-/**
- * Create transfer command.
- *
- * @param label command label.
- * @param amount amount to transfer.
- * @param auth authentication data to use
- * @param payto_debit_account which account sends money.
- * @param payto_credit_account which account receives money.
- * @param wtid wire transfer identifier to use
- * @param exchange_base_url exchange URL to use
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_transfer (const char *label,
                             const char *amount,
@@ -394,13 +381,6 @@ TALER_TESTING_cmd_transfer (const char *label,
 }
 
 
-/**
- * Modify a transfer command to enable retries when the reserve is not yet
- * full or we get other transient errors from the bank.
- *
- * @param cmd a fakebank transfer command
- * @return the command with retries enabled
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_transfer_retry (struct TALER_TESTING_Command cmd)
 {
diff --git a/src/testing/testing_api_cmd_batch.c 
b/src/testing/testing_api_cmd_batch.c
index ca23d7fd..e8f76ca3 100644
--- a/src/testing/testing_api_cmd_batch.c
+++ b/src/testing/testing_api_cmd_batch.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2018 Taler Systems SA
+  Copyright (C) 2014-2021 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
@@ -113,22 +113,15 @@ batch_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 batch_traits (void *cls,
               const void **ret,
               const char *trait,
               unsigned int index)
 {
-#define CURRENT_CMD_INDEX 0
-#define BATCH_INDEX 1
-
   struct BatchState *bs = cls;
-
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_cmd
-      (CURRENT_CMD_INDEX, &bs->batch[bs->batch_ip]),
-    TALER_TESTING_make_trait_cmd
-      (BATCH_INDEX, bs->batch),
+    TALER_TESTING_make_trait_batch_cmds (&bs->batch),
     TALER_TESTING_trait_end ()
   };
 
@@ -140,18 +133,6 @@ batch_traits (void *cls,
 }
 
 
-/**
- * Create a "batch" command.  Such command takes a
- * end_CMD-terminated array of CMDs and executed them.
- * Once it hits the end CMD, it passes the control
- * to the next top-level CMD, regardless of it being
- * another batch or ordinary CMD.
- *
- * @param label the command label.
- * @param batch array of CMDs to execute.
- *
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_batch (const char *label,
                          struct TALER_TESTING_Command *batch)
@@ -185,11 +166,6 @@ TALER_TESTING_cmd_batch (const char *label,
 }
 
 
-/**
- * Advance internal pointer to next command.
- *
- * @param is interpreter state.
- */
 void
 TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is)
 {
@@ -206,23 +182,13 @@ TALER_TESTING_cmd_batch_next (struct 
TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Test if this command is a batch command.
- *
- * @return false if not, true if it is a batch command
- */
-int
+bool
 TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd)
 {
   return cmd->run == &batch_run;
 }
 
 
-/**
- * Obtain what command the batch is at.
- *
- * @return cmd current batch command
- */
 struct TALER_TESTING_Command *
 TALER_TESTING_cmd_batch_get_current (const struct TALER_TESTING_Command *cmd)
 {
@@ -233,12 +199,6 @@ TALER_TESTING_cmd_batch_get_current (const struct 
TALER_TESTING_Command *cmd)
 }
 
 
-/**
- * Set what command the batch should be at.
- *
- * @param cmd current batch command
- * @param new_ip where to move the IP
- */
 void
 TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd,
                                      unsigned int new_ip)
diff --git a/src/testing/testing_api_cmd_deposit.c 
b/src/testing/testing_api_cmd_deposit.c
index 58322b1d..7e944b6e 100644
--- a/src/testing/testing_api_cmd_deposit.c
+++ b/src/testing/testing_api_cmd_deposit.c
@@ -287,7 +287,7 @@ deposit_run (void *cls,
   struct TALER_CoinSpendSignatureP coin_sig;
   struct GNUNET_TIME_Absolute wire_deadline;
   struct TALER_MerchantPublicKeyP merchant_pub;
-  struct GNUNET_HashCode h_contract_terms;
+  struct TALER_PrivateContractHash h_contract_terms;
   enum TALER_ErrorCode ec;
 
   (void) cmd;
@@ -333,7 +333,6 @@ deposit_run (void *cls,
     }
     if ( (GNUNET_OK !=
           TALER_TESTING_get_trait_merchant_priv (cmd,
-                                                 0,
                                                  &merchant_priv)) )
     {
       GNUNET_break (0);
@@ -393,7 +392,7 @@ deposit_run (void *cls,
                                       &merchant_pub.eddsa_pub);
   (void) GNUNET_TIME_round_abs (&wire_deadline);
   {
-    struct GNUNET_HashCode h_wire;
+    struct TALER_MerchantWireHash h_wire;
 
     GNUNET_assert (GNUNET_OK ==
                    TALER_JSON_merchant_wire_signature_hash (ds->wire_details,
@@ -402,6 +401,7 @@ deposit_run (void *cls,
                                             &denom_pub->fee_deposit,
                                             &h_wire,
                                             &h_contract_terms,
+                                            NULL, /* FIXME: extension hash! */
                                             &denom_pub->h_key,
                                             coin_priv,
                                             ds->wallet_timestamp,
@@ -414,6 +414,7 @@ deposit_run (void *cls,
                                    wire_deadline,
                                    ds->wire_details,
                                    &h_contract_terms,
+                                   NULL, /* FIXME: extension object */
                                    &coin_pub,
                                    denom_pub_sig,
                                    &denom_pub->key,
@@ -476,10 +477,9 @@ deposit_cleanup (void *cls,
  * @param[out] ret result.
  * @param trait name of the trait.
  * @param index index number of the object to offer.
- *
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 deposit_traits (void *cls,
                 const void **ret,
                 const char *trait,
@@ -519,25 +519,16 @@ deposit_traits (void *cls,
     struct TALER_TESTING_Trait traits[] = {
       /* First two traits are only available if
          ds->traits is #GNUNET_YES */
-      TALER_TESTING_make_trait_exchange_pub (0,
-                                             &ds->exchange_pub),
-      TALER_TESTING_make_trait_exchange_sig (0,
-                                             &ds->exchange_sig),
+      TALER_TESTING_make_trait_exchange_pub (0, &ds->exchange_pub),
+      TALER_TESTING_make_trait_exchange_sig (0, &ds->exchange_sig),
       /* These traits are always available */
       TALER_TESTING_make_trait_coin_priv (0,
                                           coin_spent_priv),
-      TALER_TESTING_make_trait_wire_details (0,
-                                             ds->wire_details),
-      TALER_TESTING_make_trait_contract_terms (0,
-                                               ds->contract_terms),
-      TALER_TESTING_make_trait_merchant_priv (0,
-                                              &ds->merchant_priv),
-      TALER_TESTING_make_trait_amount_obj (
-        TALER_TESTING_CMD_DEPOSIT_TRAIT_IDX_DEPOSIT_VALUE,
-        &ds->amount),
-      TALER_TESTING_make_trait_amount_obj (
-        TALER_TESTING_CMD_DEPOSIT_TRAIT_IDX_DEPOSIT_FEE,
-        &ds->deposit_fee),
+      TALER_TESTING_make_trait_wire_details (ds->wire_details),
+      TALER_TESTING_make_trait_contract_terms (ds->contract_terms),
+      TALER_TESTING_make_trait_merchant_priv (&ds->merchant_priv),
+      TALER_TESTING_make_trait_deposit_amount (&ds->amount),
+      TALER_TESTING_make_trait_deposit_fee_amount (&ds->deposit_fee),
       TALER_TESTING_make_trait_absolute_time (0,
                                               &ds->exchange_timestamp),
       TALER_TESTING_trait_end ()
diff --git a/src/testing/testing_api_cmd_deposits_get.c 
b/src/testing/testing_api_cmd_deposits_get.c
index 61358291..389d4660 100644
--- a/src/testing/testing_api_cmd_deposits_get.c
+++ b/src/testing/testing_api_cmd_deposits_get.c
@@ -128,7 +128,6 @@ deposit_wtid_cb (void *cls,
 
       if (GNUNET_OK !=
           TALER_TESTING_get_trait_wtid (bank_transfer_cmd,
-                                        0,
                                         &wtid_want))
       {
         GNUNET_break (0);
@@ -178,8 +177,8 @@ track_transaction_run (void *cls,
   struct TALER_CoinSpendPublicKeyP coin_pub;
   const json_t *contract_terms;
   const json_t *wire_details;
-  struct GNUNET_HashCode h_wire_details;
-  struct GNUNET_HashCode h_contract_terms;
+  struct TALER_MerchantWireHash h_wire_details;
+  struct TALER_PrivateContractHash h_contract_terms;
   const struct TALER_MerchantPrivateKeyP *merchant_priv;
 
   (void) cmd;
@@ -210,7 +209,6 @@ track_transaction_run (void *cls,
   /* Get the strings.. */
   if (GNUNET_OK !=
       TALER_TESTING_get_trait_wire_details (transaction_cmd,
-                                            0,
                                             &wire_details))
   {
     GNUNET_break (0);
@@ -220,7 +218,6 @@ track_transaction_run (void *cls,
 
   if (GNUNET_OK !=
       TALER_TESTING_get_trait_contract_terms (transaction_cmd,
-                                              0,
                                               &contract_terms))
   {
     GNUNET_break (0);
@@ -247,7 +244,6 @@ track_transaction_run (void *cls,
 
   if (GNUNET_OK !=
       TALER_TESTING_get_trait_merchant_priv (transaction_cmd,
-                                             0,
                                              &merchant_priv))
   {
     GNUNET_break (0);
@@ -301,7 +297,7 @@ track_transaction_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 track_transaction_traits (void *cls,
                           const void **ret,
                           const char *trait,
@@ -309,7 +305,7 @@ track_transaction_traits (void *cls,
 {
   struct TrackTransactionState *tts = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_wtid (0, &tts->wtid),
+    TALER_TESTING_make_trait_wtid (&tts->wtid),
     TALER_TESTING_trait_end ()
   };
 
diff --git a/src/testing/testing_api_cmd_exec_aggregator.c 
b/src/testing/testing_api_cmd_exec_aggregator.c
index 6ec56c17..38875db9 100644
--- a/src/testing/testing_api_cmd_exec_aggregator.c
+++ b/src/testing/testing_api_cmd_exec_aggregator.c
@@ -115,7 +115,7 @@ aggregator_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success
  */
-static int
+static enum GNUNET_GenericReturnValue
 aggregator_traits (void *cls,
                    const void **ret,
                    const char *trait,
@@ -123,7 +123,7 @@ aggregator_traits (void *cls,
 {
   struct AggregatorState *as = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0, &as->aggregator_proc),
+    TALER_TESTING_make_trait_process (&as->aggregator_proc),
     TALER_TESTING_trait_end ()
   };
 
@@ -134,14 +134,6 @@ aggregator_traits (void *cls,
 }
 
 
-/**
- * Make a "aggregator" CMD.
- *
- * @param label command label.
- * @param config_filename configuration file for the
- *                        aggregator to use.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_aggregator (const char *label,
                                    const char *config_filename)
diff --git a/src/testing/testing_api_cmd_exec_closer.c 
b/src/testing/testing_api_cmd_exec_closer.c
index c1153bab..442fb4ce 100644
--- a/src/testing/testing_api_cmd_exec_closer.c
+++ b/src/testing/testing_api_cmd_exec_closer.c
@@ -65,7 +65,7 @@ struct CloserState
   /**
    * Do we expect the command to actually close a reserve?
    */
-  int expect_close;
+  bool expect_close;
 };
 
 
@@ -93,7 +93,6 @@ closer_run (void *cls,
                                                      as->reserve_ref);
     if (GNUNET_OK !=
         TALER_TESTING_get_trait_reserve_pub (rcmd,
-                                             0,
                                              &reserve_pubp))
     {
       GNUNET_break (0);
@@ -156,7 +155,7 @@ closer_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success
  */
-static int
+static enum GNUNET_GenericReturnValue
 closer_traits (void *cls,
                const void **ret,
                const char *trait,
@@ -164,15 +163,13 @@ closer_traits (void *cls,
 {
   struct CloserState *as = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0, &as->closer_proc),
+    TALER_TESTING_make_trait_process (&as->closer_proc),
     TALER_TESTING_trait_end ()
   };
   struct TALER_TESTING_Trait xtraits[] = {
-    TALER_TESTING_make_trait_process (0, &as->closer_proc),
-    TALER_TESTING_make_trait_reserve_pub (0,
-                                          &as->reserve_pub),
-    TALER_TESTING_make_trait_reserve_history (0,
-                                              &as->reserve_history),
+    TALER_TESTING_make_trait_process (&as->closer_proc),
+    TALER_TESTING_make_trait_reserve_pub (&as->reserve_pub),
+    TALER_TESTING_make_trait_reserve_history (&as->reserve_history),
     TALER_TESTING_trait_end ()
   };
 
@@ -185,22 +182,6 @@ closer_traits (void *cls,
 }
 
 
-/**
- * Make a "closer" CMD.  Note that it is right now not supported to run the
- * closer to close multiple reserves in combination with a subsequent reserve
- * status call, as we cannot generate the traits necessary for multiple closed
- * reserves.  You can work around this by using multiple closer commands, one
- * per reserve that is being closed.
- *
- * @param label command label.
- * @param config_filename configuration file for the
- *                        closer to use.
- * @param expected_amount amount we expect to see wired from a @a 
expected_reserve_ref
- * @param expected_fee closing fee we expect to see
- * @param expected_reserve_ref reference to a reserve we expect the closer to 
drain;
- *          NULL if we do not expect the closer to do anything
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_closer (const char *label,
                                const char *config_filename,
@@ -214,7 +195,7 @@ TALER_TESTING_cmd_exec_closer (const char *label,
   as->config_filename = config_filename;
   if (NULL != expected_reserve_ref)
   {
-    as->expect_close = GNUNET_YES;
+    as->expect_close = true;
     as->reserve_ref = expected_reserve_ref;
     if (GNUNET_OK !=
         TALER_string_to_amount (expected_amount,
diff --git a/src/testing/testing_api_cmd_exec_transfer.c 
b/src/testing/testing_api_cmd_exec_transfer.c
index 796f32d0..beceec57 100644
--- a/src/testing/testing_api_cmd_exec_transfer.c
+++ b/src/testing/testing_api_cmd_exec_transfer.c
@@ -116,7 +116,7 @@ transfer_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success
  */
-static int
+static enum GNUNET_GenericReturnValue
 transfer_traits (void *cls,
                  const void **ret,
                  const char *trait,
@@ -124,7 +124,7 @@ transfer_traits (void *cls,
 {
   struct TransferState *as = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0, &as->transfer_proc),
+    TALER_TESTING_make_trait_process (&as->transfer_proc),
     TALER_TESTING_trait_end ()
   };
 
@@ -135,14 +135,6 @@ transfer_traits (void *cls,
 }
 
 
-/**
- * Make a "transfer" CMD.
- *
- * @param label command label.
- * @param config_filename configuration file for the
- *                        transfer to use.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_transfer (const char *label,
                                  const char *config_filename)
diff --git a/src/testing/testing_api_cmd_exec_wirewatch.c 
b/src/testing/testing_api_cmd_exec_wirewatch.c
index 2c50b4f4..e4188ac8 100644
--- a/src/testing/testing_api_cmd_exec_wirewatch.c
+++ b/src/testing/testing_api_cmd_exec_wirewatch.c
@@ -46,6 +46,7 @@ struct WirewatchState
   const char *config_filename;
 };
 
+
 /**
  * Run the command; use the `taler-exchange-wirewatch' program.
  *
@@ -115,7 +116,7 @@ wirewatch_cleanup (void *cls,
  * @param index index number of the object to offer.
  * @return #GNUNET_OK on success.
  */
-static int
+static enum GNUNET_GenericReturnValue
 wirewatch_traits (void *cls,
                   const void **ret,
                   const char *trait,
@@ -123,8 +124,7 @@ wirewatch_traits (void *cls,
 {
   struct WirewatchState *ws = cls;
   struct TALER_TESTING_Trait traits[] = {
-    TALER_TESTING_make_trait_process (0,
-                                      &ws->wirewatch_proc),
+    TALER_TESTING_make_trait_process (&ws->wirewatch_proc),
     TALER_TESTING_trait_end ()
   };
 
@@ -135,13 +135,6 @@ wirewatch_traits (void *cls,
 }
 
 
-/**
- * Make a "wirewatch" CMD.
- *
- * @param label command label.
- * @param config_filename configuration filename.
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_exec_wirewatch (const char *label,
                                   const char *config_filename)
diff --git a/src/testing/testing_api_cmd_rewind.c 
b/src/testing/testing_api_cmd_rewind.c
index 979607cd..9e19773c 100644
--- a/src/testing/testing_api_cmd_rewind.c
+++ b/src/testing/testing_api_cmd_rewind.c
@@ -68,13 +68,12 @@ rewind_ip_cleanup (void *cls,
  * @return #GNUNET_OK on success, #GNUNET_NO if target was not found,
  *         #GNUNET_SYSERR if target is in the future and we failed
  */
-static int
+static enum GNUNET_GenericReturnValue
 seek_batch (struct TALER_TESTING_Interpreter *is,
             const struct TALER_TESTING_Command *cmd,
             const struct TALER_TESTING_Command *target)
 {
   unsigned int new_ip;
-#define BATCH_INDEX 1
   struct TALER_TESTING_Command *batch;
   struct TALER_TESTING_Command *current;
   struct TALER_TESTING_Command *icmd;
@@ -82,9 +81,8 @@ seek_batch (struct TALER_TESTING_Interpreter *is,
 
   current = TALER_TESTING_cmd_batch_get_current (cmd);
   GNUNET_assert (GNUNET_OK ==
-                 TALER_TESTING_get_trait_cmd (cmd,
-                                              BATCH_INDEX,
-                                              &batch));
+                 TALER_TESTING_get_trait_batch_cmds (cmd,
+                                                     &batch));
   match = NULL;
   for (new_ip = 0;
        NULL != (icmd = &batch[new_ip]);
@@ -189,15 +187,6 @@ rewind_ip_run (void *cls,
 }
 
 
-/**
- * Make the instruction pointer point to @a new_ip
- * only if @a counter is greater than zero.
- *
- * @param label command label
- * @param target_label label of the new instruction pointer's destination 
after the jump;
- *                     must be before the current instruction
- * @param counter counts how many times the rewinding is to happen.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_rewind_ip (const char *label,
                              const char *target_label,
diff --git a/src/testing/testing_api_cmd_stat.c 
b/src/testing/testing_api_cmd_stat.c
index 9461a22c..d74e9bb2 100644
--- a/src/testing/testing_api_cmd_stat.c
+++ b/src/testing/testing_api_cmd_stat.c
@@ -27,46 +27,6 @@
 #include "taler_testing_lib.h"
 
 
-/**
- * Cleanup the state from a "stat service" CMD.
- *
- * @param cls closure.
- * @param cmd the command which is being cleaned up.
- */
-static void
-stat_cleanup (void *cls,
-              const struct TALER_TESTING_Command *cmd)
-{
-  (void) cls;
-  (void) cmd;
-  /* nothing to clean.  */
-}
-
-
-/**
- * No traits to offer, just provide a stub to be called when
- * some CMDs iterates through the list of all the commands.
- *
- * @param cls closure.
- * @param[out] ret result.
- * @param trait name of the trait.
- * @param index index number of the trait to return.
- * @return #GNUNET_OK on success.
- */
-static int
-stat_traits (void *cls,
-             const void **ret,
-             const char *trait,
-             unsigned int index)
-{
-  (void) cls;
-  (void) ret;
-  (void) trait;
-  (void) index;
-  return GNUNET_NO;
-}
-
-
 /**
  * Add the time @a cmd took to the respective duration in @a timings.
  *
@@ -123,19 +83,19 @@ do_stat (struct TALER_TESTING_Timer *timings,
 {
   if (TALER_TESTING_cmd_is_batch (cmd))
   {
-#define BATCH_INDEX 1
     struct TALER_TESTING_Command *bcmd;
 
     if (GNUNET_OK !=
-        TALER_TESTING_get_trait_cmd (cmd,
-                                     BATCH_INDEX,
-                                     &bcmd))
+        TALER_TESTING_get_trait_batch_cmds (cmd,
+                                            &bcmd))
     {
       GNUNET_break (0);
       return;
     }
 
-    for (unsigned int j = 0; NULL != bcmd[j].label; j++)
+    for (unsigned int j = 0;
+         NULL != bcmd[j].label;
+         j++)
       do_stat (timings,
                &bcmd[j]);
   }
@@ -172,20 +132,12 @@ stat_run (void *cls,
 }
 
 
-/**
- * Obtain performance data from the interpreter.
- *
- * @param timers what commands (by label) to obtain runtimes for
- * @return the command
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_stat (struct TALER_TESTING_Timer *timers)
 {
   struct TALER_TESTING_Command cmd = {
     .label = "stat",
     .run = stat_run,
-    .cleanup = stat_cleanup,
-    .traits = stat_traits,
     .cls = (void *) timers
   };
 
diff --git a/src/testing/testing_api_cmd_status.c 
b/src/testing/testing_api_cmd_status.c
index 6acfcc75..1dba675b 100644
--- a/src/testing/testing_api_cmd_status.c
+++ b/src/testing/testing_api_cmd_status.c
@@ -146,7 +146,7 @@ history_entry_cmp (const struct 
TALER_EXCHANGE_ReserveHistory *h1,
  * @param[in,out] found array to update
  * @return #GNUNET_OK if @a cmd action on reserve was found in @a history
  */
-static int
+static enum GNUNET_GenericReturnValue
 analyze_command (const struct TALER_ReservePublicKeyP *reserve_pub,
                  const struct TALER_TESTING_Command *cmd,
                  unsigned int history_length,
@@ -155,15 +155,13 @@ analyze_command (const struct TALER_ReservePublicKeyP 
*reserve_pub,
 {
   if (TALER_TESTING_cmd_is_batch (cmd))
   {
-#define BATCH_INDEX 1
     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_cmd (cmd,
-                                     BATCH_INDEX,
-                                     &bcmd))
+        TALER_TESTING_get_trait_batch_cmds (cmd,
+                                            &bcmd))
     {
       GNUNET_break (0);
       return GNUNET_SYSERR;
@@ -388,16 +386,6 @@ status_cleanup (void *cls,
 }
 
 
-/**
- * Create a "reserve status" command.
- *
- * @param label the command label.
- * @param reserve_reference reference to the reserve to check.
- * @param expected_balance expected balance for the reserve.
- * @param expected_response_code expected HTTP response code.
- *
- * @return the command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_status (const char *label,
                           const char *reserve_reference,
diff --git a/src/testing/testing_api_loop.c b/src/testing/testing_api_loop.c
index 9e989ca3..ba155589 100644
--- a/src/testing/testing_api_loop.c
+++ b/src/testing/testing_api_loop.c
@@ -66,7 +66,6 @@ TALER_TESTING_interpreter_lookup_command (struct 
TALER_TESTING_Interpreter *is,
 
     if (TALER_TESTING_cmd_is_batch (cmd))
     {
-#define BATCH_INDEX 1
       struct TALER_TESTING_Command *batch;
       struct TALER_TESTING_Command *current;
       struct TALER_TESTING_Command *icmd;
@@ -74,9 +73,8 @@ TALER_TESTING_interpreter_lookup_command (struct 
TALER_TESTING_Interpreter *is,
 
       current = TALER_TESTING_cmd_batch_get_current (cmd);
       GNUNET_assert (GNUNET_OK ==
-                     TALER_TESTING_get_trait_cmd (cmd,
-                                                  BATCH_INDEX,
-                                                  &batch));
+                     TALER_TESTING_get_trait_batch_cmds (cmd,
+                                                         &batch));
       /* We must do the loop forward, but we can find the last match */
       match = NULL;
       for (unsigned int j = 0;
@@ -120,15 +118,6 @@ TALER_TESTING_interpreter_get_fakebank (struct 
TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Run tests starting the "fakebank" first.  The "fakebank"
- * is a C minimalist version of the human-oriented Python bank,
- * which is also part of the Taler project.
- *
- * @param is pointer to the interpreter state
- * @param commands the list of commands to execute
- * @param bank_url the url the fakebank is supposed to run on
- */
 void
 TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
                                  struct TALER_TESTING_Command *commands,
@@ -166,9 +155,6 @@ static void
 interpreter_run (void *cls);
 
 
-/**
- * Current command is done, run the next one.
- */
 void
 TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is)
 {
@@ -203,11 +189,6 @@ TALER_TESTING_interpreter_next (struct 
TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Current command failed, clean up and fail the test case.
- *
- * @param is interpreter of the test
- */
 void
 TALER_TESTING_interpreter_fail (struct TALER_TESTING_Interpreter *is)
 {
@@ -228,11 +209,6 @@ TALER_TESTING_interpreter_fail (struct 
TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Create command array terminator.
- *
- * @return a end-command.
- */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_end (void)
 {
@@ -243,9 +219,6 @@ TALER_TESTING_cmd_end (void)
 }
 
 
-/**
- * Obtain current label.
- */
 const char *
 TALER_TESTING_interpreter_get_current_label (struct
                                              TALER_TESTING_Interpreter *is)
@@ -393,17 +366,8 @@ maint_child_death (void *cls)
   enum GNUNET_OS_ProcessStatusType type;
   unsigned long code;
 
-  if (TALER_TESTING_cmd_is_batch (cmd))
-  {
-    struct TALER_TESTING_Command *batch_cmd;
-
-    GNUNET_assert (GNUNET_OK ==
-                   TALER_TESTING_get_trait_cmd (cmd,
-                                                0,
-                                                &batch_cmd));
-    cmd = batch_cmd;
-  }
-
+  while (TALER_TESTING_cmd_is_batch (cmd))
+    cmd = TALER_TESTING_cmd_batch_get_current (cmd);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Got SIGCHLD for `%s'.\n",
               cmd->label);
@@ -469,12 +433,6 @@ maint_child_death (void *cls)
 }
 
 
-/**
- * Wait until we receive SIGCHLD signal.
- * Then obtain the process trait of the current
- * command, wait on the the zombie and continue
- * with the next command.
- */
 void
 TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is)
 {
@@ -491,16 +449,6 @@ TALER_TESTING_wait_for_sigchld (struct 
TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Run the testsuite.  Note, CMDs are copied into
- * the interpreter state because they are _usually_
- * defined into the "run" method that returns after
- * having scheduled the test interpreter.
- *
- * @param is the interpreter state
- * @param commands the list of command to execute
- * @param timeout how long to wait
- */
 void
 TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
                     struct TALER_TESTING_Command *commands,
@@ -530,15 +478,6 @@ TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
 }
 
 
-/**
- * Run the testsuite.  Note, CMDs are copied into
- * the interpreter state because they are _usually_
- * defined into the "run" method that returns after
- * having scheduled the test interpreter.
- *
- * @param is the interpreter state
- * @param commands the list of command to execute
- */
 void
 TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
                    struct TALER_TESTING_Command *commands)
@@ -597,16 +536,6 @@ sighandler_child_death (void)
 }
 
 
-/**
- * "Canonical" cert_cb used when we are connecting to the
- * Exchange.
- *
- * @param cls closure, typically, the "run" method containing
- *        all the commands to be run, and a closure for it.
- * @param hr HTTP response details
- * @param keys the exchange's keys.
- * @param compat protocol compatibility information.
- */
 void
 TALER_TESTING_cert_cb (void *cls,
                        const struct TALER_EXCHANGE_HttpResponse *hr,
@@ -875,25 +804,6 @@ load_urls (struct TALER_TESTING_Interpreter *is)
 }
 
 
-/**
- * Install signal handlers plus schedules the main wrapper
- * around the "run" method.
- *
- * @param main_cb the "run" method which contains all the
- *        commands.
- * @param main_cb_cls a closure for "run", typically NULL.
- * @param cfg configuration to use
- * @param exchanged exchange process handle: will be put in the
- *        state as some commands - e.g. revoke - need to send
- *        signal to it, for example to let it know to reload the
- *        key state.. if NULL, the interpreter will run without
- *        trying to connect to the exchange first.
- * @param exchange_connect #GNUNET_YES if the test should connect
- *        to the exchange, #GNUNET_NO otherwise
- * @return #GNUNET_OK if all is okay, != #GNUNET_OK otherwise.
- *         non-GNUNET_OK codes are #GNUNET_SYSERR most of the
- *         times.
- */
 int
 TALER_TESTING_setup (TALER_TESTING_Main main_cb,
                      void *main_cb_cls,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]