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",
|
||||||
"taler-exchange-keyup",
|
"taler-exchange-keyup",
|
||||||
"-c", "test_exchange_api.conf",
|
"-c", "test_exchange_api.conf",
|
||||||
|
"-o", "auditor.in",
|
||||||
NULL);
|
NULL);
|
||||||
if (NULL == proc)
|
if (NULL == proc)
|
||||||
{
|
{
|
||||||
@ -3657,6 +3658,27 @@ main (int argc,
|
|||||||
}
|
}
|
||||||
GNUNET_OS_process_wait (proc);
|
GNUNET_OS_process_wait (proc);
|
||||||
GNUNET_OS_process_destroy (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,
|
proc = GNUNET_OS_start_process (GNUNET_NO,
|
||||||
GNUNET_OS_INHERIT_STD_ALL,
|
GNUNET_OS_INHERIT_STD_ALL,
|
||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
|
@ -58,6 +58,10 @@ CLOSING-FEE-2024 = EUR:0.01
|
|||||||
CLOSING-FEE-2025 = EUR:0.01
|
CLOSING-FEE-2025 = EUR:0.01
|
||||||
CLOSING-FEE-2026 = 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]
|
[exchange-wire-test]
|
||||||
# Enable 'test' for testing of the actual coin operations.
|
# Enable 'test' for testing of the actual coin operations.
|
||||||
ENABLE = YES
|
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.
|
* Iterator for (re)loading/initializing denomination keys.
|
||||||
*
|
*
|
||||||
@ -284,6 +312,7 @@ reload_keys_denom_iter (void *cls,
|
|||||||
{
|
{
|
||||||
struct TEH_KS_StateHandle *ctx = cls;
|
struct TEH_KS_StateHandle *ctx = cls;
|
||||||
struct GNUNET_TIME_Absolute now;
|
struct GNUNET_TIME_Absolute now;
|
||||||
|
struct GNUNET_TIME_Absolute start;
|
||||||
struct GNUNET_TIME_Absolute horizon;
|
struct GNUNET_TIME_Absolute horizon;
|
||||||
struct GNUNET_TIME_Absolute expire_deposit;
|
struct GNUNET_TIME_Absolute expire_deposit;
|
||||||
struct GNUNET_HashCode denom_key_hash;
|
struct GNUNET_HashCode denom_key_hash;
|
||||||
@ -318,6 +347,8 @@ reload_keys_denom_iter (void *cls,
|
|||||||
|
|
||||||
if (NULL != revocation_master_sig)
|
if (NULL != revocation_master_sig)
|
||||||
{
|
{
|
||||||
|
unsigned int thresh = 0;
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Adding denomination key `%s' to revokation set\n",
|
"Adding denomination key `%s' to revokation set\n",
|
||||||
alias);
|
alias);
|
||||||
@ -326,12 +357,19 @@ reload_keys_denom_iter (void *cls,
|
|||||||
if (GNUNET_NO == res)
|
if (GNUNET_NO == res)
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
/* Try to insert DKI into DB until we succeed; note that if the DB
|
/* 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
|
failure is persistent, we need to die, as we cannot continue
|
||||||
sane alternative, we cannot continue without the DKI being in the
|
without the DKI being in the DB). */
|
||||||
DB). */
|
|
||||||
res = GNUNET_SYSERR;
|
res = GNUNET_SYSERR;
|
||||||
while (GNUNET_OK != res)
|
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,
|
res = TEH_plugin->start (TEH_plugin->cls,
|
||||||
session);
|
session);
|
||||||
if (GNUNET_OK != res)
|
if (GNUNET_OK != res)
|
||||||
@ -366,12 +404,13 @@ reload_keys_denom_iter (void *cls,
|
|||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
}
|
}
|
||||||
horizon = GNUNET_TIME_relative_to_absolute (TALER_EXCHANGE_conf_duration_provide ());
|
horizon = GNUNET_TIME_relative_to_absolute (TALER_EXCHANGE_conf_duration_provide ());
|
||||||
if (GNUNET_TIME_absolute_ntoh (dki->issue.properties.start).abs_value_us >
|
start = GNUNET_TIME_absolute_ntoh (dki->issue.properties.start);
|
||||||
horizon.abs_value_us)
|
if (start.abs_value_us > horizon.abs_value_us)
|
||||||
{
|
{
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Skipping future denomination key `%s'\n",
|
"Skipping future denomination key `%s' (starts at %s)\n",
|
||||||
alias);
|
alias,
|
||||||
|
GNUNET_STRINGS_absolute_time_to_string (start));
|
||||||
return GNUNET_OK;
|
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
|
* Call #handle_signal() to pass the received signal via
|
||||||
* the control pipe.
|
* the control pipe.
|
||||||
|
Loading…
Reference in New Issue
Block a user