generate auditor signatures in exchange-lib testcase, and handle problem with bogus revocation keys during startup more gracefully by terminating instead of looping
This commit is contained in:
parent
3e5d200d95
commit
beee1fb689
@ -3648,6 +3648,7 @@ main (int argc,
|
||||
"taler-exchange-keyup",
|
||||
"taler-exchange-keyup",
|
||||
"-c", "test_exchange_api.conf",
|
||||
"-o", "auditor.in",
|
||||
NULL);
|
||||
if (NULL == proc)
|
||||
{
|
||||
@ -3657,6 +3658,27 @@ main (int argc,
|
||||
}
|
||||
GNUNET_OS_process_wait (proc);
|
||||
GNUNET_OS_process_destroy (proc);
|
||||
|
||||
proc = GNUNET_OS_start_process (GNUNET_NO,
|
||||
GNUNET_OS_INHERIT_STD_ALL,
|
||||
NULL, NULL, NULL,
|
||||
"taler-auditor-sign",
|
||||
"taler-auditor-sign",
|
||||
"-c", "test_exchange_api.conf",
|
||||
"-u", "http://auditor/",
|
||||
"-m", "98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG",
|
||||
"-r", "auditor.in",
|
||||
"-o", "test_exchange_api_home/.local/share/taler/auditors/auditor.out",
|
||||
NULL);
|
||||
if (NULL == proc)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Failed to run `taler-exchange-keyup`, is your PATH correct?\n");
|
||||
return 77;
|
||||
}
|
||||
GNUNET_OS_process_wait (proc);
|
||||
GNUNET_OS_process_destroy (proc);
|
||||
|
||||
proc = GNUNET_OS_start_process (GNUNET_NO,
|
||||
GNUNET_OS_INHERIT_STD_ALL,
|
||||
NULL, NULL, NULL,
|
||||
|
@ -58,6 +58,10 @@ CLOSING-FEE-2024 = EUR:0.01
|
||||
CLOSING-FEE-2025 = EUR:0.01
|
||||
CLOSING-FEE-2026 = EUR:0.01
|
||||
|
||||
[exchange_keys]
|
||||
# Keep it short so the test runs fast.
|
||||
LOOKAHEAD_SIGN = 12 h
|
||||
|
||||
[exchange-wire-test]
|
||||
# Enable 'test' for testing of the actual coin operations.
|
||||
ENABLE = YES
|
||||
|
@ -265,6 +265,34 @@ store_in_map (struct GNUNET_CONTAINER_MultiHashMap *map,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle a signal, writing relevant signal numbers to the pipe.
|
||||
*
|
||||
* @param signal_number the signal number
|
||||
*/
|
||||
static void
|
||||
handle_signal (int signal_number)
|
||||
{
|
||||
ssize_t res;
|
||||
char c = signal_number;
|
||||
|
||||
res = write (reload_pipe[1],
|
||||
&c,
|
||||
1);
|
||||
if ( (res < 0) &&
|
||||
(EINTR != errno) )
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return;
|
||||
}
|
||||
if (0 == res)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Iterator for (re)loading/initializing denomination keys.
|
||||
*
|
||||
@ -284,6 +312,7 @@ reload_keys_denom_iter (void *cls,
|
||||
{
|
||||
struct TEH_KS_StateHandle *ctx = cls;
|
||||
struct GNUNET_TIME_Absolute now;
|
||||
struct GNUNET_TIME_Absolute start;
|
||||
struct GNUNET_TIME_Absolute horizon;
|
||||
struct GNUNET_TIME_Absolute expire_deposit;
|
||||
struct GNUNET_HashCode denom_key_hash;
|
||||
@ -318,6 +347,8 @@ reload_keys_denom_iter (void *cls,
|
||||
|
||||
if (NULL != revocation_master_sig)
|
||||
{
|
||||
unsigned int thresh = 0;
|
||||
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Adding denomination key `%s' to revokation set\n",
|
||||
alias);
|
||||
@ -326,12 +357,19 @@ reload_keys_denom_iter (void *cls,
|
||||
if (GNUNET_NO == res)
|
||||
return GNUNET_OK;
|
||||
/* Try to insert DKI into DB until we succeed; note that if the DB
|
||||
failure is persistent, this code may loop forever (as there is no
|
||||
sane alternative, we cannot continue without the DKI being in the
|
||||
DB). */
|
||||
failure is persistent, we need to die, as we cannot continue
|
||||
without the DKI being in the DB). */
|
||||
res = GNUNET_SYSERR;
|
||||
while (GNUNET_OK != res)
|
||||
{
|
||||
thresh++;
|
||||
if (thresh > 16)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Giving up, this is fatal. Committing suicide via SIGTERM.\n");
|
||||
handle_signal (SIGTERM);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
res = TEH_plugin->start (TEH_plugin->cls,
|
||||
session);
|
||||
if (GNUNET_OK != res)
|
||||
@ -366,12 +404,13 @@ reload_keys_denom_iter (void *cls,
|
||||
return GNUNET_OK;
|
||||
}
|
||||
horizon = GNUNET_TIME_relative_to_absolute (TALER_EXCHANGE_conf_duration_provide ());
|
||||
if (GNUNET_TIME_absolute_ntoh (dki->issue.properties.start).abs_value_us >
|
||||
horizon.abs_value_us)
|
||||
start = GNUNET_TIME_absolute_ntoh (dki->issue.properties.start);
|
||||
if (start.abs_value_us > horizon.abs_value_us)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Skipping future denomination key `%s'\n",
|
||||
alias);
|
||||
"Skipping future denomination key `%s' (starts at %s)\n",
|
||||
alias,
|
||||
GNUNET_STRINGS_absolute_time_to_string (start));
|
||||
return GNUNET_OK;
|
||||
}
|
||||
|
||||
@ -956,34 +995,6 @@ TEH_KS_denomination_key_lookup (const struct TEH_KS_StateHandle *key_state,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle a signal, writing relevant signal numbers to the pipe.
|
||||
*
|
||||
* @param signal_number the signal number
|
||||
*/
|
||||
static void
|
||||
handle_signal (int signal_number)
|
||||
{
|
||||
ssize_t res;
|
||||
char c = signal_number;
|
||||
|
||||
res = write (reload_pipe[1],
|
||||
&c,
|
||||
1);
|
||||
if ( (res < 0) &&
|
||||
(EINTR != errno) )
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return;
|
||||
}
|
||||
if (0 == res)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Call #handle_signal() to pass the received signal via
|
||||
* the control pipe.
|
||||
|
Loading…
Reference in New Issue
Block a user