-fix FTBFS in testing/
This commit is contained in:
parent
193027862d
commit
2078dd1bfb
1
src/testing/.gitignore
vendored
1
src/testing/.gitignore
vendored
@ -32,3 +32,4 @@ test_exchange_api_keys_cherry_picking_home/.local/share/taler/exchange-secmod-rs
|
|||||||
test_taler_exchange_httpd_home/.local/share/taler/exchange-offline/secm_tofus.pub
|
test_taler_exchange_httpd_home/.local/share/taler/exchange-offline/secm_tofus.pub
|
||||||
test_taler_exchange_httpd_home/.local/share/taler/exchange-secmod-eddsa/
|
test_taler_exchange_httpd_home/.local/share/taler/exchange-secmod-eddsa/
|
||||||
test_taler_exchange_httpd_home/.local/share/taler/exchange-secmod-rsa/
|
test_taler_exchange_httpd_home/.local/share/taler/exchange-secmod-rsa/
|
||||||
|
test_kyc_api
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2018 Taler Systems SA
|
Copyright (C) 2014-2021 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify
|
TALER is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as
|
it under the terms of the GNU General Public License as
|
||||||
@ -113,22 +113,15 @@ batch_cleanup (void *cls,
|
|||||||
* @param index index number of the object to offer.
|
* @param index index number of the object to offer.
|
||||||
* @return #GNUNET_OK on success.
|
* @return #GNUNET_OK on success.
|
||||||
*/
|
*/
|
||||||
static int
|
static enum GNUNET_GenericReturnValue
|
||||||
batch_traits (void *cls,
|
batch_traits (void *cls,
|
||||||
const void **ret,
|
const void **ret,
|
||||||
const char *trait,
|
const char *trait,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
#define CURRENT_CMD_INDEX 0
|
|
||||||
#define BATCH_INDEX 1
|
|
||||||
|
|
||||||
struct BatchState *bs = cls;
|
struct BatchState *bs = cls;
|
||||||
|
|
||||||
struct TALER_TESTING_Trait traits[] = {
|
struct TALER_TESTING_Trait traits[] = {
|
||||||
TALER_TESTING_make_trait_cmd
|
TALER_TESTING_make_trait_batch_cmds (&bs->batch),
|
||||||
(CURRENT_CMD_INDEX, &bs->batch[bs->batch_ip]),
|
|
||||||
TALER_TESTING_make_trait_cmd
|
|
||||||
(BATCH_INDEX, bs->batch),
|
|
||||||
TALER_TESTING_trait_end ()
|
TALER_TESTING_trait_end ()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,18 +133,6 @@ batch_traits (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a "batch" command. Such command takes a
|
|
||||||
* end_CMD-terminated array of CMDs and executed them.
|
|
||||||
* Once it hits the end CMD, it passes the control
|
|
||||||
* to the next top-level CMD, regardless of it being
|
|
||||||
* another batch or ordinary CMD.
|
|
||||||
*
|
|
||||||
* @param label the command label.
|
|
||||||
* @param batch array of CMDs to execute.
|
|
||||||
*
|
|
||||||
* @return the command.
|
|
||||||
*/
|
|
||||||
struct TALER_TESTING_Command
|
struct TALER_TESTING_Command
|
||||||
TALER_TESTING_cmd_batch (const char *label,
|
TALER_TESTING_cmd_batch (const char *label,
|
||||||
struct TALER_TESTING_Command *batch)
|
struct TALER_TESTING_Command *batch)
|
||||||
@ -185,68 +166,29 @@ TALER_TESTING_cmd_batch (const char *label,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Advance internal pointer to next command.
|
|
||||||
*
|
|
||||||
* @param is interpreter state.
|
|
||||||
* @param cmd batch to advance
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is,
|
TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is)
|
||||||
struct TALER_TESTING_Command *par,
|
|
||||||
struct TALER_TESTING_Command *cmd)
|
|
||||||
{
|
{
|
||||||
struct BatchState *bs = cmd->cls;
|
struct BatchState *bs = is->commands[is->ip].cls;
|
||||||
struct TALER_TESTING_Command *chld;
|
|
||||||
|
|
||||||
if (NULL == bs->batch[bs->batch_ip].label)
|
if (NULL == bs->batch[bs->batch_ip].label)
|
||||||
{
|
{
|
||||||
if (NULL == par)
|
is->commands[is->ip].finish_time = GNUNET_TIME_absolute_get ();
|
||||||
{
|
is->ip++;
|
||||||
is->commands[is->ip].finish_time = GNUNET_TIME_absolute_get ();
|
|
||||||
is->ip++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
struct BatchState *ps = par->cls;
|
|
||||||
|
|
||||||
cmd->finish_time = GNUNET_TIME_absolute_get ();
|
|
||||||
ps->batch_ip++;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
chld = &bs->batch[bs->batch_ip];
|
bs->batch[bs->batch_ip].finish_time = GNUNET_TIME_absolute_get ();
|
||||||
if (TALER_TESTING_cmd_is_batch (chld))
|
bs->batch_ip++;
|
||||||
{
|
|
||||||
TALER_TESTING_cmd_batch_next (is,
|
|
||||||
cmd,
|
|
||||||
chld);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bs->batch[bs->batch_ip].finish_time = GNUNET_TIME_absolute_get ();
|
|
||||||
bs->batch_ip++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
bool
|
||||||
* Test if this command is a batch command.
|
|
||||||
*
|
|
||||||
* @return false if not, true if it is a batch command
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd)
|
TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd)
|
||||||
{
|
{
|
||||||
return cmd->run == &batch_run;
|
return cmd->run == &batch_run;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Obtain what command the batch is at.
|
|
||||||
*
|
|
||||||
* @return cmd current batch command
|
|
||||||
*/
|
|
||||||
struct TALER_TESTING_Command *
|
struct TALER_TESTING_Command *
|
||||||
TALER_TESTING_cmd_batch_get_current (const struct TALER_TESTING_Command *cmd)
|
TALER_TESTING_cmd_batch_get_current (const struct TALER_TESTING_Command *cmd)
|
||||||
{
|
{
|
||||||
@ -257,12 +199,6 @@ TALER_TESTING_cmd_batch_get_current (const struct TALER_TESTING_Command *cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set what command the batch should be at.
|
|
||||||
*
|
|
||||||
* @param cmd current batch command
|
|
||||||
* @param new_ip where to move the IP
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd,
|
TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd,
|
||||||
unsigned int new_ip)
|
unsigned int new_ip)
|
||||||
|
@ -36,49 +36,6 @@
|
|||||||
*/
|
*/
|
||||||
static struct GNUNET_DISK_PipeHandle *sigpipe;
|
static struct GNUNET_DISK_PipeHandle *sigpipe;
|
||||||
|
|
||||||
|
|
||||||
const struct TALER_TESTING_Command *
|
|
||||||
lookup_helper (const struct TALER_TESTING_Command *cmd,
|
|
||||||
const char *label)
|
|
||||||
{
|
|
||||||
#define BATCH_INDEX 1
|
|
||||||
struct TALER_TESTING_Command *batch;
|
|
||||||
struct TALER_TESTING_Command *current;
|
|
||||||
struct TALER_TESTING_Command *icmd;
|
|
||||||
const struct TALER_TESTING_Command *match;
|
|
||||||
|
|
||||||
current = TALER_TESTING_cmd_batch_get_current (cmd);
|
|
||||||
GNUNET_assert (GNUNET_OK ==
|
|
||||||
TALER_TESTING_get_trait_cmd (cmd,
|
|
||||||
BATCH_INDEX,
|
|
||||||
&batch));
|
|
||||||
/* We must do the loop forward, but we can find the last match */
|
|
||||||
match = NULL;
|
|
||||||
for (unsigned int j = 0;
|
|
||||||
NULL != (icmd = &batch[j])->label;
|
|
||||||
j++)
|
|
||||||
{
|
|
||||||
if (TALER_TESTING_cmd_is_batch (icmd))
|
|
||||||
{
|
|
||||||
const struct TALER_TESTING_Command *imatch;
|
|
||||||
|
|
||||||
imatch = lookup_helper (icmd,
|
|
||||||
label);
|
|
||||||
if (NULL != imatch)
|
|
||||||
match = imatch;
|
|
||||||
}
|
|
||||||
if ( (current != icmd) &&
|
|
||||||
(NULL != icmd->label) &&
|
|
||||||
(0 == strcmp (icmd->label,
|
|
||||||
label)) )
|
|
||||||
match = icmd;
|
|
||||||
if (current == icmd)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return match;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lookup command by label.
|
* Lookup command by label.
|
||||||
*
|
*
|
||||||
@ -109,12 +66,30 @@ TALER_TESTING_interpreter_lookup_command (struct TALER_TESTING_Interpreter *is,
|
|||||||
|
|
||||||
if (TALER_TESTING_cmd_is_batch (cmd))
|
if (TALER_TESTING_cmd_is_batch (cmd))
|
||||||
{
|
{
|
||||||
const struct TALER_TESTING_Command *ret;
|
struct TALER_TESTING_Command **batch;
|
||||||
|
struct TALER_TESTING_Command *current;
|
||||||
|
struct TALER_TESTING_Command *icmd;
|
||||||
|
const struct TALER_TESTING_Command *match;
|
||||||
|
|
||||||
ret = lookup_helper (cmd,
|
current = TALER_TESTING_cmd_batch_get_current (cmd);
|
||||||
label);
|
GNUNET_assert (GNUNET_OK ==
|
||||||
if (NULL != ret)
|
TALER_TESTING_get_trait_batch_cmds (cmd,
|
||||||
return ret;
|
&batch));
|
||||||
|
/* We must do the loop forward, but we can find the last match */
|
||||||
|
match = NULL;
|
||||||
|
for (unsigned int j = 0;
|
||||||
|
NULL != (icmd = &(*batch)[j])->label;
|
||||||
|
j++)
|
||||||
|
{
|
||||||
|
if (current == icmd)
|
||||||
|
break; /* do not go past current command */
|
||||||
|
if ( (NULL != icmd->label) &&
|
||||||
|
(0 == strcmp (icmd->label,
|
||||||
|
label)) )
|
||||||
|
match = icmd;
|
||||||
|
}
|
||||||
|
if (NULL != match)
|
||||||
|
return match;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||||
@ -143,15 +118,6 @@ TALER_TESTING_interpreter_get_fakebank (struct TALER_TESTING_Interpreter *is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run tests starting the "fakebank" first. The "fakebank"
|
|
||||||
* is a C minimalist version of the human-oriented Python bank,
|
|
||||||
* which is also part of the Taler project.
|
|
||||||
*
|
|
||||||
* @param is pointer to the interpreter state
|
|
||||||
* @param commands the list of commands to execute
|
|
||||||
* @param bank_url the url the fakebank is supposed to run on
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
|
TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
|
||||||
struct TALER_TESTING_Command *commands,
|
struct TALER_TESTING_Command *commands,
|
||||||
@ -189,9 +155,6 @@ static void
|
|||||||
interpreter_run (void *cls);
|
interpreter_run (void *cls);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Current command is done, run the next one.
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is)
|
TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is)
|
||||||
{
|
{
|
||||||
@ -203,9 +166,7 @@ TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is)
|
|||||||
return; /* ignore, we already failed! */
|
return; /* ignore, we already failed! */
|
||||||
if (TALER_TESTING_cmd_is_batch (cmd))
|
if (TALER_TESTING_cmd_is_batch (cmd))
|
||||||
{
|
{
|
||||||
TALER_TESTING_cmd_batch_next (is,
|
TALER_TESTING_cmd_batch_next (is);
|
||||||
NULL,
|
|
||||||
cmd);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -228,11 +189,6 @@ TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Current command failed, clean up and fail the test case.
|
|
||||||
*
|
|
||||||
* @param is interpreter of the test
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_interpreter_fail (struct TALER_TESTING_Interpreter *is)
|
TALER_TESTING_interpreter_fail (struct TALER_TESTING_Interpreter *is)
|
||||||
{
|
{
|
||||||
@ -253,11 +209,6 @@ TALER_TESTING_interpreter_fail (struct TALER_TESTING_Interpreter *is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create command array terminator.
|
|
||||||
*
|
|
||||||
* @return a end-command.
|
|
||||||
*/
|
|
||||||
struct TALER_TESTING_Command
|
struct TALER_TESTING_Command
|
||||||
TALER_TESTING_cmd_end (void)
|
TALER_TESTING_cmd_end (void)
|
||||||
{
|
{
|
||||||
@ -268,9 +219,6 @@ TALER_TESTING_cmd_end (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Obtain current label.
|
|
||||||
*/
|
|
||||||
const char *
|
const char *
|
||||||
TALER_TESTING_interpreter_get_current_label (struct
|
TALER_TESTING_interpreter_get_current_label (struct
|
||||||
TALER_TESTING_Interpreter *is)
|
TALER_TESTING_Interpreter *is)
|
||||||
@ -418,17 +366,8 @@ maint_child_death (void *cls)
|
|||||||
enum GNUNET_OS_ProcessStatusType type;
|
enum GNUNET_OS_ProcessStatusType type;
|
||||||
unsigned long code;
|
unsigned long code;
|
||||||
|
|
||||||
if (TALER_TESTING_cmd_is_batch (cmd))
|
while (TALER_TESTING_cmd_is_batch (cmd))
|
||||||
{
|
cmd = TALER_TESTING_cmd_batch_get_current (cmd);
|
||||||
struct TALER_TESTING_Command *batch_cmd;
|
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_OK ==
|
|
||||||
TALER_TESTING_get_trait_cmd (cmd,
|
|
||||||
0,
|
|
||||||
&batch_cmd));
|
|
||||||
cmd = batch_cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Got SIGCHLD for `%s'.\n",
|
"Got SIGCHLD for `%s'.\n",
|
||||||
cmd->label);
|
cmd->label);
|
||||||
@ -441,7 +380,6 @@ maint_child_death (void *cls)
|
|||||||
sizeof (c)));
|
sizeof (c)));
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_TESTING_get_trait_process (cmd,
|
TALER_TESTING_get_trait_process (cmd,
|
||||||
0,
|
|
||||||
&processp))
|
&processp))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -494,12 +432,6 @@ maint_child_death (void *cls)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wait until we receive SIGCHLD signal.
|
|
||||||
* Then obtain the process trait of the current
|
|
||||||
* command, wait on the the zombie and continue
|
|
||||||
* with the next command.
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is)
|
TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is)
|
||||||
{
|
{
|
||||||
@ -516,16 +448,6 @@ TALER_TESTING_wait_for_sigchld (struct TALER_TESTING_Interpreter *is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run the testsuite. Note, CMDs are copied into
|
|
||||||
* the interpreter state because they are _usually_
|
|
||||||
* defined into the "run" method that returns after
|
|
||||||
* having scheduled the test interpreter.
|
|
||||||
*
|
|
||||||
* @param is the interpreter state
|
|
||||||
* @param commands the list of command to execute
|
|
||||||
* @param timeout how long to wait
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
|
TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
|
||||||
struct TALER_TESTING_Command *commands,
|
struct TALER_TESTING_Command *commands,
|
||||||
@ -555,15 +477,6 @@ TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run the testsuite. Note, CMDs are copied into
|
|
||||||
* the interpreter state because they are _usually_
|
|
||||||
* defined into the "run" method that returns after
|
|
||||||
* having scheduled the test interpreter.
|
|
||||||
*
|
|
||||||
* @param is the interpreter state
|
|
||||||
* @param commands the list of command to execute
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
|
TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
|
||||||
struct TALER_TESTING_Command *commands)
|
struct TALER_TESTING_Command *commands)
|
||||||
@ -622,16 +535,6 @@ sighandler_child_death (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* "Canonical" cert_cb used when we are connecting to the
|
|
||||||
* Exchange.
|
|
||||||
*
|
|
||||||
* @param cls closure, typically, the "run" method containing
|
|
||||||
* all the commands to be run, and a closure for it.
|
|
||||||
* @param hr HTTP response details
|
|
||||||
* @param keys the exchange's keys.
|
|
||||||
* @param compat protocol compatibility information.
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
TALER_TESTING_cert_cb (void *cls,
|
TALER_TESTING_cert_cb (void *cls,
|
||||||
const struct TALER_EXCHANGE_HttpResponse *hr,
|
const struct TALER_EXCHANGE_HttpResponse *hr,
|
||||||
@ -900,25 +803,6 @@ load_urls (struct TALER_TESTING_Interpreter *is)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Install signal handlers plus schedules the main wrapper
|
|
||||||
* around the "run" method.
|
|
||||||
*
|
|
||||||
* @param main_cb the "run" method which contains all the
|
|
||||||
* commands.
|
|
||||||
* @param main_cb_cls a closure for "run", typically NULL.
|
|
||||||
* @param cfg configuration to use
|
|
||||||
* @param exchanged exchange process handle: will be put in the
|
|
||||||
* state as some commands - e.g. revoke - need to send
|
|
||||||
* signal to it, for example to let it know to reload the
|
|
||||||
* key state.. if NULL, the interpreter will run without
|
|
||||||
* trying to connect to the exchange first.
|
|
||||||
* @param exchange_connect #GNUNET_YES if the test should connect
|
|
||||||
* to the exchange, #GNUNET_NO otherwise
|
|
||||||
* @return #GNUNET_OK if all is okay, != #GNUNET_OK otherwise.
|
|
||||||
* non-GNUNET_OK codes are #GNUNET_SYSERR most of the
|
|
||||||
* times.
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
TALER_TESTING_setup (TALER_TESTING_Main main_cb,
|
TALER_TESTING_setup (TALER_TESTING_Main main_cb,
|
||||||
void *main_cb_cls,
|
void *main_cb_cls,
|
||||||
|
Loading…
Reference in New Issue
Block a user