add separate commands for closer/transfer steps, modify test cases to use new commands

This commit is contained in:
Christian Grothoff 2020-03-12 10:53:49 +01:00
parent b91fcbb92f
commit 8d5f42fe0c
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
8 changed files with 453 additions and 68 deletions

View File

@ -1100,32 +1100,57 @@ TALER_TESTING_cmd_exec_wirewatch (const char *label,
* @param label command label.
* @param config_filename configuration file for the
* aggregator to use.
*
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_aggregator (const char *label,
const char *config_filename);
/**
* Make a "closer" CMD.
*
* @param label command label.
* @param config_filename configuration file for the
* closer to use.
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_closer (const char *label,
const char *config_filename);
/**
* Make a "transfer" CMD.
*
* @param label command label.
* @param config_filename configuration file for the
* transfer to use.
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_transfer (const char *label,
const char *config_filename);
/**
* Make the "keyup" CMD.
*
* @param label command label.
* @param config_filename configuration filename.
*
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_keyup (const char *label,
const char *config_filename);
/**
* Make the "keyup" CMD, with "--timestamp" option.
*
* @param label command label.
* @param config_filename configuration filename.
* @param now Unix timestamp representing the fake "now".
*
* @return the command.
*/
struct TALER_TESTING_Command
@ -1161,7 +1186,6 @@ TALER_TESTING_cmd_check_keys_with_now (const char *label,
*
* @param label command label
* @param config_filename configuration filename
*
* @return the command.
*/
struct TALER_TESTING_Command
@ -1196,7 +1220,6 @@ TALER_TESTING_cmd_withdraw_amount (const char *label,
* 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
@ -1228,7 +1251,6 @@ TALER_TESTING_cmd_withdraw_with_retry (struct TALER_TESTING_Command cmd);
* @param expected_fee the fee the exchange should charge.
* @param expected_response_code the HTTP response the exchange
* should return.
*
* @return the command.
*/
struct TALER_TESTING_Command
@ -1239,13 +1261,12 @@ TALER_TESTING_cmd_wire (const char *label,
/**
* Create a "reserve status" command.
* Create a GET "reserves" command.
*
* @param label the command label.
* @param reserve_reference reference to the reserve to check.
* @param expected_balance expected balance for the reserve.
* @param expected_response_code expected HTTP response code.
*
* @return the command.
*/
struct TALER_TESTING_Command
@ -1271,7 +1292,6 @@ TALER_TESTING_cmd_status (const char *label,
* @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 command.
*/
struct TALER_TESTING_Command

View File

@ -51,9 +51,11 @@ libtalertesting_la_SOURCES = \
testing_api_cmd_check_keys.c \
testing_api_cmd_deposit.c \
testing_api_cmd_exec_aggregator.c \
testing_api_cmd_exec_wirewatch.c \
testing_api_cmd_exec_keyup.c \
testing_api_cmd_exec_auditor-sign.c \
testing_api_cmd_exec_closer.c \
testing_api_cmd_exec_keyup.c \
testing_api_cmd_exec_transfer.c \
testing_api_cmd_exec_wirewatch.c \
testing_api_cmd_recoup.c \
testing_api_cmd_refund.c \
testing_api_cmd_refresh.c \

View File

@ -64,13 +64,15 @@ static struct TALER_TESTING_BankConfiguration bc;
TALER_TESTING_cmd_exec_wirewatch (label, CONFIG_FILE)
/**
* Execute the taler-exchange-aggregator command with
* Execute the taler-exchange-aggregator, closer and transfer commands with
* our configuration file.
*
* @param label label to use for the command.
*/
#define CMD_EXEC_AGGREGATOR(label) \
TALER_TESTING_cmd_exec_aggregator (label, CONFIG_FILE)
TALER_TESTING_cmd_exec_aggregator (label, CONFIG_FILE), \
TALER_TESTING_cmd_exec_closer (label, CONFIG_FILE), \
TALER_TESTING_cmd_exec_transfer (label, CONFIG_FILE)
/**
* Run wire transfer of funds from some user's account to the

View File

@ -65,13 +65,16 @@ static struct TALER_TESTING_BankConfiguration bc;
TALER_TESTING_cmd_exec_wirewatch (label, CONFIG_FILE)
/**
* Execute the taler-exchange-aggregator command with
* Execute the taler-exchange-aggregator, closer and transfer commands with
* our configuration file.
*
* @param label label to use for the command.
*/
#define CMD_EXEC_AGGREGATOR(label) \
TALER_TESTING_cmd_exec_aggregator (label, CONFIG_FILE)
TALER_TESTING_cmd_exec_aggregator (label "-aggregator", CONFIG_FILE), \
TALER_TESTING_cmd_exec_closer (label "-closer", CONFIG_FILE), \
TALER_TESTING_cmd_exec_transfer (label "-transfer", CONFIG_FILE)
/**
* Run wire transfer of funds from some user's account to the
@ -547,7 +550,8 @@ run (void *cls,
* Run transfers. This will do the transfer as refund deadline
* was 0, except of course because the refund succeeded, the
* transfer should no longer be done.
*/CMD_EXEC_AGGREGATOR ("run-aggregator-3b"),
*///
CMD_EXEC_AGGREGATOR ("run-aggregator-3b"),
/* check that aggregator didn't do anything, as expected */
TALER_TESTING_cmd_check_bank_empty ("check-refund-fast-not-run"),
TALER_TESTING_cmd_end ()
@ -621,8 +625,10 @@ run (void *cls,
TALER_TESTING_cmd_exec_wirewatch ("short-lived-aggregation",
CONFIG_FILE_EXPIRE_RESERVE_NOW),
TALER_TESTING_cmd_exec_aggregator ("close-reserves",
CONFIG_FILE_EXPIRE_RESERVE_NOW),
TALER_TESTING_cmd_exec_closer ("close-reserves",
CONFIG_FILE_EXPIRE_RESERVE_NOW),
TALER_TESTING_cmd_exec_transfer ("close-reserves-transfer",
CONFIG_FILE_EXPIRE_RESERVE_NOW),
TALER_TESTING_cmd_status ("short-lived-status",
"short-lived-reserve",
@ -740,8 +746,8 @@ run (void *cls,
= TALER_TESTING_cmd_exec_wirewatch ("reserve-open-close-wirewatch",
CONFIG_FILE_EXPIRE_RESERVE_NOW);
reserve_open_close[(i * RESERVE_OPEN_CLOSE_CHUNK) + 2]
= TALER_TESTING_cmd_exec_aggregator ("reserve-open-close-aggregation",
CONFIG_FILE_EXPIRE_RESERVE_NOW);
= TALER_TESTING_cmd_exec_closer ("reserve-open-close-aggregation",
CONFIG_FILE_EXPIRE_RESERVE_NOW);
reserve_open_close[(i * RESERVE_OPEN_CLOSE_CHUNK) + 3]
= TALER_TESTING_cmd_status ("reserve-open-close-status",
"reserve-open-close-key",

View File

@ -58,6 +58,19 @@ static char *config_filename;
#define USER42_ACCOUNT "42"
/**
* Execute the taler-exchange-aggregator, closer and transfer commands with
* our configuration file.
*
* @param label label to use for the command.
* @param cfg_fn configuration file to use
*/
#define CMD_EXEC_AGGREGATOR(label, cfg_fn) \
TALER_TESTING_cmd_exec_aggregator (label "-aggregator", cfg_fn), \
TALER_TESTING_cmd_exec_closer (label "-closer", cfg_fn), \
TALER_TESTING_cmd_exec_transfer (label "-transfer", cfg_fn)
/**
* Collects all the tests.
*/
@ -68,8 +81,8 @@ run (void *cls,
struct TALER_TESTING_Command all[] = {
// check no aggregation happens on a empty database
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-on-empty-db",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-on-empty-db",
config_filename),
TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-on-start"),
/* check aggregation happens on the simplest case:
@ -81,8 +94,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:1",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-on-deposit-1",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-on-deposit-1",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-1",
ec.exchange_url,
@ -108,8 +121,8 @@ run (void *cls,
"EUR:1",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-2",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-2",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-2",
ec.exchange_url,
@ -140,8 +153,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:1",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-3",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-3",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-3a",
ec.exchange_url,
@ -179,15 +192,15 @@ run (void *cls,
5),
"EUR:0.2",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-4-early",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-4-early",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-4-fast"),
TALER_TESTING_cmd_sleep ("wait (5s)", 5),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-4-delayed",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-4-delayed",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-4",
ec.exchange_url,
"EUR:0.19",
@ -214,15 +227,15 @@ run (void *cls,
5),
"EUR:0.2",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-5-early",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-5-early",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-5-early"),
TALER_TESTING_cmd_sleep ("wait (5s)", 5),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-5-delayed",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-5-delayed",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-5",
ec.exchange_url,
"EUR:0.19",
@ -236,8 +249,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.102",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-6a-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-6a-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-6a-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-6b",
@ -254,8 +267,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.102",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-6c-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-6c-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-6c-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-6d",
@ -265,8 +278,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.102",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-6d-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-6d-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-6d-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-6e",
@ -276,8 +289,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.112",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-6e",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-6e",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-6",
ec.exchange_url,
"EUR:0.01",
@ -292,8 +305,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.109",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-7a-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-7a-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-7a-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-7b",
@ -303,8 +316,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.119",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-7-profit",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-7-profit",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-7",
ec.exchange_url,
"EUR:0.01",
@ -319,8 +332,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.122",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-7-loss",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-7-loss",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-7",
ec.exchange_url,
"EUR:0.01",
@ -337,8 +350,8 @@ run (void *cls,
5),
"EUR:0.109",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-8a-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-8a-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-8a-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-8b",
@ -350,8 +363,8 @@ run (void *cls,
5),
"EUR:0.109",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-8b-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-8b-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-8b-tiny"),
@ -363,8 +376,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.122",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-8",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-8",
config_filename),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-8",
ec.exchange_url,
"EUR:0.03",
@ -381,8 +394,8 @@ run (void *cls,
5),
"EUR:0.104",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-9a-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-9a-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-9a-tiny"),
TALER_TESTING_cmd_insert_deposit ("do-deposit-9b",
@ -394,8 +407,8 @@ run (void *cls,
5),
"EUR:0.105",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-9b-tiny",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-9b-tiny",
config_filename),
TALER_TESTING_cmd_check_bank_empty (
"expect-empty-transactions-after-9b-tiny"),
@ -407,8 +420,8 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:0.112",
"EUR:0.1"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-deposit-9",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-9",
config_filename),
/* 0.009 + 0.009 + 0.022 - 0.001 - 0.002 - 0.008 = 0.029 => 0.02 */
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-9",
ec.exchange_url,

View File

@ -48,6 +48,19 @@ static struct TALER_TESTING_ExchangeConfiguration ec;
*/
static char *config_filename;
/**
* Execute the taler-exchange-aggregator, closer and transfer commands with
* our configuration file.
*
* @param label label to use for the command.
*/
#define CMD_EXEC_AGGREGATOR(label) \
TALER_TESTING_cmd_exec_aggregator (label "-aggregator", config_filename), \
TALER_TESTING_cmd_exec_closer (label "-closer", config_filename), \
TALER_TESTING_cmd_exec_transfer (label "-transfer", config_filename)
static struct TALER_TESTING_Command
transfer_to_exchange (const char *label,
const char *amount)
@ -71,8 +84,7 @@ run (void *cls,
{
struct TALER_TESTING_Command all[] = {
TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-on-start"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-on-empty",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-on-empty"),
TALER_TESTING_cmd_exec_wirewatch ("run-wirewatch-on-empty",
config_filename),
TALER_TESTING_cmd_check_bank_empty ("expect-transfers-empty-after-dry-run"),
@ -89,14 +101,12 @@ run (void *cls,
bc.exchange_payto, // credit
"run-transfer-good-to-exchange"),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-non-expired-reserve",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-non-expired-reserve"),
TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-1"),
TALER_TESTING_cmd_sleep ("wait (5s)",
5),
TALER_TESTING_cmd_exec_aggregator ("run-aggregator-on-expired-reserve",
config_filename),
CMD_EXEC_AGGREGATOR ("run-aggregator-on-expired-reserve"),
TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-1",
ec.exchange_url,
"EUR:4.99",

View File

@ -0,0 +1,166 @@
/*
This file is part of TALER
Copyright (C) 2018 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your
option) any later version.
TALER is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with TALER; see the file COPYING. If not,
see <http://www.gnu.org/licenses/>
*/
/**
* @file testing/testing_api_cmd_exec_closer.c
* @brief run the taler-exchange-closer command
* @author Marcello Stanisci
*/
#include "platform.h"
#include "taler_json_lib.h"
#include <gnunet/gnunet_curl_lib.h>
#include "taler_signatures.h"
#include "taler_testing_lib.h"
/**
* State for a "closer" CMD.
*/
struct CloserState
{
/**
* Closer process.
*/
struct GNUNET_OS_Process *closer_proc;
/**
* Configuration file used by the closer.
*/
const char *config_filename;
};
/**
* Run the command. Use the `taler-exchange-closer' program.
*
* @param cls closure.
* @param cmd command being run.
* @param is interpreter state.
*/
static void
closer_run (void *cls,
const struct TALER_TESTING_Command *cmd,
struct TALER_TESTING_Interpreter *is)
{
struct CloserState *as = cls;
as->closer_proc
= GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_ALL,
NULL, NULL, NULL,
"taler-exchange-closer",
"taler-exchange-closer",
"-c", as->config_filename,
"-t", /* exit when done */
NULL);
if (NULL == as->closer_proc)
{
GNUNET_break (0);
TALER_TESTING_interpreter_fail (is);
return;
}
TALER_TESTING_wait_for_sigchld (is);
}
/**
* Free the state of a "closer" CMD, and possibly kill its
* process if it did not terminate correctly.
*
* @param cls closure.
* @param cmd the command being freed.
*/
static void
closer_cleanup (void *cls,
const struct TALER_TESTING_Command *cmd)
{
struct CloserState *as = cls;
if (NULL != as->closer_proc)
{
GNUNET_break (0 ==
GNUNET_OS_process_kill (as->closer_proc,
SIGKILL));
GNUNET_OS_process_wait (as->closer_proc);
GNUNET_OS_process_destroy (as->closer_proc);
as->closer_proc = NULL;
}
GNUNET_free (as);
}
/**
* Offer "closer" CMD internal data to other commands.
*
* @param cls closure.
* @param[out] ret result.
* @param trait name of the trait.
* @param index index number of the object to offer.
* @return #GNUNET_OK on success
*/
static int
closer_traits (void *cls,
const void **ret,
const char *trait,
unsigned int index)
{
struct CloserState *as = cls;
struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_process (0, &as->closer_proc),
TALER_TESTING_trait_end ()
};
return TALER_TESTING_get_trait (traits,
ret,
trait,
index);
}
/**
* Make a "closer" CMD.
*
* @param label command label.
* @param config_filename configuration file for the
* closer to use.
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_closer (const char *label,
const char *config_filename)
{
struct CloserState *as;
as = GNUNET_new (struct CloserState);
as->config_filename = config_filename;
{
struct TALER_TESTING_Command cmd = {
.cls = as,
.label = label,
.run = &closer_run,
.cleanup = &closer_cleanup,
.traits = &closer_traits
};
return cmd;
}
}
/* end of testing_api_cmd_exec_closer.c */

View File

@ -0,0 +1,166 @@
/*
This file is part of TALER
Copyright (C) 2018 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your
option) any later version.
TALER is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with TALER; see the file COPYING. If not,
see <http://www.gnu.org/licenses/>
*/
/**
* @file testing/testing_api_cmd_exec_transfer.c
* @brief run the taler-exchange-transfer command
* @author Marcello Stanisci
*/
#include "platform.h"
#include "taler_json_lib.h"
#include <gnunet/gnunet_curl_lib.h>
#include "taler_signatures.h"
#include "taler_testing_lib.h"
/**
* State for a "transfer" CMD.
*/
struct TransferState
{
/**
* Transfer process.
*/
struct GNUNET_OS_Process *transfer_proc;
/**
* Configuration file used by the transfer.
*/
const char *config_filename;
};
/**
* Run the command. Use the `taler-exchange-transfer' program.
*
* @param cls closure.
* @param cmd command being run.
* @param is interpreter state.
*/
static void
transfer_run (void *cls,
const struct TALER_TESTING_Command *cmd,
struct TALER_TESTING_Interpreter *is)
{
struct TransferState *as = cls;
as->transfer_proc
= GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_ALL,
NULL, NULL, NULL,
"taler-exchange-transfer",
"taler-exchange-transfer",
"-c", as->config_filename,
"-t", /* exit when done */
NULL);
if (NULL == as->transfer_proc)
{
GNUNET_break (0);
TALER_TESTING_interpreter_fail (is);
return;
}
TALER_TESTING_wait_for_sigchld (is);
}
/**
* Free the state of a "transfer" CMD, and possibly kill its
* process if it did not terminate correctly.
*
* @param cls closure.
* @param cmd the command being freed.
*/
static void
transfer_cleanup (void *cls,
const struct TALER_TESTING_Command *cmd)
{
struct TransferState *as = cls;
if (NULL != as->transfer_proc)
{
GNUNET_break (0 ==
GNUNET_OS_process_kill (as->transfer_proc,
SIGKILL));
GNUNET_OS_process_wait (as->transfer_proc);
GNUNET_OS_process_destroy (as->transfer_proc);
as->transfer_proc = NULL;
}
GNUNET_free (as);
}
/**
* Offer "transfer" CMD internal data to other commands.
*
* @param cls closure.
* @param[out] ret result.
* @param trait name of the trait.
* @param index index number of the object to offer.
* @return #GNUNET_OK on success
*/
static int
transfer_traits (void *cls,
const void **ret,
const char *trait,
unsigned int index)
{
struct TransferState *as = cls;
struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_process (0, &as->transfer_proc),
TALER_TESTING_trait_end ()
};
return TALER_TESTING_get_trait (traits,
ret,
trait,
index);
}
/**
* Make a "transfer" CMD.
*
* @param label command label.
* @param config_filename configuration file for the
* transfer to use.
* @return the command.
*/
struct TALER_TESTING_Command
TALER_TESTING_cmd_exec_transfer (const char *label,
const char *config_filename)
{
struct TransferState *as;
as = GNUNET_new (struct TransferState);
as->config_filename = config_filename;
{
struct TALER_TESTING_Command cmd = {
.cls = as,
.label = label,
.run = &transfer_run,
.cleanup = &transfer_cleanup,
.traits = &transfer_traits
};
return cmd;
}
}
/* end of testing_api_cmd_exec_transfer.c */