diff options
Diffstat (limited to 'src/include')
| -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 f7d3cca7..5997f898 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 | 
