diff options
Diffstat (limited to 'src/lib/test_merchant_api.c')
-rw-r--r-- | src/lib/test_merchant_api.c | 99 |
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 (§ion, "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 |