retry instantly if /keys download fails during testcase startup

This commit is contained in:
Christian Grothoff 2018-08-19 13:27:13 +02:00
parent 2d7e9bc5aa
commit 7663baf2e2
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 36 additions and 14 deletions

View File

@ -1,5 +1,5 @@
{ {
"url": "payto://x-taler-bank/localhost:8082/2", "url": "payto://x-taler-bank/localhost:8082/2",
"salt": "B9H7WG3A6881HNVK7C508EHMJ10Z0CEB21Z9047KXKMCZG67JK5M27EQNRW38KNPVXDYNYTX27PA34VSA8JN3NXJA0BX655WGJMM7B8", "salt": "MHJ6P3XF2WEC6WA097H8N1MPCT37T7TBHJ3FDTRBPGX0JNQYHJW6D52J0269WS68WG04FMCD5C0E49YEW7R21EXKC7P1TYTJMVKXNZR",
"master_sig": "FCJAM149MFKTMD8XQ7S32TBD53VN97Y3BCXFXSGQ8DH94P18XXCPRA3Z9ZYBQ4JFFEPS4RE48ACS99MMM193QZ10M7MKGS2B685F030" "master_sig": "ZGZVVR4S9PH9A494B15QSAYCX6NDVF735JN3426T7QQ77VK6QR971TQX71NXHR8N54RGC5GMC49YPK4RSFCJ2Z9GG1CWJ7MAEQSDC08"
} }

View File

@ -294,6 +294,7 @@ do_shutdown (void *cls)
if (NULL != is->exchange) if (NULL != is->exchange)
{ {
TALER_EXCHANGE_disconnect (is->exchange); TALER_EXCHANGE_disconnect (is->exchange);
is->exchange = NULL;
} }
if (NULL != is->task) if (NULL != is->task)
{ {
@ -514,7 +515,7 @@ struct MainContext
TALER_TESTING_Main main_cb; TALER_TESTING_Main main_cb;
/** /**
* Closure for "run". * Closure for @e main_cb.
*/ */
void *main_cb_cls; void *main_cb_cls;
@ -531,6 +532,11 @@ struct MainContext
*/ */
const char *config_filename; const char *config_filename;
/**
* URL of the exchange.
*/
char *exchange_url;
}; };
@ -566,11 +572,27 @@ cert_cb (void *cls,
enum TALER_EXCHANGE_VersionCompatibility compat) enum TALER_EXCHANGE_VersionCompatibility compat)
{ {
struct MainContext *main_ctx = cls; struct MainContext *main_ctx = cls;
struct TALER_TESTING_Interpreter *is = main_ctx->is;
if (NULL == keys) if (NULL == keys)
{ {
if (GNUNET_NO == is->working)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Got NULL response for /keys during startup, retrying!\n");
TALER_EXCHANGE_disconnect (is->exchange);
GNUNET_assert (NULL !=
(is->exchange = TALER_EXCHANGE_connect (is->ctx,
main_ctx->exchange_url,
&cert_cb,
main_ctx,
TALER_EXCHANGE_OPTION_END)));
return;
}
else
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Got NULL response for /keys\n"); "Got NULL response for /keys during execution!\n");
} }
else else
{ {
@ -578,28 +600,28 @@ cert_cb (void *cls,
"Got %d DK from /keys\n", "Got %d DK from /keys\n",
keys->num_denom_keys); keys->num_denom_keys);
} }
main_ctx->is->key_generation++; is->key_generation++;
main_ctx->is->keys = keys; is->keys = keys;
/* /keys has been called for some reason and /* /keys has been called for some reason and
* the interpreter is already running. */ * the interpreter is already running. */
if (GNUNET_YES == main_ctx->is->working) if (GNUNET_YES == is->working)
return; return;
main_ctx->is->working = GNUNET_YES; is->working = GNUNET_YES;
/* Very first start of tests, call "run()" */ /* Very first start of tests, call "run()" */
if (1 == main_ctx->is->key_generation) if (1 == is->key_generation)
{ {
main_ctx->main_cb (main_ctx->main_cb_cls, main_ctx->main_cb (main_ctx->main_cb_cls,
main_ctx->is); is);
return; return;
} }
/* Tests already started, just trigger the /* Tests already started, just trigger the
* next command. */ * next command. */
GNUNET_SCHEDULER_add_now (&interpreter_run, GNUNET_SCHEDULER_add_now (&interpreter_run,
main_ctx->is); is);
} }
@ -653,13 +675,13 @@ main_wrapper_exchange_connect (void *cls)
GNUNET_CONFIGURATION_destroy (cfg); GNUNET_CONFIGURATION_destroy (cfg);
return; return;
} }
main_ctx->exchange_url = exchange_url;
GNUNET_assert (NULL != GNUNET_assert (NULL !=
(is->exchange = TALER_EXCHANGE_connect (is->ctx, (is->exchange = TALER_EXCHANGE_connect (is->ctx,
exchange_url, exchange_url,
&cert_cb, &cert_cb,
main_ctx, main_ctx,
TALER_EXCHANGE_OPTION_END))); TALER_EXCHANGE_OPTION_END)));
GNUNET_free (exchange_url);
GNUNET_CONFIGURATION_destroy (cfg); GNUNET_CONFIGURATION_destroy (cfg);
} }
@ -726,7 +748,7 @@ TALER_TESTING_setup (TALER_TESTING_Main main_cb,
else else
GNUNET_SCHEDULER_run (&main_wrapper_exchange_agnostic, GNUNET_SCHEDULER_run (&main_wrapper_exchange_agnostic,
&main_ctx); &main_ctx);
GNUNET_free_non_null (main_ctx.exchange_url);
GNUNET_SIGNAL_handler_uninstall (shc_chld); GNUNET_SIGNAL_handler_uninstall (shc_chld);
GNUNET_DISK_pipe_close (sigpipe); GNUNET_DISK_pipe_close (sigpipe);
sigpipe = NULL; sigpipe = NULL;