work on testing ftbfs

This commit is contained in:
Christian Grothoff 2021-10-27 18:37:42 +02:00
parent 3f630eafc4
commit b449c7353e
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
24 changed files with 223 additions and 702 deletions

View File

@ -383,7 +383,7 @@ TALER_JSON_spec_i18n_str (const char *name,
*/ */
enum GNUNET_GenericReturnValue enum GNUNET_GenericReturnValue
TALER_JSON_contract_hash (const json_t *json, TALER_JSON_contract_hash (const json_t *json,
struct GNUNET_HashCode *hc); struct TALER_PrivateContractHash *hc);
/** /**

View File

@ -1871,7 +1871,7 @@ TALER_TESTING_cmd_batch (const char *label,
* *
* @return false if not, true if it 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); 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 \ enum GNUNET_GenericReturnValue \
TALER_TESTING_get_trait_ ## name ( \ TALER_TESTING_get_trait_ ## name ( \
const struct TALER_TESTING_Command *cmd, \ const struct TALER_TESTING_Command *cmd, \
const type **ret); \ type **ret); \
struct TALER_TESTING_Trait \ struct TALER_TESTING_Trait \
TALER_TESTING_make_trait_ ## name ( \ 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 \ enum GNUNET_GenericReturnValue \
TALER_TESTING_get_trait_ ## name ( \ TALER_TESTING_get_trait_ ## name ( \
const struct TALER_TESTING_Command *cmd, \ const struct TALER_TESTING_Command *cmd, \
const type **ret) \ type **ret) \
{ \ { \
if (NULL == cmd->traits) return GNUNET_SYSERR; \
return cmd->traits (cmd->cls, \ return cmd->traits (cmd->cls, \
(const void **) ret, \ (const void **) ret, \
TALER_S (name), \ TALER_S (name), \
@ -2301,11 +2302,11 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits,
TALER_TESTING_get_trait_ ## name ( \ TALER_TESTING_get_trait_ ## name ( \
const struct TALER_TESTING_Command *cmd, \ const struct TALER_TESTING_Command *cmd, \
unsigned int index, \ unsigned int index, \
const type **ret); \ type **ret); \
struct TALER_TESTING_Trait \ struct TALER_TESTING_Trait \
TALER_TESTING_make_trait_ ## name ( \ TALER_TESTING_make_trait_ ## name ( \
unsigned int index, \ 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 ( \ TALER_TESTING_get_trait_ ## name ( \
const struct TALER_TESTING_Command *cmd, \ const struct TALER_TESTING_Command *cmd, \
unsigned int index, \ unsigned int index, \
const type **ret) \ type **ret) \
{ \ { \
if (NULL == cmd->traits) return GNUNET_SYSERR; \
return cmd->traits (cmd->cls, \ return cmd->traits (cmd->cls, \
(const void **) ret, \ (const void **) ret, \
TALER_S (name), \ TALER_S (name), \
@ -2327,7 +2329,7 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits,
struct TALER_TESTING_Trait \ struct TALER_TESTING_Trait \
TALER_TESTING_make_trait_ ## name ( \ TALER_TESTING_make_trait_ ## name ( \
unsigned int index, \ unsigned int index, \
const type * value) \ type * value) \
{ \ { \
struct TALER_TESTING_Trait ret = { \ struct TALER_TESTING_Trait ret = { \
.index = index, \ .index = index, \
@ -2342,45 +2344,47 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits,
* Call #op on all simple traits. * Call #op on all simple traits.
*/ */
#define TALER_TESTING_SIMPLE_TRAITS(op) \ #define TALER_TESTING_SIMPLE_TRAITS(op) \
op (exchange_pub, struct TALER_ExchangePublicKeyP) \ op (bank_row, const uint64_t) \
op (bank_row, uint64_t) \ op (reserve_priv, const struct TALER_ReservePrivateKeyP) \
op (reserve_priv, struct TALER_ReservePrivateKeyP) \ op (reserve_pub, const struct TALER_ReservePublicKeyP) \
op (reserve_pub, struct TALER_ReservePublicKeyP) \ op (merchant_priv, const struct TALER_MerchantPrivateKeyP) \
op (exchange_sig, struct TALER_ExchangeSignatureP) \ op (merchant_pub, const struct TALER_MerchantPublicKeyP) \
op (exchange_pub, struct TALER_ExchangePublicKeyP) \ op (wtid, const struct TALER_WireTransferIdentifierRawP) \
op (merchant_priv, struct TALER_MerchantPrivateKeyP) \ op (contract_terms, const json_t) \
op (merchant_pub, struct TALER_MerchantPublicKeyP) \ op (wire_details, const json_t) \
op (wtid, struct TALER_WireTransferIdentifierRawP) \ op (exchange_keys, const json_t) \
op (contract_terms, json_t) \ op (reserve_history, const struct TALER_EXCHANGE_ReserveHistory) \
op (wire_details, json_t) \ op (exchange_url, const char *) \
op (exchange_keys, json_t) \ op (exchange_bank_account_url, const char *) \
op (reserve_history, struct TALER_EXCHANGE_ReserveHistory) \ op (taler_uri, const char *) \
op (exchange_url, char *) \ op (payto_uri, const char *) \
op (exchange_bank_account_url, char *) \ op (row, const uint64_t) \
op (taler_uri, char *) \ op (credit_payto_uri, const char *) \
op (payto_uri, char *) \ op (debit_payto_uri, const char *) \
op (credit_payto_uri, char *) \ op (order_id, const char *) \
op (debit_payto_uri, char *) \ op (amount, const struct TALER_Amount) \
op (order_id, char *) \ op (deposit_amount, const struct TALER_Amount) \
op (amount, struct TALER_Amount) \ op (deposit_fee_amount, const struct TALER_Amount) \
op (cmd, struct TALER_TESTING_Command) \ op (batch_cmds, struct TALER_TESTING_Command *) \
op (uuid, struct GNUNET_Uuid) \ op (uuid, const struct GNUNET_Uuid) \
op (claim_token, struct TALER_ClaimTokenP) \ op (claim_token, const struct TALER_ClaimTokenP) \
op (absolute_time, struct GNUNET_TIME_Absolute) \ op (relative_time, const struct GNUNET_TIME_Relative) \
op (relative_time, struct GNUNET_TIME_Relative) \
op (process, struct GNUNET_OS_Process *) op (process, struct GNUNET_OS_Process *)
/** /**
* Call #op on all indexed traits. * Call #op on all indexed traits.
*/ */
#define TALER_TESTING_INDEXED_TRAITS(op) \ #define TALER_TESTING_INDEXED_TRAITS(op) \
op (denom_pub, struct TALER_EXCHANGE_DenomPublicKey) \ op (denom_pub, const struct TALER_EXCHANGE_DenomPublicKey) \
op (denom_sig, struct TALER_EXCHANGE_DenominationKeySignature) \ op (denom_sig, const struct TALER_DenominationSignature) \
op (coin_priv, struct TALER_CoinSpendPrivateKeyP) \ op (coin_priv, const struct TALER_CoinSpendPrivateKeyP) \
op (coin_pub, struct TALER_CoinSpendPublicKeyP) \ op (coin_pub, const struct TALER_CoinSpendPublicKeyP) \
op (fresh_coin, struct TALER_TESTING_FreshCoinData) \ op (fresh_coin, const struct TALER_TESTING_FreshCoinData) \
op (blinding_key, struct TALER_DenominationBlindingKeyP) 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) TALER_TESTING_SIMPLE_TRAITS (TALER_TESTING_MAKE_DECL_SIMPLE_TRAIT)

View File

@ -325,7 +325,7 @@ forget (const json_t *in,
enum GNUNET_GenericReturnValue enum GNUNET_GenericReturnValue
TALER_JSON_contract_hash (const json_t *json, TALER_JSON_contract_hash (const json_t *json,
struct GNUNET_HashCode *hc) struct TALER_PrivateContractHash *hc)
{ {
enum GNUNET_GenericReturnValue ret; enum GNUNET_GenericReturnValue ret;
json_t *cjson; json_t *cjson;
@ -339,7 +339,7 @@ TALER_JSON_contract_hash (const json_t *json,
return ret; return ret;
ret = dump_and_hash (cjson, ret = dump_and_hash (cjson,
NULL, NULL,
hc); &hc->hash);
json_decref (cjson); json_decref (cjson);
return ret; return ret;
} }

View File

@ -108,7 +108,7 @@ auditor_add_run (void *cls,
{ {
struct AuditorAddDenomSigState *ds = cls; struct AuditorAddDenomSigState *ds = cls;
struct TALER_AuditorSignatureP auditor_sig; struct TALER_AuditorSignatureP auditor_sig;
struct GNUNET_HashCode h_denom_pub; struct TALER_DenominationHash h_denom_pub;
const struct TALER_EXCHANGE_DenomPublicKey *dk; const struct TALER_EXCHANGE_DenomPublicKey *dk;
(void) cmd; (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 struct TALER_TESTING_Command
TALER_TESTING_cmd_auditor_add_denom_sig (const char *label, TALER_TESTING_cmd_auditor_add_denom_sig (const char *label,
unsigned int expected_http_status, unsigned int expected_http_status,
@ -239,8 +219,7 @@ TALER_TESTING_cmd_auditor_add_denom_sig (const char *label,
.cls = ds, .cls = ds,
.label = label, .label = label,
.run = &auditor_add_run, .run = &auditor_add_run,
.cleanup = &auditor_add_cleanup, .cleanup = &auditor_add_cleanup
.traits = &auditor_add_traits
}; };
return cmd; return cmd;

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by 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; struct DepositConfirmationState *dcs = cls;
const struct TALER_TESTING_Command *deposit_cmd; const struct TALER_TESTING_Command *deposit_cmd;
struct GNUNET_HashCode h_wire; struct TALER_MerchantWireHash h_wire;
struct GNUNET_HashCode h_contract_terms; struct TALER_PrivateContractHash h_contract_terms;
const struct GNUNET_TIME_Absolute *exchange_timestamp = NULL; const struct GNUNET_TIME_Absolute *exchange_timestamp = NULL;
struct GNUNET_TIME_Absolute timestamp; struct GNUNET_TIME_Absolute timestamp;
struct GNUNET_TIME_Absolute refund_deadline; struct GNUNET_TIME_Absolute refund_deadline;
@ -251,7 +251,6 @@ deposit_confirmation_run (void *cls,
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_contract_terms (deposit_cmd, TALER_TESTING_get_trait_contract_terms (deposit_cmd,
dcs->coin_index,
&contract_terms)); &contract_terms));
/* Very unlikely to fail */ /* Very unlikely to fail */
GNUNET_assert (NULL != contract_terms); GNUNET_assert (NULL != contract_terms);
@ -260,7 +259,6 @@ deposit_confirmation_run (void *cls,
&h_contract_terms)); &h_contract_terms));
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_wire_details (deposit_cmd, TALER_TESTING_get_trait_wire_details (deposit_cmd,
dcs->coin_index,
&wire_details)); &wire_details));
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_JSON_merchant_wire_signature_hash (wire_details, TALER_JSON_merchant_wire_signature_hash (wire_details,
@ -273,7 +271,6 @@ deposit_confirmation_run (void *cls,
&coin_pub.eddsa_pub); &coin_pub.eddsa_pub);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_merchant_priv (deposit_cmd, TALER_TESTING_get_trait_merchant_priv (deposit_cmd,
dcs->coin_index,
&merchant_priv)); &merchant_priv));
GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv, GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
&merchant_pub.eddsa_pub); &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 struct TALER_TESTING_Command
TALER_TESTING_cmd_deposit_confirmation (const char *label, TALER_TESTING_cmd_deposit_confirmation (const char *label,
struct TALER_AUDITOR_Handle *auditor, struct TALER_AUDITOR_Handle *auditor,
@ -434,8 +390,7 @@ TALER_TESTING_cmd_deposit_confirmation (const char *label,
.cls = dcs, .cls = dcs,
.label = label, .label = label,
.run = &deposit_confirmation_run, .run = &deposit_confirmation_run,
.cleanup = &deposit_confirmation_cleanup, .cleanup = &deposit_confirmation_cleanup
.traits = &deposit_confirmation_traits
}; };
return cmd; 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_deposit_confirmation_with_retry ( TALER_TESTING_cmd_deposit_confirmation_with_retry (
struct TALER_TESTING_Command cmd) struct TALER_TESTING_Command cmd)

View File

@ -115,7 +115,7 @@ auditor_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
auditor_traits (void *cls, auditor_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -123,7 +123,7 @@ auditor_traits (void *cls,
{ {
struct AuditorState *ks = cls; struct AuditorState *ks = cls;
struct TALER_TESTING_Trait traits[] = { 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 () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_auditor (const char *label, TALER_TESTING_cmd_exec_auditor (const char *label,
const char *config_filename) const char *config_filename)

View File

@ -124,7 +124,7 @@ auditor_dbinit_traits (void *cls,
{ {
struct AuditorDbinitState *ks = cls; struct AuditorDbinitState *ks = cls;
struct TALER_TESTING_Trait traits[] = { 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 () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_auditor_dbinit (const char *label, TALER_TESTING_cmd_exec_auditor_dbinit (const char *label,
const char *config_filename) const char *config_filename)

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by 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 != if (GNUNET_OK !=
TALER_TESTING_get_trait_reserve_priv (ref, TALER_TESTING_get_trait_reserve_priv (ref,
0,
&reserve_priv)) &reserve_priv))
{ {
if (GNUNET_OK != TALER_TESTING_get_trait_reserve_pub (ref, if (GNUNET_OK != TALER_TESTING_get_trait_reserve_pub (ref,
0,
&reserve_pub)) &reserve_pub))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -420,13 +418,14 @@ admin_add_incoming_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
admin_add_incoming_traits (void *cls, admin_add_incoming_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
unsigned int index) unsigned int index)
{ {
struct AdminAddIncomingState *fts = cls; struct AdminAddIncomingState *fts = cls;
static const char *void_uri = "payto://void/the-exchange";
if (MHD_HTTP_OK != if (MHD_HTTP_OK !=
fts->expected_http_status) fts->expected_http_status)
@ -435,21 +434,16 @@ admin_add_incoming_traits (void *cls,
{ {
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_bank_row (&fts->serial_id), TALER_TESTING_make_trait_bank_row (&fts->serial_id),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, TALER_TESTING_make_trait_debit_payto_uri (&fts->payto_debit_account),
fts->payto_debit_account),
/* Used as a marker, content does not matter */ /* Used as a marker, content does not matter */
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, TALER_TESTING_make_trait_credit_payto_uri (&void_uri),
"payto://void/the-exchange"), TALER_TESTING_make_trait_exchange_bank_account_url (
TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, &fts->exchange_credit_url),
fts->exchange_credit_url), TALER_TESTING_make_trait_amount (&fts->amount),
TALER_TESTING_make_trait_amount_obj (0, &fts->amount),
TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
TALER_TESTING_make_trait_reserve_priv (0, TALER_TESTING_make_trait_reserve_priv (&fts->reserve_priv),
&fts->reserve_priv), TALER_TESTING_make_trait_reserve_pub (&fts->reserve_pub),
TALER_TESTING_make_trait_reserve_pub (0, TALER_TESTING_make_trait_reserve_history (&fts->reserve_history),
&fts->reserve_pub),
TALER_TESTING_make_trait_reserve_history (0,
&fts->reserve_history),
TALER_TESTING_trait_end () TALER_TESTING_trait_end ()
}; };
@ -462,19 +456,15 @@ admin_add_incoming_traits (void *cls,
{ {
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_bank_row (&fts->serial_id), TALER_TESTING_make_trait_bank_row (&fts->serial_id),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, TALER_TESTING_make_trait_debit_payto_uri (&fts->payto_debit_account),
fts->payto_debit_account),
/* Used as a marker, content does not matter */ /* Used as a marker, content does not matter */
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, TALER_TESTING_make_trait_credit_payto_uri (&void_uri),
"payto://void/the-exchange"), TALER_TESTING_make_trait_exchange_bank_account_url (
TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, &fts->exchange_credit_url),
fts->exchange_credit_url), TALER_TESTING_make_trait_amount (&fts->amount),
TALER_TESTING_make_trait_amount_obj (0, &fts->amount),
TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
TALER_TESTING_make_trait_reserve_pub (0, TALER_TESTING_make_trait_reserve_pub (&fts->reserve_pub),
&fts->reserve_pub), TALER_TESTING_make_trait_reserve_history (&fts->reserve_history),
TALER_TESTING_make_trait_reserve_history (0,
&fts->reserve_history),
TALER_TESTING_trait_end () TALER_TESTING_trait_end ()
}; };
@ -543,11 +533,11 @@ make_command (const char *label,
struct TALER_TESTING_Command struct TALER_TESTING_Command
TALER_TESTING_cmd_admin_add_incoming (const char *label, TALER_TESTING_cmd_admin_add_incoming (
const char *amount, const char *label,
const struct const char *amount,
TALER_BANK_AuthenticationData *auth, const struct TALER_BANK_AuthenticationData *auth,
const char *payto_debit_account) const char *payto_debit_account)
{ {
return make_command (label, return make_command (label,
make_fts (amount, make_fts (amount,

View File

@ -95,7 +95,6 @@ check_bank_admin_transfer_run (void *cls,
} }
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_reserve_pub (cmd_ref, TALER_TESTING_get_trait_reserve_pub (cmd_ref,
0,
&reserve_pub)) &reserve_pub))
{ {
GNUNET_break (0); 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 * Make a "bank check" CMD. It checks whether a particular wire transfer to
* the exchange (credit) has been made or not. * the exchange (credit) has been made or not.
@ -217,8 +189,7 @@ TALER_TESTING_cmd_check_bank_admin_transfer
.label = label, .label = label,
.cls = bcs, .cls = bcs,
.run = &check_bank_admin_transfer_run, .run = &check_bank_admin_transfer_run,
.cleanup = &check_bank_admin_transfer_cleanup, .cleanup = &check_bank_admin_transfer_cleanup
.traits = &check_bank_admin_transfer_traits
}; };
return cmd; return cmd;

View File

@ -74,6 +74,7 @@ struct BankCheckState
const char *deposit_reference; const char *deposit_reference;
}; };
/** /**
* Run the command. * Run the command.
* *
@ -90,17 +91,17 @@ check_bank_transfer_run (void *cls,
struct TALER_Amount amount; struct TALER_Amount amount;
char *debit_account; char *debit_account;
char *credit_account; char *credit_account;
const char *exchange_base_url; const char **exchange_base_url;
const char *debit_payto; const char **debit_payto;
const char *credit_payto; const char **credit_payto;
(void) cmd; (void) cmd;
if (NULL == bcs->deposit_reference) if (NULL == bcs->deposit_reference)
{ {
TALER_LOG_INFO ("Deposit reference NOT given\n"); TALER_LOG_INFO ("Deposit reference NOT given\n");
debit_payto = bcs->debit_payto; debit_payto = &bcs->debit_payto;
credit_payto = bcs->credit_payto; credit_payto = &bcs->credit_payto;
exchange_base_url = bcs->exchange_base_url; exchange_base_url = &bcs->exchange_base_url;
if (GNUNET_OK != if (GNUNET_OK !=
TALER_string_to_amount (bcs->amount, TALER_string_to_amount (bcs->amount,
@ -130,37 +131,33 @@ check_bank_transfer_run (void *cls,
if (NULL == deposit_cmd) if (NULL == deposit_cmd)
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
if ( (GNUNET_OK != if ( (GNUNET_OK !=
TALER_TESTING_get_trait_amount_obj (deposit_cmd, TALER_TESTING_get_trait_amount (deposit_cmd,
0, &amount_ptr)) ||
&amount_ptr)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (deposit_cmd, TALER_TESTING_get_trait_debit_payto_uri (deposit_cmd,
TALER_TESTING_PT_DEBIT, &debit_payto)) ||
&debit_payto)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (deposit_cmd, TALER_TESTING_get_trait_credit_payto_uri (deposit_cmd,
TALER_TESTING_PT_CREDIT, &credit_payto)) ||
&credit_payto)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_url (deposit_cmd, TALER_TESTING_get_trait_exchange_url (deposit_cmd,
TALER_TESTING_UT_EXCHANGE_BASE_URL, &exchange_base_url)) )
&exchange_base_url)) )
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
amount = *amount_ptr; amount = *amount_ptr;
} }
debit_account = TALER_xtalerbank_account_from_payto (debit_payto); debit_account = TALER_xtalerbank_account_from_payto (*debit_payto);
credit_account = TALER_xtalerbank_account_from_payto (credit_payto); credit_account = TALER_xtalerbank_account_from_payto (*credit_payto);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"converted debit_payto (%s) to debit_account (%s)\n", "converted debit_payto (%s) to debit_account (%s)\n",
debit_payto, *debit_payto,
debit_account); debit_account);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"converted credit_payto (%s) to credit_account (%s)\n", "converted credit_payto (%s) to credit_account (%s)\n",
credit_payto, *credit_payto,
credit_account); credit_account);
if (GNUNET_OK != if (GNUNET_OK !=
@ -168,7 +165,7 @@ check_bank_transfer_run (void *cls,
&amount, &amount,
debit_account, debit_account,
credit_account, credit_account,
exchange_base_url, *exchange_base_url,
&bcs->wtid)) &bcs->wtid))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -209,7 +206,7 @@ check_bank_transfer_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
check_bank_transfer_traits (void *cls, check_bank_transfer_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -218,10 +215,9 @@ check_bank_transfer_traits (void *cls,
struct BankCheckState *bcs = cls; struct BankCheckState *bcs = cls;
struct TALER_WireTransferIdentifierRawP *wtid_ptr = &bcs->wtid; struct TALER_WireTransferIdentifierRawP *wtid_ptr = &bcs->wtid;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_wtid (0, TALER_TESTING_make_trait_wtid (wtid_ptr),
wtid_ptr), TALER_TESTING_make_trait_exchange_url (
TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BASE_URL, &bcs->exchange_base_url),
bcs->exchange_base_url),
TALER_TESTING_trait_end () TALER_TESTING_trait_end ()
}; };

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as it under the terms of the GNU General Public License as
@ -93,10 +93,10 @@ struct HistoryState
uint64_t results_obtained; uint64_t results_obtained;
/** /**
* Set to GNUNET_YES if the callback detects something * Set to true if the callback detects something
* unexpected. * unexpected.
*/ */
int failed; bool failed;
/** /**
* Expected history. * 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. * 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); hs->start_row_reference);
GNUNET_assert (NULL != add_incoming_cmd); GNUNET_assert (NULL != add_incoming_cmd);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_uint64 (add_incoming_cmd, TALER_TESTING_get_trait_row (add_incoming_cmd,
0, &row_id_start));
&row_id_start));
} }
GNUNET_assert (0 != hs->num_results); 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 struct TALER_TESTING_Command *cmd = &is->commands[off];
const uint64_t *row_id; const uint64_t *row_id;
const char *credit_account; const char **credit_account;
const char *debit_account; const char **debit_account;
const struct TALER_Amount *amount; const struct TALER_Amount *amount;
const struct TALER_ReservePublicKeyP *reserve_pub; 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 /* The following command allows us to skip over those CMDs
* that do not offer a "row_id" trait. Such skipped CMDs are * 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, TALER_TESTING_get_trait_bank_row (cmd,
&row_id)) || &row_id)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (cmd, TALER_TESTING_get_trait_credit_payto_uri (cmd,
TALER_TESTING_PT_CREDIT, &credit_account)) ||
&credit_account)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (cmd, TALER_TESTING_get_trait_debit_payto_uri (cmd,
TALER_TESTING_PT_DEBIT, &debit_account)) ||
&debit_account)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_amount_obj (cmd, TALER_TESTING_get_trait_amount (cmd,
0, &amount)) ||
&amount)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_reserve_pub (cmd, TALER_TESTING_get_trait_reserve_pub (cmd,
0,
&reserve_pub)) || &reserve_pub)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_url (cmd, TALER_TESTING_get_trait_exchange_bank_account_url (
TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, cmd,
&exchange_credit_url)) ) &exchange_credit_url)) )
continue; /* not an interesting event */ continue; /* not an interesting event */
/* Seek "/history/incoming" starting row. */ /* Seek "/history/incoming" starting row. */
if ( (NULL != row_id_start) && if ( (NULL != row_id_start) &&
@ -295,7 +264,7 @@ build_history (struct TALER_TESTING_Interpreter *is,
if (GNUNET_NO == ok) if (GNUNET_NO == ok)
continue; /* skip until we find the marker */ continue; /* skip until we find the marker */
if (0 != strcasecmp (hs->account_url, if (0 != strcasecmp (hs->account_url,
exchange_credit_url)) *exchange_credit_url))
continue; /* account mismatch */ continue; /* account mismatch */
if (total >= GNUNET_MAX (hs->num_results, if (total >= GNUNET_MAX (hs->num_results,
-hs->num_results) ) -hs->num_results) )
@ -304,20 +273,20 @@ build_history (struct TALER_TESTING_Interpreter *is,
break; break;
} }
TALER_LOG_INFO ("Found history: %s->%s for account %s\n", TALER_LOG_INFO ("Found history: %s->%s for account %s\n",
debit_account, *debit_account,
credit_account, *credit_account,
hs->account_url); hs->account_url);
/* found matching record, make sure we have room */ /* found matching record, make sure we have room */
if (pos == total) if (pos == total)
GNUNET_array_grow (h, GNUNET_array_grow (h,
total, total,
pos * 2); 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.debit_account_uri = h[pos].url;
h[pos].details.amount = *amount; h[pos].details.amount = *amount;
h[pos].row_id = *row_id; h[pos].row_id = *row_id;
h[pos].details.reserve_pub = *reserve_pub; 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++; pos++;
} }
GNUNET_assert (GNUNET_YES == ok); GNUNET_assert (GNUNET_YES == ok);
@ -405,7 +374,7 @@ check_result (struct History *h,
* reply was not in JSON. * reply was not in JSON.
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
*/ */
static int static enum GNUNET_GenericReturnValue
history_cb (void *cls, history_cb (void *cls,
unsigned int http_status, unsigned int http_status,
enum TALER_ErrorCode ec, enum TALER_ErrorCode ec,
@ -421,7 +390,7 @@ history_cb (void *cls,
{ {
hs->hh = NULL; hs->hh = NULL;
if ( (hs->results_obtained != hs->total) || if ( (hs->results_obtained != hs->total) ||
(GNUNET_YES == hs->failed) || (hs->failed) ||
(MHD_HTTP_NO_CONTENT != http_status) ) (MHD_HTTP_NO_CONTENT != http_status) )
{ {
GNUNET_break (0); GNUNET_break (0);
@ -432,7 +401,7 @@ history_cb (void *cls,
(unsigned long long) hs->results_obtained, (unsigned long long) hs->results_obtained,
http_status, http_status,
(int) ec, (int) ec,
hs->failed); hs->failed ? 1 : 0);
print_expected (hs->h, print_expected (hs->h,
hs->total, hs->total,
UINT_MAX); UINT_MAX);
@ -469,7 +438,7 @@ history_cb (void *cls,
acc); acc);
if (NULL != acc) if (NULL != acc)
free (acc); free (acc);
hs->failed = GNUNET_YES; hs->failed = true;
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
hs->results_obtained++; hs->results_obtained++;
@ -499,16 +468,15 @@ history_run (void *cls,
{ {
const struct TALER_TESTING_Command *history_cmd; const struct TALER_TESTING_Command *history_cmd;
history_cmd = TALER_TESTING_interpreter_lookup_command history_cmd = TALER_TESTING_interpreter_lookup_command (
(is, hs->start_row_reference); is,
hs->start_row_reference);
if (NULL == history_cmd) if (NULL == history_cmd)
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_uint64 (history_cmd, TALER_TESTING_get_trait_row (history_cmd,
0, &row_ptr))
&row_ptr))
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
else else
row_id = *row_ptr; row_id = *row_ptr;
@ -574,8 +542,7 @@ TALER_TESTING_cmd_bank_credits (
.label = label, .label = label,
.cls = hs, .cls = hs,
.run = &history_run, .run = &history_run,
.cleanup = &history_cleanup, .cleanup = &history_cleanup
.traits = &history_traits
}; };
return cmd; return cmd;

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as 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. * 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", ("`%s': start row given via reference `%s'\n",
TALER_TESTING_interpreter_get_current_label (is), TALER_TESTING_interpreter_get_current_label (is),
hs->start_row_reference); hs->start_row_reference);
add_incoming_cmd = TALER_TESTING_interpreter_lookup_command add_incoming_cmd = TALER_TESTING_interpreter_lookup_command (
(is, hs->start_row_reference); is,
hs->start_row_reference);
GNUNET_assert (NULL != add_incoming_cmd); GNUNET_assert (NULL != add_incoming_cmd);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_uint64 (add_incoming_cmd, TALER_TESTING_get_trait_row (add_incoming_cmd,
0, &row_id_start));
&row_id_start));
} }
GNUNET_assert (0 != hs->num_results); 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 struct TALER_TESTING_Command *cmd = &is->commands[off];
const uint64_t *row_id; const uint64_t *row_id;
const char *debit_account; const char **debit_account;
const char *credit_account; const char **credit_account;
const struct TALER_Amount *amount; const struct TALER_Amount *amount;
const struct TALER_WireTransferIdentifierRawP *wtid; const struct TALER_WireTransferIdentifierRawP *wtid;
const char *exchange_base_url; const char **exchange_base_url;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Checking if command %s is relevant for debit history\n", "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, TALER_TESTING_get_trait_bank_row (cmd,
&row_id)) || &row_id)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (cmd, TALER_TESTING_get_trait_debit_payto_uri (cmd,
TALER_TESTING_PT_DEBIT, &debit_account)) ||
&debit_account)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_payto (cmd, TALER_TESTING_get_trait_credit_payto_uri (cmd,
TALER_TESTING_PT_CREDIT, &credit_account)) ||
&credit_account)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_amount_obj (cmd, TALER_TESTING_get_trait_amount (cmd,
0, &amount)) ||
&amount)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_wtid (cmd, TALER_TESTING_get_trait_wtid (cmd,
0,
&wtid)) || &wtid)) ||
(GNUNET_OK != (GNUNET_OK !=
TALER_TESTING_get_trait_url (cmd, TALER_TESTING_get_trait_exchange_url (cmd,
TALER_TESTING_UT_EXCHANGE_BASE_URL, &exchange_base_url)) )
&exchange_base_url)) )
continue; /* not an event we care about */ continue; /* not an event we care about */
/* Seek "/history/outgoing" starting row. */ /* Seek "/history/outgoing" starting row. */
GNUNET_log (GNUNET_ERROR_TYPE_INFO, GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@ -310,22 +279,22 @@ build_history (struct TALER_TESTING_Interpreter *is,
break; break;
} }
TALER_LOG_INFO ("Found history: %s->%s for account %s\n", TALER_LOG_INFO ("Found history: %s->%s for account %s\n",
debit_account, *debit_account,
credit_account, *credit_account,
hs->account_url); hs->account_url);
/* found matching record, make sure we have room */ /* found matching record, make sure we have room */
if (pos == total) if (pos == total)
GNUNET_array_grow (h, GNUNET_array_grow (h,
total, total,
pos * 2); pos * 2);
h[pos].c_url = GNUNET_strdup (credit_account); h[pos].c_url = GNUNET_strdup (*credit_account);
h[pos].d_url = GNUNET_strdup (debit_account); h[pos].d_url = GNUNET_strdup (*debit_account);
h[pos].details.credit_account_uri = h[pos].c_url; h[pos].details.credit_account_uri = h[pos].c_url;
h[pos].details.debit_account_uri = h[pos].d_url; h[pos].details.debit_account_uri = h[pos].d_url;
h[pos].details.amount = *amount; h[pos].details.amount = *amount;
h[pos].row_id = *row_id; h[pos].row_id = *row_id;
h[pos].details.wtid = *wtid; h[pos].details.wtid = *wtid;
h[pos].details.exchange_base_url = exchange_base_url; h[pos].details.exchange_base_url = *exchange_base_url;
pos++; pos++;
} }
GNUNET_assert (GNUNET_YES == ok); GNUNET_assert (GNUNET_YES == ok);
@ -350,7 +319,7 @@ build_history (struct TALER_TESTING_Interpreter *is,
* @param details the expected transaction details. * @param details the expected transaction details.
* @return #GNUNET_OK if the transaction is what we expect. * @return #GNUNET_OK if the transaction is what we expect.
*/ */
static int static enum GNUNET_GenericReturnValue
check_result (struct History *h, check_result (struct History *h,
uint64_t total, uint64_t total,
unsigned int off, unsigned int off,
@ -407,7 +376,7 @@ check_result (struct History *h,
* reply was not in JSON. * reply was not in JSON.
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
*/ */
static int static enum GNUNET_GenericReturnValue
history_cb (void *cls, history_cb (void *cls,
unsigned int http_status, unsigned int http_status,
enum TALER_ErrorCode ec, enum TALER_ErrorCode ec,
@ -508,9 +477,8 @@ history_run (void *cls,
if (NULL == history_cmd) if (NULL == history_cmd)
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_uint64 (history_cmd, TALER_TESTING_get_trait_row (history_cmd,
0, &row_ptr))
&row_ptr))
TALER_TESTING_FAIL (is); TALER_TESTING_FAIL (is);
else else
row_id = *row_ptr; 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_bank_debits (const char *label, TALER_TESTING_cmd_bank_debits (const char *label,
const struct TALER_BANK_AuthenticationData *auth, const struct TALER_BANK_AuthenticationData *auth,
@ -588,8 +545,7 @@ TALER_TESTING_cmd_bank_debits (const char *label,
.label = label, .label = label,
.cls = hs, .cls = hs,
.run = &history_run, .run = &history_run,
.cleanup = &history_cleanup, .cleanup = &history_cleanup
.traits = &history_traits
}; };
return cmd; return cmd;

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by 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. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
transfer_traits (void *cls, transfer_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -318,17 +318,16 @@ transfer_traits (void *cls,
{ {
struct TransferState *fts = cls; struct TransferState *fts = cls;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BASE_URL, TALER_TESTING_make_trait_exchange_url (
fts->exchange_base_url), (const char **) &fts->exchange_base_url),
TALER_TESTING_make_trait_bank_row (&fts->serial_id), TALER_TESTING_make_trait_bank_row (&fts->serial_id),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, TALER_TESTING_make_trait_credit_payto_uri (
fts->payto_credit_account), (const char **) &fts->payto_credit_account),
TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, TALER_TESTING_make_trait_debit_payto_uri (
fts->payto_debit_account), (const char **) &fts->payto_debit_account),
TALER_TESTING_make_trait_amount_obj (0, &fts->amount), TALER_TESTING_make_trait_amount (&fts->amount),
TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp),
TALER_TESTING_make_trait_wtid (0, TALER_TESTING_make_trait_wtid (&fts->wtid),
&fts->wtid),
TALER_TESTING_trait_end () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_transfer (const char *label, TALER_TESTING_cmd_transfer (const char *label,
const char *amount, 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_transfer_retry (struct TALER_TESTING_Command cmd) TALER_TESTING_cmd_transfer_retry (struct TALER_TESTING_Command cmd)
{ {

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 TALER is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as 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. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
batch_traits (void *cls, batch_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
unsigned int index) unsigned int index)
{ {
#define CURRENT_CMD_INDEX 0
#define BATCH_INDEX 1
struct BatchState *bs = cls; struct BatchState *bs = cls;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_cmd TALER_TESTING_make_trait_batch_cmds (&bs->batch),
(CURRENT_CMD_INDEX, &bs->batch[bs->batch_ip]),
TALER_TESTING_make_trait_cmd
(BATCH_INDEX, bs->batch),
TALER_TESTING_trait_end () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_batch (const char *label, TALER_TESTING_cmd_batch (const char *label,
struct TALER_TESTING_Command *batch) 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 void
TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is) TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is)
{ {
@ -206,23 +182,13 @@ TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is)
} }
/** bool
* Test if this command is a batch command.
*
* @return false if not, true if it is a batch command
*/
int
TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd) TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd)
{ {
return cmd->run == &batch_run; return cmd->run == &batch_run;
} }
/**
* Obtain what command the batch is at.
*
* @return cmd current batch command
*/
struct TALER_TESTING_Command * struct TALER_TESTING_Command *
TALER_TESTING_cmd_batch_get_current (const struct TALER_TESTING_Command *cmd) 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 void
TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd, TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd,
unsigned int new_ip) unsigned int new_ip)

View File

@ -287,7 +287,7 @@ deposit_run (void *cls,
struct TALER_CoinSpendSignatureP coin_sig; struct TALER_CoinSpendSignatureP coin_sig;
struct GNUNET_TIME_Absolute wire_deadline; struct GNUNET_TIME_Absolute wire_deadline;
struct TALER_MerchantPublicKeyP merchant_pub; struct TALER_MerchantPublicKeyP merchant_pub;
struct GNUNET_HashCode h_contract_terms; struct TALER_PrivateContractHash h_contract_terms;
enum TALER_ErrorCode ec; enum TALER_ErrorCode ec;
(void) cmd; (void) cmd;
@ -333,7 +333,6 @@ deposit_run (void *cls,
} }
if ( (GNUNET_OK != if ( (GNUNET_OK !=
TALER_TESTING_get_trait_merchant_priv (cmd, TALER_TESTING_get_trait_merchant_priv (cmd,
0,
&merchant_priv)) ) &merchant_priv)) )
{ {
GNUNET_break (0); GNUNET_break (0);
@ -393,7 +392,7 @@ deposit_run (void *cls,
&merchant_pub.eddsa_pub); &merchant_pub.eddsa_pub);
(void) GNUNET_TIME_round_abs (&wire_deadline); (void) GNUNET_TIME_round_abs (&wire_deadline);
{ {
struct GNUNET_HashCode h_wire; struct TALER_MerchantWireHash h_wire;
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_JSON_merchant_wire_signature_hash (ds->wire_details, TALER_JSON_merchant_wire_signature_hash (ds->wire_details,
@ -402,6 +401,7 @@ deposit_run (void *cls,
&denom_pub->fee_deposit, &denom_pub->fee_deposit,
&h_wire, &h_wire,
&h_contract_terms, &h_contract_terms,
NULL, /* FIXME: extension hash! */
&denom_pub->h_key, &denom_pub->h_key,
coin_priv, coin_priv,
ds->wallet_timestamp, ds->wallet_timestamp,
@ -414,6 +414,7 @@ deposit_run (void *cls,
wire_deadline, wire_deadline,
ds->wire_details, ds->wire_details,
&h_contract_terms, &h_contract_terms,
NULL, /* FIXME: extension object */
&coin_pub, &coin_pub,
denom_pub_sig, denom_pub_sig,
&denom_pub->key, &denom_pub->key,
@ -476,10 +477,9 @@ deposit_cleanup (void *cls,
* @param[out] ret result. * @param[out] ret result.
* @param trait name of the trait. * @param trait name of the trait.
* @param index index number of the object to offer. * @param index index number of the object to offer.
*
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
deposit_traits (void *cls, deposit_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -519,25 +519,16 @@ deposit_traits (void *cls,
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
/* First two traits are only available if /* First two traits are only available if
ds->traits is #GNUNET_YES */ ds->traits is #GNUNET_YES */
TALER_TESTING_make_trait_exchange_pub (0, TALER_TESTING_make_trait_exchange_pub (0, &ds->exchange_pub),
&ds->exchange_pub), TALER_TESTING_make_trait_exchange_sig (0, &ds->exchange_sig),
TALER_TESTING_make_trait_exchange_sig (0,
&ds->exchange_sig),
/* These traits are always available */ /* These traits are always available */
TALER_TESTING_make_trait_coin_priv (0, TALER_TESTING_make_trait_coin_priv (0,
coin_spent_priv), coin_spent_priv),
TALER_TESTING_make_trait_wire_details (0, TALER_TESTING_make_trait_wire_details (ds->wire_details),
ds->wire_details), TALER_TESTING_make_trait_contract_terms (ds->contract_terms),
TALER_TESTING_make_trait_contract_terms (0, TALER_TESTING_make_trait_merchant_priv (&ds->merchant_priv),
ds->contract_terms), TALER_TESTING_make_trait_deposit_amount (&ds->amount),
TALER_TESTING_make_trait_merchant_priv (0, TALER_TESTING_make_trait_deposit_fee_amount (&ds->deposit_fee),
&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_absolute_time (0, TALER_TESTING_make_trait_absolute_time (0,
&ds->exchange_timestamp), &ds->exchange_timestamp),
TALER_TESTING_trait_end () TALER_TESTING_trait_end ()

View File

@ -128,7 +128,6 @@ deposit_wtid_cb (void *cls,
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_wtid (bank_transfer_cmd, TALER_TESTING_get_trait_wtid (bank_transfer_cmd,
0,
&wtid_want)) &wtid_want))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -178,8 +177,8 @@ track_transaction_run (void *cls,
struct TALER_CoinSpendPublicKeyP coin_pub; struct TALER_CoinSpendPublicKeyP coin_pub;
const json_t *contract_terms; const json_t *contract_terms;
const json_t *wire_details; const json_t *wire_details;
struct GNUNET_HashCode h_wire_details; struct TALER_MerchantWireHash h_wire_details;
struct GNUNET_HashCode h_contract_terms; struct TALER_PrivateContractHash h_contract_terms;
const struct TALER_MerchantPrivateKeyP *merchant_priv; const struct TALER_MerchantPrivateKeyP *merchant_priv;
(void) cmd; (void) cmd;
@ -210,7 +209,6 @@ track_transaction_run (void *cls,
/* Get the strings.. */ /* Get the strings.. */
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_wire_details (transaction_cmd, TALER_TESTING_get_trait_wire_details (transaction_cmd,
0,
&wire_details)) &wire_details))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -220,7 +218,6 @@ track_transaction_run (void *cls,
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_contract_terms (transaction_cmd, TALER_TESTING_get_trait_contract_terms (transaction_cmd,
0,
&contract_terms)) &contract_terms))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -247,7 +244,6 @@ track_transaction_run (void *cls,
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_merchant_priv (transaction_cmd, TALER_TESTING_get_trait_merchant_priv (transaction_cmd,
0,
&merchant_priv)) &merchant_priv))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -301,7 +297,7 @@ track_transaction_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
track_transaction_traits (void *cls, track_transaction_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -309,7 +305,7 @@ track_transaction_traits (void *cls,
{ {
struct TrackTransactionState *tts = cls; struct TrackTransactionState *tts = cls;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_wtid (0, &tts->wtid), TALER_TESTING_make_trait_wtid (&tts->wtid),
TALER_TESTING_trait_end () TALER_TESTING_trait_end ()
}; };

View File

@ -115,7 +115,7 @@ aggregator_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
*/ */
static int static enum GNUNET_GenericReturnValue
aggregator_traits (void *cls, aggregator_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -123,7 +123,7 @@ aggregator_traits (void *cls,
{ {
struct AggregatorState *as = cls; struct AggregatorState *as = cls;
struct TALER_TESTING_Trait traits[] = { 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 () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_aggregator (const char *label, TALER_TESTING_cmd_exec_aggregator (const char *label,
const char *config_filename) const char *config_filename)

View File

@ -65,7 +65,7 @@ struct CloserState
/** /**
* Do we expect the command to actually close a reserve? * 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); as->reserve_ref);
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_reserve_pub (rcmd, TALER_TESTING_get_trait_reserve_pub (rcmd,
0,
&reserve_pubp)) &reserve_pubp))
{ {
GNUNET_break (0); GNUNET_break (0);
@ -156,7 +155,7 @@ closer_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
*/ */
static int static enum GNUNET_GenericReturnValue
closer_traits (void *cls, closer_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -164,15 +163,13 @@ closer_traits (void *cls,
{ {
struct CloserState *as = cls; struct CloserState *as = cls;
struct TALER_TESTING_Trait traits[] = { 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 () TALER_TESTING_trait_end ()
}; };
struct TALER_TESTING_Trait xtraits[] = { struct TALER_TESTING_Trait xtraits[] = {
TALER_TESTING_make_trait_process (0, &as->closer_proc), TALER_TESTING_make_trait_process (&as->closer_proc),
TALER_TESTING_make_trait_reserve_pub (0, TALER_TESTING_make_trait_reserve_pub (&as->reserve_pub),
&as->reserve_pub), TALER_TESTING_make_trait_reserve_history (&as->reserve_history),
TALER_TESTING_make_trait_reserve_history (0,
&as->reserve_history),
TALER_TESTING_trait_end () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_closer (const char *label, TALER_TESTING_cmd_exec_closer (const char *label,
const char *config_filename, const char *config_filename,
@ -214,7 +195,7 @@ TALER_TESTING_cmd_exec_closer (const char *label,
as->config_filename = config_filename; as->config_filename = config_filename;
if (NULL != expected_reserve_ref) if (NULL != expected_reserve_ref)
{ {
as->expect_close = GNUNET_YES; as->expect_close = true;
as->reserve_ref = expected_reserve_ref; as->reserve_ref = expected_reserve_ref;
if (GNUNET_OK != if (GNUNET_OK !=
TALER_string_to_amount (expected_amount, TALER_string_to_amount (expected_amount,

View File

@ -116,7 +116,7 @@ transfer_cleanup (void *cls,
* @param index index number of the object to offer. * @param index index number of the object to offer.
* @return #GNUNET_OK on success * @return #GNUNET_OK on success
*/ */
static int static enum GNUNET_GenericReturnValue
transfer_traits (void *cls, transfer_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -124,7 +124,7 @@ transfer_traits (void *cls,
{ {
struct TransferState *as = cls; struct TransferState *as = cls;
struct TALER_TESTING_Trait traits[] = { 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 () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_transfer (const char *label, TALER_TESTING_cmd_exec_transfer (const char *label,
const char *config_filename) const char *config_filename)

View File

@ -46,6 +46,7 @@ struct WirewatchState
const char *config_filename; const char *config_filename;
}; };
/** /**
* Run the command; use the `taler-exchange-wirewatch' program. * 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. * @param index index number of the object to offer.
* @return #GNUNET_OK on success. * @return #GNUNET_OK on success.
*/ */
static int static enum GNUNET_GenericReturnValue
wirewatch_traits (void *cls, wirewatch_traits (void *cls,
const void **ret, const void **ret,
const char *trait, const char *trait,
@ -123,8 +124,7 @@ wirewatch_traits (void *cls,
{ {
struct WirewatchState *ws = cls; struct WirewatchState *ws = cls;
struct TALER_TESTING_Trait traits[] = { struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_process (0, TALER_TESTING_make_trait_process (&ws->wirewatch_proc),
&ws->wirewatch_proc),
TALER_TESTING_trait_end () 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_wirewatch (const char *label, TALER_TESTING_cmd_exec_wirewatch (const char *label,
const char *config_filename) const char *config_filename)

View File

@ -68,13 +68,12 @@ rewind_ip_cleanup (void *cls,
* @return #GNUNET_OK on success, #GNUNET_NO if target was not found, * @return #GNUNET_OK on success, #GNUNET_NO if target was not found,
* #GNUNET_SYSERR if target is in the future and we failed * #GNUNET_SYSERR if target is in the future and we failed
*/ */
static int static enum GNUNET_GenericReturnValue
seek_batch (struct TALER_TESTING_Interpreter *is, seek_batch (struct TALER_TESTING_Interpreter *is,
const struct TALER_TESTING_Command *cmd, const struct TALER_TESTING_Command *cmd,
const struct TALER_TESTING_Command *target) const struct TALER_TESTING_Command *target)
{ {
unsigned int new_ip; unsigned int new_ip;
#define BATCH_INDEX 1
struct TALER_TESTING_Command *batch; struct TALER_TESTING_Command *batch;
struct TALER_TESTING_Command *current; struct TALER_TESTING_Command *current;
struct TALER_TESTING_Command *icmd; struct TALER_TESTING_Command *icmd;
@ -82,9 +81,8 @@ seek_batch (struct TALER_TESTING_Interpreter *is,
current = TALER_TESTING_cmd_batch_get_current (cmd); current = TALER_TESTING_cmd_batch_get_current (cmd);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_cmd (cmd, TALER_TESTING_get_trait_batch_cmds (cmd,
BATCH_INDEX, &batch));
&batch));
match = NULL; match = NULL;
for (new_ip = 0; for (new_ip = 0;
NULL != (icmd = &batch[new_ip]); 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_rewind_ip (const char *label, TALER_TESTING_cmd_rewind_ip (const char *label,
const char *target_label, const char *target_label,

View File

@ -27,46 +27,6 @@
#include "taler_testing_lib.h" #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. * 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)) if (TALER_TESTING_cmd_is_batch (cmd))
{ {
#define BATCH_INDEX 1
struct TALER_TESTING_Command *bcmd; struct TALER_TESTING_Command *bcmd;
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_cmd (cmd, TALER_TESTING_get_trait_batch_cmds (cmd,
BATCH_INDEX, &bcmd))
&bcmd))
{ {
GNUNET_break (0); GNUNET_break (0);
return; return;
} }
for (unsigned int j = 0; NULL != bcmd[j].label; j++) for (unsigned int j = 0;
NULL != bcmd[j].label;
j++)
do_stat (timings, do_stat (timings,
&bcmd[j]); &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 struct TALER_TESTING_Command
TALER_TESTING_cmd_stat (struct TALER_TESTING_Timer *timers) TALER_TESTING_cmd_stat (struct TALER_TESTING_Timer *timers)
{ {
struct TALER_TESTING_Command cmd = { struct TALER_TESTING_Command cmd = {
.label = "stat", .label = "stat",
.run = stat_run, .run = stat_run,
.cleanup = stat_cleanup,
.traits = stat_traits,
.cls = (void *) timers .cls = (void *) timers
}; };

View File

@ -146,7 +146,7 @@ history_entry_cmp (const struct TALER_EXCHANGE_ReserveHistory *h1,
* @param[in,out] found array to update * @param[in,out] found array to update
* @return #GNUNET_OK if @a cmd action on reserve was found in @a history * @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, analyze_command (const struct TALER_ReservePublicKeyP *reserve_pub,
const struct TALER_TESTING_Command *cmd, const struct TALER_TESTING_Command *cmd,
unsigned int history_length, unsigned int history_length,
@ -155,15 +155,13 @@ analyze_command (const struct TALER_ReservePublicKeyP *reserve_pub,
{ {
if (TALER_TESTING_cmd_is_batch (cmd)) if (TALER_TESTING_cmd_is_batch (cmd))
{ {
#define BATCH_INDEX 1
struct TALER_TESTING_Command *cur; struct TALER_TESTING_Command *cur;
struct TALER_TESTING_Command *bcmd; struct TALER_TESTING_Command *bcmd;
cur = TALER_TESTING_cmd_batch_get_current (cmd); cur = TALER_TESTING_cmd_batch_get_current (cmd);
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_get_trait_cmd (cmd, TALER_TESTING_get_trait_batch_cmds (cmd,
BATCH_INDEX, &bcmd))
&bcmd))
{ {
GNUNET_break (0); GNUNET_break (0);
return GNUNET_SYSERR; 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_status (const char *label, TALER_TESTING_cmd_status (const char *label,
const char *reserve_reference, const char *reserve_reference,

View File

@ -66,7 +66,6 @@ TALER_TESTING_interpreter_lookup_command (struct TALER_TESTING_Interpreter *is,
if (TALER_TESTING_cmd_is_batch (cmd)) if (TALER_TESTING_cmd_is_batch (cmd))
{ {
#define BATCH_INDEX 1
struct TALER_TESTING_Command *batch; struct TALER_TESTING_Command *batch;
struct TALER_TESTING_Command *current; struct TALER_TESTING_Command *current;
struct TALER_TESTING_Command *icmd; 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); current = TALER_TESTING_cmd_batch_get_current (cmd);
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_cmd (cmd, TALER_TESTING_get_trait_batch_cmds (cmd,
BATCH_INDEX, &batch));
&batch));
/* We must do the loop forward, but we can find the last match */ /* We must do the loop forward, but we can find the last match */
match = NULL; match = NULL;
for (unsigned int j = 0; 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 void
TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is, TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *commands, struct TALER_TESTING_Command *commands,
@ -166,9 +155,6 @@ static void
interpreter_run (void *cls); interpreter_run (void *cls);
/**
* Current command is done, run the next one.
*/
void void
TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is) 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 void
TALER_TESTING_interpreter_fail (struct TALER_TESTING_Interpreter *is) 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 struct TALER_TESTING_Command
TALER_TESTING_cmd_end (void) TALER_TESTING_cmd_end (void)
{ {
@ -243,9 +219,6 @@ TALER_TESTING_cmd_end (void)
} }
/**
* Obtain current label.
*/
const char * const char *
TALER_TESTING_interpreter_get_current_label (struct TALER_TESTING_interpreter_get_current_label (struct
TALER_TESTING_Interpreter *is) TALER_TESTING_Interpreter *is)
@ -393,17 +366,8 @@ maint_child_death (void *cls)
enum GNUNET_OS_ProcessStatusType type; enum GNUNET_OS_ProcessStatusType type;
unsigned long code; unsigned long code;
if (TALER_TESTING_cmd_is_batch (cmd)) while (TALER_TESTING_cmd_is_batch (cmd))
{ cmd = TALER_TESTING_cmd_batch_get_current (cmd);
struct TALER_TESTING_Command *batch_cmd;
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_cmd (cmd,
0,
&batch_cmd));
cmd = batch_cmd;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Got SIGCHLD for `%s'.\n", "Got SIGCHLD for `%s'.\n",
cmd->label); 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 void
TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is) 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 void
TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is, TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *commands, 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 void
TALER_TESTING_run (struct TALER_TESTING_Interpreter *is, TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *commands) 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 void
TALER_TESTING_cert_cb (void *cls, TALER_TESTING_cert_cb (void *cls,
const struct TALER_EXCHANGE_HttpResponse *hr, 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 int
TALER_TESTING_setup (TALER_TESTING_Main main_cb, TALER_TESTING_setup (TALER_TESTING_Main main_cb,
void *main_cb_cls, void *main_cb_cls,