diff options
-rw-r--r-- | doc/structure.dot | 2 | ||||
-rw-r--r-- | po/POTFILES.in | 4 | ||||
-rw-r--r-- | src/testing/gnunet-testing-run-service.c | 166 |
3 files changed, 98 insertions, 74 deletions
diff --git a/doc/structure.dot b/doc/structure.dot index d3b2c0cc9..f7f0ac451 100644 --- a/doc/structure.dot +++ b/doc/structure.dot @@ -36,7 +36,7 @@ splines = true; // psycd -> mesh [style=dashed]; stream [shape=diamond]; stream -> mesh; - stream -> lockmanager; + stream -> lockmanager [style=dashed]; dht -> core; dht -> nse; dht -> block; diff --git a/po/POTFILES.in b/po/POTFILES.in index 9c02b90fc..4b22465b8 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -105,7 +105,6 @@ src/gns/gnocksy/gns_glue.c src/gns/gns_api.c src/gns/gnunet-gns.c src/gns/gnunet-gns-fcfsd.c -src/gns/gnunet-gns-lookup.c src/gns/gnunet-gns-proxy.c src/gns/gnunet-service-gns.c src/gns/gnunet-service-gns_interceptor.c @@ -131,6 +130,7 @@ src/namestore/gnunet-namestore.c src/namestore/gnunet-service-namestore.c src/namestore/namestore_api.c src/namestore/namestore_common.c +src/namestore/plugin_namestore_postgres.c src/namestore/plugin_namestore_sqlite.c src/nat/gnunet-helper-nat-client.c src/nat/gnunet-helper-nat-client-windows.c @@ -157,6 +157,7 @@ src/statistics/statistics_api.c src/stream/stream_api.c src/template/gnunet-service-template.c src/template/gnunet-template.c +src/testbed/gnunet-service-testbed.c src/testbed/testbed_api.c src/testbed/testbed_api_hosts.c src/testbed/testbed_api_operations.c @@ -165,6 +166,7 @@ src/testbed/testbed_api_services.c src/testbed/testbed_api_testbed.c src/testbed/testbed_api_test.c src/testbed/testbed_api_topology.c +src/testing/gnunet-testing-run-service.c src/testing_old/gnunet-testing.c src/testing_old/helper.c src/testing_old/testing.c diff --git a/src/testing/gnunet-testing-run-service.c b/src/testing/gnunet-testing-run-service.c index c9e115260..fa98e1a6c 100644 --- a/src/testing/gnunet-testing-run-service.c +++ b/src/testing/gnunet-testing-run-service.c @@ -44,109 +44,134 @@ #include "gnunet_os_lib.h" -static struct GNUNET_DISK_FileHandle fh; -static char *tmpfilename = NULL; -static GNUNET_SCHEDULER_TaskIdentifier tid = GNUNET_SCHEDULER_NO_TASK; -static struct GNUNET_TESTING_Peer *my_peer = NULL; +#define LOG(kind,...) \ + GNUNET_log_from (kind, "gnunet-testing", __VA_ARGS__) + + +/** + * FIXME + */ +static struct GNUNET_DISK_FileHandle *fh; + +/** + * FIXME + */ +static char *tmpfilename; + +/** + * FIXME + */ +static GNUNET_SCHEDULER_TaskIdentifier tid; + +/** + * FIXME + */ +static struct GNUNET_TESTING_Peer *my_peer; -#define LOG(kind,...) \ - GNUNET_log_from (kind, "gnunettestingnew", __VA_ARGS__) /** * Cleanup called by signal handlers and when stdin is closed. - * Removes the temporary file with the configuration and shuts down the scheduler. + * Removes the temporary file. + * + * @param cls unused + * @param tc scheduler context */ -void -cleanup (void) +static void +cleanup (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { if (NULL != tmpfilename) { - remove (tmpfilename); + if (0 != UNLINK (tmpfilename)) + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "unlink", tmpfilename); + } + if (GNUNET_SCHEDULER_NO_TASK != tid) + { + GNUNET_SCHEDULER_cancel (tid); + tid = GNUNET_SCHEDULER_NO_TASK; + } + if (NULL != fh) + { + GNUNET_DISK_file_close (fh); + fh = NULL; } - GNUNET_SCHEDULER_shutdown (); } + /** * Called whenever we can read stdin non-blocking + * + * @param cls unused + * @param tc scheduler context */ -void +static void stdin_cb (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { int c; - if (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) - { - return; - } - if (GNUNET_SCHEDULER_REASON_READ_READY & tc->reason) + tid = GNUNET_SCHEDULER_NO_TASK; + if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason)) + return; + GNUNET_assert (0 != (GNUNET_SCHEDULER_REASON_READ_READY & tc->reason)); + c = getchar (); + switch (c) { - c = getchar (); - if (EOF == c || 'q' == c) - { - tid = GNUNET_SCHEDULER_NO_TASK; - cleanup (); - } - else - { - if ('r' == c) - { - GNUNET_TESTING_peer_stop(my_peer); - GNUNET_TESTING_peer_start(my_peer); - printf("restarted\n"); - fflush(stdout); - } - tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, &fh, &stdin_cb, NULL); - } + case EOF: + case 'q': + GNUNET_SCHEDULER_shutdown (); return; + case 'r': + GNUNET_TESTING_peer_stop (my_peer); + GNUNET_TESTING_peer_start (my_peer); + printf ("restarted\n"); + fflush (stdout); + break; + case '\n': + case '\r': + /* ignore whitespace */ + break; + default: + fprintf (stderr, _("Unknown command, use 'q' to quit or 'r' to restart peer\n")); + break; } - GNUNET_break (0); + tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, &fh, &stdin_cb, NULL); } + /** * Main function called by the testing library. * Executed inside a running scheduler. + * + * @param cls unused + * @param cfg configuration of the peer that was started + * @param peer handle to the peer */ -void +static void testing_main (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_TESTING_Peer *peer) { my_peer = (struct GNUNET_TESTING_Peer *) peer; - tmpfilename = tmpnam (NULL); - if (NULL == tmpfilename) + if (NULL == (tmpfilename = GNUNET_DISK_mktemp ("gnunet-testing"))) { GNUNET_break (0); cleanup (); return; } - if (GNUNET_SYSERR == - GNUNET_CONFIGURATION_write((struct GNUNET_CONFIGURATION_Handle *) cfg, tmpfilename)) + GNUNET_CONFIGURATION_write ((struct GNUNET_CONFIGURATION_Handle *) cfg, tmpfilename)) { GNUNET_break (0); return; } - - printf("started\n%s\n", tmpfilename); + printf("%s\n", tmpfilename); fflush(stdout); - - GNUNET_break(NULL != GNUNET_SIGNAL_handler_install(SIGTERM, &cleanup)); - GNUNET_break(NULL != GNUNET_SIGNAL_handler_install(SIGINT, &cleanup)); - -#if !WINDOWS - fh.fd = 0; /* 0=stdin */ -#else - /* FIXME: box GetStdHandle(STD_INPUT_HANDLE) somehow. - * Note that it will only work if parent process spawns - * gnunet-testing-run-service with custom-created asynchronous standard input - */ -#endif + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREFER_REL, &cleanup); + fh = GNUNET_DISK_get_handle_from_native (stdin); tid = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, &fh, &stdin_cb, NULL); } - /** * The main function. * @@ -157,29 +182,26 @@ testing_main (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, int main (int argc, char *const *argv) { + static char *cfg_name; + static char *srv_name; static const struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_HELP("tool to start a service for testing"), + {'c', "config", "FILENAME", + gettext_noop ("name of the configuration file to use"), 1, + &GNUNET_GETOPT_set_string, &cfg_name}, + {'s', "service", "SERVICE", + gettext_noop ("name of the service to run"), 1, + &GNUNET_GETOPT_set_string, &srv_name}, + GNUNET_GETOPT_OPTION_HELP ("tool to start a service for testing"), GNUNET_GETOPT_OPTION_END }; - int arg_start; int ret; - arg_start = GNUNET_GETOPT_run("gnunet-testing-run-service", options, argc, argv); - - if (arg_start == GNUNET_SYSERR) - { + if (GNUNET_SYSERR == + GNUNET_GETOPT_run("gnunet-testing-run-service", options, argc, argv)) return 1; - } - - if (arg_start != 1 || argc != 2) - { - fprintf (stderr, "Invalid number of arguments\n"); - return 1; - } - - ret = GNUNET_TESTING_service_run_restartable ("gnunet_service_test", argv[1], - NULL, &testing_main, NULL); - if (ret) + ret = GNUNET_TESTING_service_run_restartable ("gnunet_service_test", srv_name, + cfg_name, &testing_main, NULL); + if (0 != ret) { printf ("error\n"); } |