aboutsummaryrefslogtreecommitdiff
path: root/src/exchange-lib/test_exchange_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchange-lib/test_exchange_api.c')
-rw-r--r--src/exchange-lib/test_exchange_api.c89
1 files changed, 47 insertions, 42 deletions
diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c
index 2936f68fb..1ab09c9c4 100644
--- a/src/exchange-lib/test_exchange_api.c
+++ b/src/exchange-lib/test_exchange_api.c
@@ -48,9 +48,9 @@ static struct GNUNET_CURL_Context *ctx;
static struct TALER_EXCHANGE_Handle *exchange;
/**
- * Task run on shutdown.
+ * Task run on timeout.
*/
-static struct GNUNET_SCHEDULER_Task *shutdown_task;
+static struct GNUNET_SCHEDULER_Task *timeout_task;
/**
* Task that runs the main event loop.
@@ -570,27 +570,6 @@ struct InterpreterState
/**
- * Task that runs the context's event loop with the GNUnet scheduler.
- *
- * @param cls unused
- */
-static void
-context_task (void *cls);
-
-
-/**
- * Run the context task, the working set has changed.
- */
-static void
-trigger_context_task ()
-{
- GNUNET_SCHEDULER_cancel (ctx_task);
- ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
- NULL);
-}
-
-
-/**
* The testcase failed, return with an error code.
*
* @param is interpreter state to clean up
@@ -1499,7 +1478,6 @@ interpreter_run (void *cls)
fail (is);
return;
}
- trigger_context_task ();
return;
case OC_WITHDRAW_STATUS:
GNUNET_assert (NULL !=
@@ -1515,7 +1493,6 @@ interpreter_run (void *cls)
&reserve_pub,
&reserve_status_cb,
is);
- trigger_context_task ();
return;
case OC_WITHDRAW_SIGN:
GNUNET_assert (NULL !=
@@ -1575,7 +1552,6 @@ interpreter_run (void *cls)
fail (is);
return;
}
- trigger_context_task ();
return;
case OC_DEPOSIT:
{
@@ -1728,7 +1704,6 @@ interpreter_run (void *cls)
return;
}
json_decref (wire);
- trigger_context_task ();
return;
}
case OC_REFRESH_MELT:
@@ -1826,7 +1801,6 @@ interpreter_run (void *cls)
}
}
}
- trigger_context_task ();
return;
case OC_REFRESH_REVEAL:
ref = find_command (is,
@@ -1845,7 +1819,6 @@ interpreter_run (void *cls)
fail (is);
return;
}
- trigger_context_task ();
return;
case OC_REFRESH_LINK:
/* find reveal command */
@@ -1885,13 +1858,11 @@ interpreter_run (void *cls)
fail (is);
return;
}
- trigger_context_task ();
return;
case OC_WIRE:
cmd->details.wire.wh = TALER_EXCHANGE_wire (exchange,
&wire_cb,
is);
- trigger_context_task ();
return;
case OC_WIRE_DEPOSITS:
if (NULL != cmd->details.wire_deposits.wtid_ref)
@@ -1906,7 +1877,6 @@ interpreter_run (void *cls)
&cmd->details.wire_deposits.wtid,
&wire_deposits_cb,
is);
- trigger_context_task ();
return;
case OC_DEPOSIT_WTID:
{
@@ -1969,7 +1939,6 @@ interpreter_run (void *cls)
ref->details.deposit.transaction_id,
&deposit_wtid_cb,
is);
- trigger_context_task ();
}
return;
default:
@@ -1985,6 +1954,19 @@ interpreter_run (void *cls)
/**
+ * Function run when the test terminates (good or bad) with timeout.
+ *
+ * @param cls NULL
+ */
+static void
+do_timeout (void *cls)
+{
+ timeout_task = NULL;
+ GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
* Function run when the test terminates (good or bad).
* Cleans up our state.
*
@@ -1997,7 +1979,6 @@ do_shutdown (void *cls)
struct Command *cmd;
unsigned int i;
- shutdown_task = NULL;
for (i=0;OC_END != (cmd = &is->commands[i])->oc;i++)
{
switch (cmd->oc)
@@ -2156,11 +2137,6 @@ do_shutdown (void *cls)
is->task = NULL;
}
GNUNET_free (is);
- if (NULL != ctx_task)
- {
- GNUNET_SCHEDULER_cancel (ctx_task);
- ctx_task = NULL;
- }
if (NULL != exchange)
{
TALER_EXCHANGE_disconnect (exchange);
@@ -2171,6 +2147,16 @@ do_shutdown (void *cls)
GNUNET_CURL_fini (ctx);
ctx = NULL;
}
+ if (NULL != ctx_task)
+ {
+ GNUNET_SCHEDULER_cancel (ctx_task);
+ ctx_task = NULL;
+ }
+ if (NULL != timeout_task)
+ {
+ GNUNET_SCHEDULER_cancel (timeout_task);
+ timeout_task = NULL;
+ }
}
@@ -2263,6 +2249,23 @@ context_task (void *cls)
/**
+ * Run the context task, the working set has changed.
+ *
+ * @param cls NULL
+ */
+static void
+trigger_context_task (void *cls)
+{
+ if (NULL == ctx)
+ return;
+ if (NULL != ctx_task)
+ GNUNET_SCHEDULER_cancel (ctx_task);
+ ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
+ NULL);
+}
+
+
+/**
* Main function that will be run by the scheduler.
*
* @param cls closure
@@ -2507,7 +2510,8 @@ run (void *cls)
is = GNUNET_new (struct InterpreterState);
is->commands = commands;
- ctx = GNUNET_CURL_init ();
+ ctx = GNUNET_CURL_init (&trigger_context_task,
+ NULL);
GNUNET_assert (NULL != ctx);
ctx_task = GNUNET_SCHEDULER_add_now (&context_task,
ctx);
@@ -2516,10 +2520,11 @@ run (void *cls)
&cert_cb, is,
TALER_EXCHANGE_OPTION_END);
GNUNET_assert (NULL != exchange);
- shutdown_task
+ timeout_task
= GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 150),
- &do_shutdown, is);
+ &do_timeout, NULL);
+ GNUNET_SCHEDULER_add_shutdown (&do_shutdown, is);
}