-fix FTBFS in testing/

This commit is contained in:
Christian Grothoff 2021-11-17 21:03:13 +01:00
parent 193027862d
commit 2078dd1bfb
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 37 additions and 216 deletions

View File

@ -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-secmod-eddsa/
test_taler_exchange_httpd_home/.local/share/taler/exchange-secmod-rsa/
test_kyc_api

View File

@ -1,6 +1,6 @@
/*
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
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.
* @return #GNUNET_OK on success.
*/
static int
static enum GNUNET_GenericReturnValue
batch_traits (void *cls,
const void **ret,
const char *trait,
unsigned int index)
{
#define CURRENT_CMD_INDEX 0
#define BATCH_INDEX 1
struct BatchState *bs = cls;
struct TALER_TESTING_Trait traits[] = {
TALER_TESTING_make_trait_cmd
(CURRENT_CMD_INDEX, &bs->batch[bs->batch_ip]),
TALER_TESTING_make_trait_cmd
(BATCH_INDEX, bs->batch),
TALER_TESTING_make_trait_batch_cmds (&bs->batch),
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
TALER_TESTING_cmd_batch (const char *label,
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
TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *par,
struct TALER_TESTING_Command *cmd)
TALER_TESTING_cmd_batch_next (struct TALER_TESTING_Interpreter *is)
{
struct BatchState *bs = cmd->cls;
struct TALER_TESTING_Command *chld;
struct BatchState *bs = is->commands[is->ip].cls;
if (NULL == bs->batch[bs->batch_ip].label)
{
if (NULL == par)
{
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++;
}
is->commands[is->ip].finish_time = GNUNET_TIME_absolute_get ();
is->ip++;
return;
}
chld = &bs->batch[bs->batch_ip];
if (TALER_TESTING_cmd_is_batch (chld))
{
TALER_TESTING_cmd_batch_next (is,
cmd,
chld);
}
else
{
bs->batch[bs->batch_ip].finish_time = GNUNET_TIME_absolute_get ();
bs->batch_ip++;
}
bs->batch[bs->batch_ip].finish_time = GNUNET_TIME_absolute_get ();
bs->batch_ip++;
}
/**
* Test if this command is a batch command.
*
* @return false if not, true if it is a batch command
*/
int
bool
TALER_TESTING_cmd_is_batch (const struct TALER_TESTING_Command *cmd)
{
return cmd->run == &batch_run;
}
/**
* Obtain what command the batch is at.
*
* @return cmd current batch command
*/
struct TALER_TESTING_Command *
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
TALER_TESTING_cmd_batch_set_current (const struct TALER_TESTING_Command *cmd,
unsigned int new_ip)

View File

@ -36,49 +36,6 @@
*/
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.
*
@ -109,12 +66,30 @@ TALER_TESTING_interpreter_lookup_command (struct TALER_TESTING_Interpreter *is,
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,
label);
if (NULL != ret)
return ret;
current = TALER_TESTING_cmd_batch_get_current (cmd);
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_batch_cmds (cmd,
&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,
@ -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
TALER_TESTING_run_with_fakebank (struct TALER_TESTING_Interpreter *is,
struct TALER_TESTING_Command *commands,
@ -189,9 +155,6 @@ static void
interpreter_run (void *cls);
/**
* Current command is done, run the next one.
*/
void
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! */
if (TALER_TESTING_cmd_is_batch (cmd))
{
TALER_TESTING_cmd_batch_next (is,
NULL,
cmd);
TALER_TESTING_cmd_batch_next (is);
}
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
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
TALER_TESTING_cmd_end (void)
{
@ -268,9 +219,6 @@ TALER_TESTING_cmd_end (void)
}
/**
* Obtain current label.
*/
const char *
TALER_TESTING_interpreter_get_current_label (struct
TALER_TESTING_Interpreter *is)
@ -418,17 +366,8 @@ maint_child_death (void *cls)
enum GNUNET_OS_ProcessStatusType type;
unsigned long code;
if (TALER_TESTING_cmd_is_batch (cmd))
{
struct TALER_TESTING_Command *batch_cmd;
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_cmd (cmd,
0,
&batch_cmd));
cmd = batch_cmd;
}
while (TALER_TESTING_cmd_is_batch (cmd))
cmd = TALER_TESTING_cmd_batch_get_current (cmd);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Got SIGCHLD for `%s'.\n",
cmd->label);
@ -441,7 +380,6 @@ maint_child_death (void *cls)
sizeof (c)));
if (GNUNET_OK !=
TALER_TESTING_get_trait_process (cmd,
0,
&processp))
{
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
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
TALER_TESTING_run2 (struct TALER_TESTING_Interpreter *is,
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
TALER_TESTING_run (struct TALER_TESTING_Interpreter *is,
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
TALER_TESTING_cert_cb (void *cls,
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
TALER_TESTING_setup (TALER_TESTING_Main main_cb,
void *main_cb_cls,