summaryrefslogtreecommitdiff
path: root/src/lib/test_merchant_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/test_merchant_api.c')
-rw-r--r--src/lib/test_merchant_api.c99
1 files changed, 89 insertions, 10 deletions
diff --git a/src/lib/test_merchant_api.c b/src/lib/test_merchant_api.c
index d68ed202..70c49a3b 100644
--- a/src/lib/test_merchant_api.c
+++ b/src/lib/test_merchant_api.c
@@ -176,6 +176,11 @@ enum OpCode
OC_RUN_AGGREGATOR,
/**
+ * Run the wirewatcher to check for incoming transactions.
+ */
+ OC_RUN_WIREWATCH,
+
+ /**
* Check that the fakebank has received a certain transaction.
*/
OC_CHECK_BANK_TRANSFER,
@@ -542,6 +547,20 @@ struct Command
struct {
/**
+ * Process for the wirewatcher.
+ */
+ struct GNUNET_OS_Process *wirewatch_proc;
+
+ /**
+ * ID of task called whenever we get a SIGCHILD.
+ */
+ struct GNUNET_SCHEDULER_Task *child_death_task;
+
+ } run_wirewatch;
+
+ struct {
+
+ /**
* Which amount do we expect to see transferred?
*/
const char *amount;
@@ -1619,15 +1638,31 @@ maint_child_death (void *cls)
const struct GNUNET_DISK_FileHandle *pr;
char c[16];
- cmd->details.run_aggregator.child_death_task = NULL;
- pr = GNUNET_DISK_pipe_handle (sigpipe,
- GNUNET_DISK_PIPE_END_READ);
- GNUNET_break (0 < GNUNET_DISK_file_read (pr,
- &c,
- sizeof (c)));
- GNUNET_OS_process_wait (cmd->details.run_aggregator.aggregator_proc);
- GNUNET_OS_process_destroy (cmd->details.run_aggregator.aggregator_proc);
- cmd->details.run_aggregator.aggregator_proc = NULL;
+ switch (cmd->oc) {
+ case OC_RUN_AGGREGATOR:
+ cmd->details.run_aggregator.child_death_task = NULL;
+ pr = GNUNET_DISK_pipe_handle (sigpipe,
+ GNUNET_DISK_PIPE_END_READ);
+ GNUNET_break (0 < GNUNET_DISK_file_read (pr,
+ &c,
+ sizeof (c)));
+ GNUNET_OS_process_wait (cmd->details.run_aggregator.aggregator_proc);
+ GNUNET_OS_process_destroy (cmd->details.run_aggregator.aggregator_proc);
+ cmd->details.run_aggregator.aggregator_proc = NULL;
+ break;
+ case OC_RUN_WIREWATCH:
+ cmd->details.run_wirewatch.child_death_task = NULL;
+ pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
+ GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof (c)));
+ GNUNET_OS_process_wait (cmd->details.run_wirewatch.wirewatch_proc);
+ GNUNET_OS_process_destroy (cmd->details.run_wirewatch.wirewatch_proc);
+ cmd->details.run_wirewatch.wirewatch_proc = NULL;
+ break;
+ default:
+ GNUNET_break (0);
+ fail (is);
+ return;
+ }
next_command (is);
}
@@ -2143,6 +2178,22 @@ cleanup_state (struct InterpreterState *is)
cmd->details.run_aggregator.child_death_task = NULL;
}
break;
+ case OC_RUN_WIREWATCH:
+ if (NULL != cmd->details.run_wirewatch.wirewatch_proc)
+ {
+ GNUNET_break (0 ==
+ GNUNET_OS_process_kill (cmd->details.run_wirewatch.wirewatch_proc,
+ SIGKILL));
+ GNUNET_OS_process_wait (cmd->details.run_wirewatch.wirewatch_proc);
+ GNUNET_OS_process_destroy (cmd->details.run_wirewatch.wirewatch_proc);
+ cmd->details.run_wirewatch.wirewatch_proc = NULL;
+ }
+ if (NULL != cmd->details.run_wirewatch.child_death_task)
+ {
+ GNUNET_SCHEDULER_cancel (cmd->details.run_wirewatch.child_death_task);
+ cmd->details.run_wirewatch.child_death_task = NULL;
+ }
+ break;
case OC_CHECK_BANK_TRANSFER:
GNUNET_free_non_null (cmd->details.check_bank_transfer.subject);
cmd->details.check_bank_transfer.subject = NULL;
@@ -2347,7 +2398,7 @@ interpreter_run (void *cls)
char *section;
char *keys;
struct GNUNET_CRYPTO_EddsaPrivateKey *pk;
-
+
GNUNET_asprintf (&section,
"merchant-instance-%s",
cmd->details.admin_add_incoming.instance);
@@ -2672,6 +2723,34 @@ interpreter_run (void *cls)
&maint_child_death, is);
}
break;
+ case OC_RUN_WIREWATCH:
+ {
+ const struct GNUNET_DISK_FileHandle *pr;
+
+ cmd->details.run_wirewatch.wirewatch_proc
+ = GNUNET_OS_start_process (GNUNET_NO,
+ GNUNET_OS_INHERIT_STD_ALL,
+ NULL, NULL, NULL,
+ "taler-exchange-wirewatch",
+ "taler-exchange-wirewatch",
+ "-c", "test_exchange_api.conf",
+ "-t", "test", /* use Taler's bank/fakebank */
+ "-T", /* exit when done */
+ NULL);
+ if (NULL == cmd->details.run_wirewatch.wirewatch_proc)
+ {
+ GNUNET_break (0);
+ fail (is);
+ return;
+ }
+ pr = GNUNET_DISK_pipe_handle (sigpipe,
+ GNUNET_DISK_PIPE_END_READ);
+ cmd->details.run_wirewatch.child_death_task
+ = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
+ pr,
+ &maint_child_death, is);
+ return;
+ }
case OC_CHECK_BANK_TRANSFER:
{
GNUNET_assert (GNUNET_OK == TALER_string_to_amount