diff options
Diffstat (limited to 'src/include/taler_testing_lib.h')
-rw-r--r-- | src/include/taler_testing_lib.h | 863 |
1 files changed, 570 insertions, 293 deletions
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index f7d3cca76..5997f8989 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -74,6 +74,7 @@ * * @param account_no account number * @param bank_url the bank_url + * * @return JSON describing the account, including the * payto://-URL of the account, must be manually decref'd */ @@ -132,7 +133,8 @@ TALER_TESTING_url_port_free (const char *url); * If everything is OK, return the configured URL of the fakebank. * * @param config_filename configuration file to use - * @param config_section which account to use (must match x-taler-bank) + * @param config_section which account to use + * (must match x-taler-bank) * @return NULL on error, fakebank URL otherwise */ char * @@ -176,8 +178,8 @@ struct TALER_TESTING_Interpreter struct GNUNET_CURL_RescheduleContext *rc; /** - * Handle to our fakebank, if #TALER_TESTING_run_with_fakebank() was used. - * Otherwise NULL. + * Handle to our fakebank, if #TALER_TESTING_run_with_fakebank() + * was used. Otherwise NULL. */ struct TALER_FAKEBANK_Handle *fakebank; @@ -261,6 +263,8 @@ struct TALER_TESTING_Command * #TALER_TESTING_interpreter_next() or * #TALER_TESTING_interpreter_fail(). * + * @param cls closure + * @param cmd command being run * @param i interpreter state */ void @@ -274,6 +278,7 @@ struct TALER_TESTING_Command * (CTRL-C) or test failure or test success. * * @param cls closure + * @param cmd command being cleaned up */ void (*cleanup)(void *cls, @@ -301,6 +306,10 @@ struct TALER_TESTING_Command /** * Lookup command by label. + * + * @param i interpreter state. + * @param label label of the command to lookup. + * @return the command, if it is found, or NULL. */ const struct TALER_TESTING_Command * TALER_TESTING_interpreter_lookup_command @@ -309,32 +318,40 @@ TALER_TESTING_interpreter_lookup_command /** * Obtain main execution context for the main loop. + * + * @param is interpreter state. + * @return CURL execution context. */ struct GNUNET_CURL_Context * TALER_TESTING_interpreter_get_context (struct TALER_TESTING_Interpreter *is); /** - * Obtain current label. + * Obtain label of the command being now run. + * + * @param is interpreter state. + * @return the label. */ const char * TALER_TESTING_interpreter_get_current_label (struct TALER_TESTING_Interpreter *is); -/** - * Obtain main execution context for the main loop. - */ -struct GNUNET_CURL_Context * -TALER_TESTING_interpreter_get_context - (struct TALER_TESTING_Interpreter *is); +/** + * Get connection handle to the fakebank. + * + * @param is interpreter state. + * @return the handle. + */ struct TALER_FAKEBANK_Handle * TALER_TESTING_interpreter_get_fakebank (struct TALER_TESTING_Interpreter *is); /** * Current command is done, run the next one. + * + * @param is interpreter state. */ void TALER_TESTING_interpreter_next @@ -342,6 +359,8 @@ TALER_TESTING_interpreter_next /** * Current command failed, clean up and fail the test case. + * + * @param is interpreter state. */ void TALER_TESTING_interpreter_fail @@ -361,18 +380,35 @@ TALER_TESTING_cmd_end (); * Then obtain the process trait of the current * command, wait on the the zombie and continue * with the next command. + * + * @param is interpreter state. */ void TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is); +/** + * Schedule the first CMD in the CMDs array. + * + * @param is interpreter state. + * @param commands array of all the commands to execute. + */ void TALER_TESTING_run (struct TALER_TESTING_Interpreter *is, struct TALER_TESTING_Command *commands); + +/** + * First launch the fakebank, then schedule the first CMD + * in the array of all the CMDs to execute. + * + * @param is interpreter state. + * @param commands array of all the commands to execute. + * @param bank_url base URL of the fake bank. + */ void TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is, @@ -381,7 +417,13 @@ TALER_TESTING_run_with_fakebank /** - * FIXME + * The function that contains the array of all the CMDs to run, + * which is then on charge to call some fashion of + * TALER_TESTING_run*. In all the test cases, this function is + * always the GNUnet-ish "run" method. + * + * @param cls closure. + * @param is interpreter state. */ typedef void (*TALER_TESTING_Main)(void *cls, @@ -396,9 +438,8 @@ typedef void * @param main_cb_cls a closure for "run", typically NULL. * @param config_filename configuration filename. * @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.. + * state as some commands - e.g. revoke - need to signal it, + * for example to let it know to reload the key state. * * @return FIXME: not sure what 'is.result' is at this stage. */ @@ -410,24 +451,49 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb, /** - * Initialize scheduler loop and curl context for the testcase + * Initialize scheduler loop and curl context for the test case * including starting and stopping the exchange using the given * configuration file. + * + * @param main_cb main method. + * @param main_cb_cls main method closure. + * @param config_filename configuration file name. Is is used + * by both this function and the exchange itself. In the + * first case it gives out the exchange port number and + * the exchange base URL so as to check whether the port + * is available and the exchange responds when requested + * at its base URL. + * @return #GNUNET_OK if no errors occurred. */ int TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb, void *main_cb_cls, const char *config_file); - - - /* ************** Specific interpreter commands ************ */ /** - * Perform a wire transfer (formerly Admin-add-incoming) + * Create fakebank_transfer command, the subject line will be + * derived from a randomly created reserve priv. Note that that + * reserve priv will then be offered as trait. + * + * @param label command label. + * @param amount amount to transfer. + * @param bank_url base URL of the bank that implements this + * wire transer. For simplicity, both credit and debit + * bank account exist at the same bank. + * @param debit_account_no which account (expressed as a number) + * gives money. + * @param credit_account_no which account (expressed as a number) + * receives money. + * @param auth_username username identifying the @a + * debit_account_no at the bank. + * @param auth_password password for @a auth_username. + * @param exchange_url which exchange is involved in this transfer. + * This data is used for tracking purposes (FIXME: explain + * _how_). * - * @return NULL on failure + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_fakebank_transfer (const char *label, @@ -441,8 +507,28 @@ TALER_TESTING_cmd_fakebank_transfer (const char *label, /** - * Create fakebank_transfer command with custom subject. + * Create "fakebank transfer" CMD, letting the caller specifying + * the subject line. + * + * @param label command label. + * @param amount amount to transfer. + * @param bank_url base URL of the bank that implements this + * wire transer. For simplicity, both credit and debit + * bank account exist at the same bank. + * @param debit_account_no which account (expressed as a number) + * gives money. + * @param credit_account_no which account (expressed as a number) + * receives money. * + * @param auth_username username identifying the @a + * debit_account_no at the bank. + * @param auth_password password for @a auth_username. + * @param subject wire transfer's subject line. + * @param exchange_url which exchange is involved in this transfer. + * This data is used for tracking purposes (FIXME: explain + * _how_). + * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_fakebank_transfer_with_subject @@ -458,8 +544,27 @@ TALER_TESTING_cmd_fakebank_transfer_with_subject /** - * Create fakebank_transfer command with custom subject. + * Create "fakebank transfer" CMD, letting the caller specify + * a reference to a command that can offer a reserve private key. + * This private key will then be used to construct the subject line + * of the wire transfer. + * + * @param label command label. + * @param amount the amount to transfer. + * @param bank_url base URL of the bank running the transfer. + * @param debit_account_no which account (expressed as a number) + * gives money. + * @param credit_account_no which account (expressed as a number) + * receives money. + * @param auth_username username identifying the @a + * debit_account_no at the bank. + * @param auth_password password for @a auth_username. + * @param ref reference to a command that can offer a reserve + * private key. + * @param exchange_url the exchage involved in the transfer, + * tipically receiving the money in order to fuel a reserve. * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_fakebank_transfer_with_ref @@ -474,8 +579,35 @@ TALER_TESTING_cmd_fakebank_transfer_with_ref const char *exchange_url); /** - * Create fakebank_transfer command with custom subject. + * Create "fakebank transfer" CMD, letting the caller specifying + * the merchant instance. This version is useful when a tip + * reserve should be topped up, in fact the interpreter will need + * the "tipping instance" in order to get the instance public key + * and make a wire transfer subject out of it. + * + * @param label command label. + * @param amount amount to transfer. + * @param bank_url base URL of the bank that implements this + * wire transer. For simplicity, both credit and debit + * bank account exist at the same bank. + * @param debit_account_no which account (expressed as a number) + * gives money. + * @param credit_account_no which account (expressed as a number) + * receives money. + * + * @param auth_username username identifying the @a + * debit_account_no at the bank. + * @param auth_password password for @a auth_username. + * @param instance the instance that runs the tipping. Under this + * instance, the configuration file will provide the private + * key of the tipping reserve. This data will then used to + * construct the wire transfer subject line. + * @param exchange_url which exchange is involved in this transfer. + * This data is used for tracking purposes (FIXME: explain + * _how_). + * @param config_filename configuration file to use. * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_fakebank_transfer_with_instance @@ -491,10 +623,10 @@ TALER_TESTING_cmd_fakebank_transfer_with_instance const char *config_filename); /** - * Execute taler-exchange-wirewatch process. + * Make a "wirewatch" CMD. * - * @param label command label - * @param config_filanem configuration filename. + * @param label command label. + * @param config_filename configuration filename. * * @return the command. */ @@ -503,10 +635,11 @@ TALER_TESTING_cmd_exec_wirewatch (const char *label, const char *config_filename); /** - * Execute taler-exchange-aggregator process. + * Make a "aggregator" CMD. * - * @param label command label - * @param config_filename configuration filename + * @param label command label. + * @param config_filename configuration file for the + * aggregator to use. * * @return the command. */ @@ -515,10 +648,10 @@ TALER_TESTING_cmd_exec_aggregator (const char *label, const char *config_filename); /** - * Execute taler-exchange-keyup process. + * Make the "keyup" CMD. * - * @param label command label - * @param config_filename configuration filename + * @param label command label. + * @param config_filename configuration filename. * * @return the command. */ @@ -527,7 +660,7 @@ TALER_TESTING_cmd_exec_keyup (const char *label, const char *config_filename); /** - * Execute taler-auditor-sign process. + * Make a "auditor sign" CMD. * * @param label command label * @param config_filename configuration filename @@ -540,9 +673,16 @@ TALER_TESTING_cmd_exec_auditor_sign (const char *label, /** - * Create withdraw command. + * Create a withdraw command, letting the caller specify + * the desired amount as string. * - * @return NULL on failure + * @param label command label. + * @param exchange handle to the exchange. + * @param amount how much we withdraw. + * @param expected_response_code which HTTP response code + * we expect from the exchange. + * + * @return the withdraw command to be executed by the interpreter. */ struct TALER_TESTING_Command TALER_TESTING_cmd_withdraw_amount @@ -554,8 +694,17 @@ TALER_TESTING_cmd_withdraw_amount /** - * Create withdraw command. + * Create withdraw command, letting the caller specify the + * amount by a denomination key. * + * @param label command label. + * @param exchange connection handle to the exchange. + * @param reserve_reference reference to the reserve to withdraw + * from; will provide reserve priv to sign the request. + * @param dk denomination public key. + * @param expected_response_code expected HTTP response code. + * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_withdraw_denomination @@ -567,7 +716,7 @@ TALER_TESTING_cmd_withdraw_denomination /** - * Create a /wire command. + * Create a "wire" command. * * @param label the command label. * @param exchange the exchange to connect to. @@ -577,7 +726,7 @@ TALER_TESTING_cmd_withdraw_denomination * @param expected_response_code the HTTP response the exchange * should return. * - * @return the command to be executed by the interpreter. + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_wire (const char *label, @@ -588,16 +737,15 @@ TALER_TESTING_cmd_wire (const char *label, /** - * Create a /reserve/status command. + * Create a "reserve status" command. * * @param label the command label. * @param exchange the exchange to connect to. * @param reserve_reference reference to the reserve to check. - * @param expected_balance balance expected to be at the - * referenced reserve. + * @param expected_balance expected balance for the reserve. * @param expected_response_code expected HTTP response code. * - * @return the command to be executed by the interpreter. + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_status (const char *label, @@ -607,26 +755,25 @@ TALER_TESTING_cmd_status (const char *label, unsigned int expected_response_code); /** - * Create a deposit command. + * Create a "deposit" command. * - * @param label command label - * @param exchange exchange connection + * @param label command label. + * @param exchange exchange connection. * @param coin_reference reference to any operation that can - * provide a coin + * provide a coin. * @param coin_index if @a withdraw_reference offers an array of - * coins, this parameter selects which one in that array + * coins, this parameter selects which one in that array. * This value is currently ignored, as only one-coin * withdrawals are implemented. - * @param wire_details JSON including payto://-URL of the merchant performing the - * deposit, reference is captured by this command + * @param wire_details wire details associated with the "deposit" + * request. * @param contract_terms contract terms to be signed over by the - * coin - * @param refund_deadline refund deadline - * @param amount how much is going to be deposited - * @param expected_response_code which HTTP status code we expect - * in the response + * coin. + * @param refund_deadline refund deadline, zero means 'no refunds'. + * @param amount how much is going to be deposited. + * @param expected_response_code expected HTTP response code. * - * @return the deposit command to be run by the interpreter + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_deposit @@ -644,14 +791,15 @@ TALER_TESTING_cmd_deposit /** * Create a "refresh melt" command. * - * @param label command label - * @param exchange connection to the exchange - * @param amount Fixme - * @param coin_reference reference to a command that will provide - * a coin to refresh - * @param expected_response_code expected HTTP code + * @param label command label. + * @param exchange connection to the exchange. + * @param amount amount to be melted. + * @param coin_reference reference to a command + * that will provide a coin to refresh. + * @param expected_response_code expected HTTP code. + * + * @return the command. */ - struct TALER_TESTING_Command TALER_TESTING_cmd_refresh_melt (const char *label, @@ -661,17 +809,19 @@ TALER_TESTING_cmd_refresh_melt unsigned int expected_response_code); /** - * Create a "refresh melt" command, that does TWO /refresh/melt - * requests. + * Create a "refresh melt" CMD that does TWO /refresh/melt + * requests. This was needed to test the replay of a valid melt + * request, see #5312. * * @param label command label * @param exchange connection to the exchange - * @param amount Fixme + * @param amount FIXME not used. * @param coin_reference reference to a command that will provide * a coin to refresh * @param expected_response_code expected HTTP code + * + * @return the command. */ - struct TALER_TESTING_Command TALER_TESTING_cmd_refresh_melt_double (const char *label, @@ -684,12 +834,12 @@ TALER_TESTING_cmd_refresh_melt_double /** * Create a "refresh reveal" command. * - * @param label command label - * @param exchange connection to the exchange - * @param melt_reference reference to a "refresh melt" command - * @param expected_response_code expected HTTP response code + * @param label command label. + * @param exchange connection to the exchange. + * @param melt_reference reference to a "refresh melt" command. + * @param expected_response_code expected HTTP response code. * - * @return the "refresh reveal" command + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_refresh_reveal @@ -702,9 +852,9 @@ TALER_TESTING_cmd_refresh_reveal /** * Create a "refresh link" command. * - * @param label command label - * @param exchange connection to the exchange - * @param melt_reference reference to a "refresh melt" command + * @param label command label. + * @param exchange connection to the exchange. + * @param reveal_reference reference to a "refresh reveal" CMD. * @param expected_response_code expected HTTP response code * * @return the "refresh link" command @@ -718,18 +868,19 @@ TALER_TESTING_cmd_refresh_link /** - * Create a /track/transaction command. + * Create a "track transaction" command. * * @param label the command label. * @param exchange the exchange to connect to. - * @param transaction_reference reference to a deposit operation. - * @param coin_index index of the coin involved in the transaction + * @param transaction_reference reference to a deposit operation, + * will be used to get the input data for the track. + * @param coin_index index of the coin involved in the transaction. * @param expected_response_code expected HTTP response code. - * @param bank_transfer_reference which #OC_CHECK_BANK_TRANSFER - * wtid should this match? NULL - * for none + * @param bank_transfer_reference reference to a command that + * can offer a WTID so as to check that against what WTID + * the tracked operation has. Set as NULL if not needed. * - * @return the command to be executed by the interpreter. + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_track_transaction @@ -741,18 +892,22 @@ TALER_TESTING_cmd_track_transaction const char *bank_transfer_reference); /** - * Make a /track/transfer command, expecting the transfer - * not being done (yet). + * Make a "track transfer" CMD where no "expected"-arguments, + * except the HTTP response code, are given. The best use case + * is when what matters to check is the HTTP response code, e.g. + * when a bogus WTID was passed. * * @param label the command label - * @param exchange connection to the exchange + * @param exchange connection to the exchange. * @param wtid_reference reference to any command which can provide - * a wtid - * @param index in case there are multiple wtid offered, this - * parameter selects a particular one - * @param expected_response_code expected HTTP response code + * a wtid. If NULL is given, then a all zeroed WTID is + * used that will at 99.9999% probability NOT match any + * existing WTID known to the exchange. + * @param index index number of the WTID to track, in case there + * are multiple on offer. + * @param expected_response_code expected HTTP response code. * - * @return the command + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_track_transfer_empty @@ -764,18 +919,18 @@ TALER_TESTING_cmd_track_transfer_empty /** - * Make a /track/transfer command, specifying which amount and + * Make a "track transfer" command, specifying which amount and * wire fee are expected. * - * @param label the command label - * @param exchange connection to the exchange + * @param label the command label. + * @param exchange connection to the exchange. * @param wtid_reference reference to any command which can provide - * a wtid - * @param index in case there are multiple wtid offered, this - * parameter selects a particular one - * @param expected_response_code expected HTTP response code - * @param expected_amount how much money we expect being - * moved with this wire-transfer. + * a wtid. Will be the one tracked. + * @param index in case there are multiple WTID offered, this + * parameter selects a particular one. + * @param expected_response_code expected HTTP response code. + * @param expected_amount how much money we expect being moved + * with this wire-transfer. * @param expected_wire_fee expected wire fee. * * @return the command @@ -791,14 +946,15 @@ TALER_TESTING_cmd_track_transfer const char *expected_wire_fee); /** - * Command to check whether a particular wire transfer has been - * made or not. + * Make a "bank check" CMD. It checks whether a + * particular wire transfer has been made or not. * - * @param label the command label - * @param exchange_base_url base url of the exchange (Fixme: why?) - * @param amount the amount expected to be transferred - * @param debit_account the account that gave money - * @param credit_account the account that received money + * @param label the command label. + * @param exchange_base_url base url of the exchange involved in + * the wire transfer. + * @param amount the amount expected to be transferred. + * @param debit_account the account that gave money. + * @param credit_account the account that received money. * * @return the command */ @@ -810,8 +966,18 @@ TALER_TESTING_cmd_check_bank_transfer uint64_t debit_account, uint64_t credit_account); + + /** - * FIXME. + * Define a "bank check" CMD that takes the input + * data from another CMD that offers it. + * + * @param label command label. + * @param deposit_reference reference to a CMD that is + * able to provide the "check bank transfer" operation + * input data. + * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_check_bank_transfer_with_ref @@ -819,9 +985,10 @@ TALER_TESTING_cmd_check_bank_transfer_with_ref const char *deposit_reference); /** - * Check bank's balance is zero. + * Checks wheter all the wire transfers got "checked" + * by the "bank check" CMD. * - * @param credit_account the account that received money + * @param label command label. * * @return the command */ @@ -829,15 +996,19 @@ struct TALER_TESTING_Command TALER_TESTING_cmd_check_bank_empty (const char *label); /** - * Create a /refund test command, allows to specify refund - * transaction id. + * Create a "refund" command, allow to specify refund transaction + * id. Mainly used to create conflicting requests. * - * @param label command label - * @param expected_response_code expected HTTP status code - * @param refund_amount the amount to ask a refund for - * @param refund_fee expected refund fee + * @param label command label. + * @param expected_response_code expected HTTP status code. + * @param refund_amount the amount to ask a refund for. + * @param refund_fee expected refund fee. * @param coin_reference reference to a command that can * provide a coin to be refunded. + * @param refund_transaction_id transaction id to use + * in the request. + * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_refund_with_id @@ -849,14 +1020,16 @@ TALER_TESTING_cmd_refund_with_id uint64_t refund_transaction_id); /** - * Create a /refund test command. + * Create a "refund" command. * - * @param label command label - * @param expected_response_code expected HTTP status code - * @param refund_amount the amount to ask a refund for - * @param refund_fee expected refund fee + * @param label command label. + * @param expected_response_code expected HTTP status code. + * @param refund_amount the amount to ask a refund for. + * @param refund_fee expected refund fee. * @param coin_reference reference to a command that can * provide a coin to be refunded. + * + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_refund (const char *label, @@ -867,15 +1040,15 @@ TALER_TESTING_cmd_refund (const char *label, /** - * Make a /payback command. + * Make a "payback" command. * * @param label the command label * @param expected_response_code expected HTTP status code - * @param coin_reference reference to any command which offers - * a reserve private key plus a coin to be paid back. + * @param coin_reference reference to any command which + * offers a coin & reserve private key. * @param amount denomination to pay back. * - * @return a /revoke command + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_payback (const char *label, @@ -885,15 +1058,15 @@ TALER_TESTING_cmd_payback (const char *label, /** - * Make a /revoke command. + * Make a "revoke" command. * - * @param label the command label - * @param expected_response_code expected HTTP status code - * @param coin_reference reference to any command which offers - * a coin trait + * @param label the command label. + * @param expected_response_code expected HTTP status code. + * @param coin_reference reference to a CMD that will offer the + * denomination to revoke. * @param config_filename configuration file name. * - * @return a /revoke command + * @return the command. */ struct TALER_TESTING_Command TALER_TESTING_cmd_revoke (const char *label, @@ -902,11 +1075,11 @@ TALER_TESTING_cmd_revoke (const char *label, const char *config_filename); /** - * Send a signal to a process. + * Create a "signal" CMD. * - * @param label command label - * @param process handle to the process - * @param signal signal to send + * @param label command label. + * @param process handle to the process to signal. + * @param signal signal to send. * * @return the command. */ @@ -916,12 +1089,15 @@ TALER_TESTING_cmd_signal (const char *label, int signal); /** - * Make a "check keys" command. + * Make a "check keys" command. This type of command + * checks whether the number of denomination keys from + * @a exchange matches @a num_denom_keys. * * @param label command label - * @param generation FIXME - * @param num_denom_keys FIXME - * @param exchange connection to the exchange + * @param generation how many /keys responses are expected to + * have been returned when this CMD will be run. + * @param num_denom_keys expected number of denomination keys. + * @param exchange connection handle to the exchange to test. * * @return the command. */ @@ -939,19 +1115,44 @@ TALER_TESTING_cmd_check_keys */ struct TALER_TESTING_Trait { + /** + * Index number associated with the trait. This gives the + * possibility to have _multiple_ traits on offer under the + * same name. + */ unsigned int index; + /** + * Trait type, for example "reserve-pub" or "coin-priv". + */ const char *trait_name; + /** + * Pointer to the piece of data to offer. + */ const void *ptr; }; +/** + * "end" trait. Because traits are offered into arrays, + * this type of trait is used to mark the end of such arrays; + * useful when iterating over those. + */ struct TALER_TESTING_Trait TALER_TESTING_trait_end (void); +/** + * Extract a trait. + * + * @param traits the array of all the traits. + * @param ret[out] where to store the result. + * @param trait type of the trait to extract. + * @param index index number of the trait to extract. + * @return #GNUNET_OK when the trait is found. + */ int TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits, void **ret, @@ -961,6 +1162,16 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait *traits, /* ****** Specific traits supported by this component ******* */ + +/** + * Offer a reserve private key. + * + * @param index reserve priv's index number. + * @param reserve_priv reserve private key to offer. + * + * @return the trait. + */ + struct TALER_TESTING_Trait TALER_TESTING_make_trait_reserve_priv (unsigned int index, @@ -970,11 +1181,11 @@ TALER_TESTING_make_trait_reserve_priv /** * Obtain a reserve private key from a @a cmd. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param reserve_priv[out] set to the private key of the reserve - * @return #GNUNET_OK on success + * @param cmd command to extract the reserve priv from. + * @param index reserve priv's index number. + * @param reserve_priv[out] set to the reserve priv. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_reserve_priv @@ -984,14 +1195,15 @@ TALER_TESTING_get_trait_reserve_priv /** - * Obtain location where a command stores a pointer to a process + * Obtain location where a command stores a pointer to a process. * - * @param cmd command to extract trait from - * @param selector which process to pick if @a cmd has multiple - * on offer - * @param processp[out] set to address of the pointer to the - * process - * @return #GNUNET_OK on success + * @param cmd command to extract trait from. + * @param index which process to pick if @a cmd + * has multiple on offer. + * @param coin_priv[out] set to the address of the pointer to the + * process. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_process @@ -1000,6 +1212,16 @@ TALER_TESTING_get_trait_process struct GNUNET_OS_Process ***processp); + +/** + * Offer location where a command stores a pointer to a process. + * + * @param index offered location index number, in case there are + * multiple on offer. + * @param processp process location to offer. + * + * @return the trait. + */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_process (unsigned int index, @@ -1007,7 +1229,12 @@ TALER_TESTING_make_trait_process /** - * @param selector FIXME + * Offer coin private key. + * + * @param index index number to associate with offered coin priv. + * @param coin_priv coin private key to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_coin_priv @@ -1017,11 +1244,11 @@ TALER_TESTING_make_trait_coin_priv /** * Obtain a coin private key from a @a cmd. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param coin_priv[out] set to the private key of the coin - * @return #GNUNET_OK on success + * @param cmd command to extract trait from. + * @param index index of the coin priv to obtain. + * @param coin_priv[out] set to the private key of the coin. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_coin_priv @@ -1030,10 +1257,12 @@ TALER_TESTING_get_trait_coin_priv struct TALER_CoinSpendPrivateKeyP **coin_priv); /** - * @param selector a "tag" to associate the object with - * @param blinding_key which object should be returned + * Offer blinding key. * - * @return the trait, to be put in the traits array of the command + * @param index index number to associate to the offered key. + * @param blinding_key blinding key to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_blinding_key @@ -1041,13 +1270,13 @@ TALER_TESTING_make_trait_blinding_key const struct TALER_DenominationBlindingKeyP *blinding_key); /** - * Obtain a coin's blinding key from a @a cmd. + * Obtain a blinding key from a @a cmd. * * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param blinding_key[out] set to the blinding key of the coin - * @return #GNUNET_OK on success + * @param index which coin to pick if @a cmd has multiple on offer. + * @param blinding_key[out] set to the offered blinding key. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_blinding_key @@ -1056,10 +1285,12 @@ TALER_TESTING_get_trait_blinding_key struct TALER_DenominationBlindingKeyP **blinding_key); /** - * @param selector a "tag" to associate the object with - * @param pdk which object should be returned + * Make a trait for a denomination public key. + * + * @param index index number to associate to the offered denom pub. + * @param denom_pub denom pub to offer with this trait. * - * @return the trait, to be put in the traits array of the command + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_denom_pub @@ -1067,13 +1298,13 @@ TALER_TESTING_make_trait_denom_pub const struct TALER_EXCHANGE_DenomPublicKey *dpk); /** - * Obtain a coin private key from a @a cmd. + * Obtain a denomination public key from a @a cmd. * * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param dpk[out] set to a denomination key of the coin - * @return #GNUNET_OK on success + * @param index index number of the denom to obtain. + * @param denom_pub[out] set to the offered denom pub. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_denom_pub @@ -1083,13 +1314,13 @@ TALER_TESTING_get_trait_denom_pub /** - * Obtain a coin denomination signature from a @a cmd. + * Obtain a denomination signature from a @a cmd. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param sig[out] set to a denomination signature over the coin - * @return #GNUNET_OK on success + * @param cmd command to extract the denom sig from. + * @param index index number associated with the denom sig. + * @param denom_sig[out] set to the offered signature. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_denom_sig @@ -1098,7 +1329,13 @@ TALER_TESTING_get_trait_denom_sig struct TALER_DenominationSignature **dpk); /** - * @param selector + * Offer denom sig. + * + * @param index index number to associate to the signature on + * offer. + * @param denom_sig the denom sig on offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_denom_sig @@ -1107,24 +1344,24 @@ TALER_TESTING_make_trait_denom_sig /** - * @param selector associate the object with this "tag" - * @param i which object should be returned + * Offer number trait, 64-bit version. * - * @return the trait, to be put in the traits array of the command + * @param index the number's index number. + * @param n number to offer. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_uint64 (unsigned int index, - const uint64_t *i); + const uint64_t *n); /** - * Obtain a "number" value from @a cmd. + * Obtain a "number" value from @a cmd, 64-bit version. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer + * @param cmd command to extract the number from. + * @param index the number's index number. * @param n[out] set to the number coming from @a cmd. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_uint64 @@ -1133,10 +1370,12 @@ TALER_TESTING_get_trait_uint64 const uint64_t **n); /** - * @param selector associate the object with this "tag" - * @param i which object should be returned + * Offer a number. * - * @return the trait, to be put in the traits array of the command + * @param index the number's index number. + * @param n the number to offer. + * + * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_uint @@ -1144,13 +1383,13 @@ TALER_TESTING_make_trait_uint const unsigned int *i); /** - * Obtain a "number" value from @a cmd. + * Obtain a number from @a cmd. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer + * @param cmd command to extract the number from. + * @param index the number's index number. * @param n[out] set to the number coming from @a cmd. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_uint @@ -1185,10 +1424,14 @@ struct FreshCoin }; /** - * @param selector associate the object with this "tag" - * @param fresh_coins array of fresh coins to return + * Offer a _array_ of fresh coins. + * + * @param index which array of fresh coins to offer, + * if there are multiple on offer. Tipically passed as + * zero. + * @param fresh_coins the array of fresh coins to offer * - * @return the trait, to be put in the traits array of the command + * @return the trait, */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_fresh_coins @@ -1196,13 +1439,14 @@ TALER_TESTING_make_trait_fresh_coins struct FreshCoin *fresh_coins); /** - * Obtain a "number" value from @a cmd. + * Get a array of fresh coins. * - * @param cmd command to extract trait from - * @param selector which coin to pick if @a cmd has multiple on - * offer - * @param fresh_coins[out] will point to array of fresh coins - * @return #GNUNET_OK on success + * @param cmd command to extract the fresh coin from. + * @param index which array to pick if @a cmd has multiple + * on offer. + * @param fresh_coins[out] will point to the offered array. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_fresh_coins @@ -1210,17 +1454,15 @@ TALER_TESTING_get_trait_fresh_coins unsigned int index, struct FreshCoin **fresh_coins); - - /** * Obtain contract terms from @a cmd. * - * @param cmd command to extract trait from - * @param index always (?) zero, as one command sticks - * to one bank account + * @param cmd command to extract the contract terms from. + * @param index contract terms index number. * @param contract_terms[out] where to write the contract * terms. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_contract_terms @@ -1229,10 +1471,12 @@ TALER_TESTING_get_trait_contract_terms const char **contract_terms); /** - * @param index always (?) zero, as one command sticks - * to one bank account - * @param contract_terms contract terms to offer - * @return the trait, to be put in the traits array of the command + * Offer contract terms. + * + * @param index contract terms index number. + * @param contract_terms contract terms to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_contract_terms @@ -1243,11 +1487,13 @@ TALER_TESTING_make_trait_contract_terms /** * Obtain wire details from @a cmd. * - * @param cmd command to extract trait from - * @param index always (?) zero, as one command sticks - * to one bank account + * @param cmd command to extract the wire details from. + * @param index index number associate with the wire details + * on offer; usually zero, as one command sticks to + * one bank account. * @param wire_details[out] where to write the wire details. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_wire_details @@ -1259,10 +1505,12 @@ TALER_TESTING_get_trait_wire_details /** * Offer wire details in a trait. * - * @param index always (?) zero, as one command sticks - * to one bank account - * @param wire_details wire details to offer - * @return the trait, to be put in the traits array of the command + * @param index index number associate with the wire details + * on offer; usually zero, as one command sticks to + * one bank account. + * @param wire_details wire details to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_wire_details @@ -1273,12 +1521,12 @@ TALER_TESTING_make_trait_wire_details * Obtain a private key from a "peer". Used e.g. to obtain * a merchant's priv to sign a /track request. * - * @param index (tipically zero) which key to return if they - * exist in an array. - * @param selector which coin to pick if @a cmd has multiple on - * offer + * @param cmd command that is offering the key. + * @param index (tipically zero) which key to return if there + * are multiple on offer. * @param priv[out] set to the key coming from @a cmd. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_peer_key @@ -1286,13 +1534,15 @@ TALER_TESTING_get_trait_peer_key unsigned int index, const struct GNUNET_CRYPTO_EddsaPrivateKey **priv); - /** - * @param index (tipically zero) which key to return if they - * exist in an array. - * @param priv which object should be returned + * Offer private key, typically done when CMD_1 needs it to + * sign a request. + * + * @param index (tipically zero) which key to return if there are + * multiple on offer. + * @param priv which object should be offered. * - * @return the trait, to be put in the traits array of the command + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_peer_key @@ -1304,10 +1554,12 @@ TALER_TESTING_make_trait_peer_key * Obtain a public key from a "peer". Used e.g. to obtain * a merchant's public key to use backend's API. * - * @param index (tipically zero) which key to return if they - * exist in an array. + * @param cmd command offering the key. + * @param index (tipically zero) which key to return if there + * are multiple on offer. * @param pub[out] set to the key coming from @a cmd. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_peer_key_pub @@ -1316,11 +1568,14 @@ TALER_TESTING_get_trait_peer_key_pub const struct GNUNET_CRYPTO_EddsaPublicKey **pub); /** - * @param index (tipically zero) which key to return if they - * exist in an array. - * @param pub which object should be returned + * Offer public key. + * + * @param index (tipically zero) which key to return if there + * are multiple on offer. NOTE: if one key is offered, it + * is mandatory to set this as zero. + * @param pub which object should be returned. * - * @return the trait, to be put in the traits array of the command + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_peer_key_pub @@ -1330,11 +1585,13 @@ TALER_TESTING_make_trait_peer_key_pub /** * Obtain a transfer subject from @a cmd. * - * @param cmd command to extract trait from - * @param index always (?) zero, as one command sticks - * to one bank transfer - * @param transfer_subject[out] where to write the wire details. - * @return #GNUNET_OK on success + * @param cmd command to extract the subject from. + * @param index index number associated with the transfer + * subject to offer. + * @param transfer_subject[out] where to write the offered + * transfer subject. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_transfer_subject @@ -1344,12 +1601,13 @@ TALER_TESTING_get_trait_transfer_subject /** - * Offer wire wire transfer subject in a trait. + * Offer transfer subject. + * + * @param index index number associated with the transfer + * subject being offered. + * @param transfer_subject transfer subject to offer. * - * @param index always (?) zero, as one command sticks - * to one bank account - * @param transfer_subject wire transfer subject to offer - * @return the trait, to be put in the traits array of the command + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_transfer_subject @@ -1373,10 +1631,12 @@ TALER_TESTING_get_trait_wtid struct TALER_WireTransferIdentifierRawP **wtid); /** - * @param index associate the object with this index - * @param wtid which object should be returned + * Offer a WTID. * - * @return the trait, to be put in the traits array of the command + * @param index associate the WTID with this index. + * @param wtid pointer to the WTID to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_wtid @@ -1387,10 +1647,11 @@ TALER_TESTING_make_trait_wtid /** * Offer amount in a trait. * - * @param index which amount is to be picked, in case - * multiple are offered. - * @param amount the amount to offer - * @return the trait, to be put in the traits array of the command + * @param index which amount is to be offered, + * in case multiple are offered. + * @param amount the amount to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_amount @@ -1400,11 +1661,12 @@ TALER_TESTING_make_trait_amount /** * Obtain an amount from @a cmd. * - * @param cmd command to extract trait from + * @param cmd command to extract the amount from. * @param index which amount is to be picked, in case * multiple are offered. * @param amount[out] where to write the wire details. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_amount @@ -1416,10 +1678,11 @@ TALER_TESTING_get_trait_amount /** * Offer url in a trait. * - * @param index which url is to be picked, in case - * multiple are offered. - * @param url the url to offer - * @return the trait, to be put in the traits array of the command + * @param index which url is to be picked, + * in case multiple are offered. + * @param url the url to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_url @@ -1429,11 +1692,12 @@ TALER_TESTING_make_trait_url /** * Obtain a url from @a cmd. * - * @param cmd command to extract trait from + * @param cmd command to extract the url from. * @param index which url is to be picked, in case * multiple are offered. - * @param amount[out] where to write the url. - * @return #GNUNET_OK on success + * @param url[out] where to write the url. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_url @@ -1445,11 +1709,12 @@ TALER_TESTING_get_trait_url /** * Obtain a order id from @a cmd. * - * @param cmd command to extract trait from + * @param cmd command to extract the order id from. * @param index which order id is to be picked, in case * multiple are offered. * @param order_id[out] where to write the order id. - * @return #GNUNET_OK on success + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_order_id @@ -1460,10 +1725,11 @@ TALER_TESTING_get_trait_order_id /** * Offer order id in a trait. * - * @param index which order id is to be picked, in case - * multiple are offered. - * @param order_id the url to offer - * @return the trait, to be put in the traits array of the command + * @param index which order id is to be offered, + * in case multiple are offered. + * @param order_id the order id to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_order_id @@ -1474,47 +1740,58 @@ TALER_TESTING_make_trait_order_id /** * Obtain an amount from a @a cmd. * - * @param cmd command to extract trait from - * @param selector which amount to pick if @a cmd has multiple + * @param cmd command to extract the amount from. + * @param index which amount to pick if @a cmd has multiple * on offer - * @param amount[out] set to the amount + * @param amount[out] set to the amount. + * * @return #GNUNET_OK on success */ int -TALER_TESTING_get_trait_amount_obj ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct TALER_Amount **amount); - +TALER_TESTING_get_trait_amount_obj + (const struct TALER_TESTING_Command *cmd, + unsigned int index, + const struct TALER_Amount **amount); +/** + * Offer amount. + * + * @param index which amount to offer, in case there are + * multiple available. + * @param amount the amount to offer. + * + * @return the trait. + */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_amount_obj ( - unsigned int index, - const struct TALER_Amount *amount); +TALER_TESTING_make_trait_amount_obj + (unsigned int index, + const struct TALER_Amount *amount); /** - * Offer reference to a bank transfer which has been - * rejected. + * Offer a "reject" CMD reference. * - * @param index which reference is to be picked, in case - * multiple are offered. - * @param rejected_reference the url to offer - * @return the trait, to be put in the traits array of the command + * @param index which reference is to be offered, + * in case multiple are offered. + * @param rejected_reference the reference to offer. + * + * @return the trait. */ struct TALER_TESTING_Trait TALER_TESTING_make_trait_rejected (unsigned int index, const char *rejected); + /** - * Obtain the reference from a bank transfer which has - * been rejected. + * Obtain the reference to a "reject" CMD. Usually offered + * by _rejected_ bank transfers. * - * @param cmd command to extract trait from + * @param cmd command to extract the reference from. * @param index which reference is to be picked, in case * multiple are offered. - * @param rejected_reference[out] where to write the order id. - * @return #GNUNET_OK on success + * @param rejected_reference[out] where to write the reference. + * + * @return #GNUNET_OK on success. */ int TALER_TESTING_get_trait_rejected |