-porting gnunet-testing command-line tool to new testing library
authorChristian Grothoff <christian@grothoff.org>
Tue, 19 Jun 2012 07:36:21 +0000 (07:36 +0000)
committerChristian Grothoff <christian@grothoff.org>
Tue, 19 Jun 2012 07:36:21 +0000 (07:36 +0000)
src/include/gnunet_testing_lib-new.h
src/peerinfo-tool/test_gnunet_peerinfo_data.conf
src/testing/Makefile.am
src/testing/gnunet-testing-run-service.c
src/testing/gnunet-testing.c [new file with mode: 0644]
src/testing/testing.c
src/testing_old/Makefile.am
src/testing_old/gnunet-testing.c [deleted file]

index fb51d2fb7ec70f13fc9718b87095c2b85cb1591e..31bc2234ab4136f0e1dd1b6cb509cf1725a6f89e 100644 (file)
@@ -102,9 +102,9 @@ GNUNET_TESTING_system_destroy (struct GNUNET_TESTING_System *system,
  * @param key_number desired pre-created hostkey to obtain
  * @param id set to the peer's identity (hash of the public
  *        key; if NULL, GNUNET_SYSERR is returned immediately
- * @return GNUNET_SYSERR on error (not enough keys)
+ * @return NULL on error (not enough keys)
  */
-int
+struct GNUNET_CRYPTO_RsaPrivateKey *
 GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
                            uint32_t key_number,
                            struct GNUNET_PeerIdentity *id);
index 90da74fbffe3499104c6af2294f05818b391352f..843dc983a6106d5cc2dc6b98a1656b935005ce91 100644 (file)
@@ -1,6 +1,9 @@
 [PATHS]
 SERVICEHOME = /tmp/gnunet-test-peerinfo/
 
+[gnunetd]
+#HOSTKEY = test_gnunet_peerinfo.hostkey
+
 [peerinfo]
 PORT = 24354
 
index 670b1d2e04baa4861b26571d2f2da138a48b0aff..f680ad6698c5b75583c565abda100e35fdfe3232 100644 (file)
@@ -27,7 +27,8 @@ libgnunettesting_la_LDFLAGS = \
  -version-info 0:1:0
 
 bin_PROGRAMS = \
- gnunet-testing-run-service
+ gnunet-testing-run-service \
+ gnunet-testing
 
 
 gnunet_testing_run_service_SOURCES = \
@@ -40,6 +41,15 @@ gnunet_testing_run_service_LDADD = \
 gnunet_testing_run_service_DEPENDENCIES = \
   libgnunettesting.la
 
+gnunet_testing_SOURCES = \
+ gnunet-testing.c         
+gnunet_testing_LDADD = \
+ $(top_builddir)/src/testing/libgnunettesting.la \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ $(GN_LIBINTL)
+gnunet_testing_DEPENDENCIES = \
+ libgnunettesting.la
+
 
 check_PROGRAMS = \
  test_testing_portreservation \
index 38351d75e737f61ac00ff5a1b1bd98c4e15cd782..72415e606c2cc56740191d00e0ad5cb1c2f81a7d 100644 (file)
  * This executable is intended to be used by gnunet-java, in order to reliably
  * start and stop services for test cases.
  */
-
 #include "platform.h"
-#include "gnunet_getopt_lib.h"
-#include "gnunet_program_lib.h"
 #include "gnunet_util_lib.h"
-#include "gnunet_signal_lib.h"
 #include "gnunet_testing_lib-new.h"
-#include "gnunet_os_lib.h"
-
 
 #define LOG(kind,...)                                           \
   GNUNET_log_from (kind, "gnunet-testing", __VA_ARGS__)
diff --git a/src/testing/gnunet-testing.c b/src/testing/gnunet-testing.c
new file mode 100644 (file)
index 0000000..b7e1157
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+     This file is part of GNUnet.
+     (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file testing_old/gnunet-testing.c
+ * @brief tool to use testing functionality from cmd line
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_testing_lib-new.h"
+
+#define HOSTKEYFILESIZE 914
+
+/**
+ * Final status code.
+ */
+static int ret;
+
+static unsigned int create_hostkey;
+
+static unsigned int create_cfg;
+
+static int create_no;
+
+static char * create_cfg_template;
+
+static char * create_hostkey_file;
+
+
+static int
+create_unique_cfgs (const char * template, const unsigned int no)
+{
+  struct GNUNET_TESTING_System *system;
+  int fail;
+  unsigned int cur;
+  char *cur_file;
+  struct GNUNET_CONFIGURATION_Handle *cfg_new;
+  struct GNUNET_CONFIGURATION_Handle *cfg_tmpl;
+
+  if (GNUNET_NO == GNUNET_DISK_file_test(template))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Configuration template `%s': file not found\n", create_cfg_template);
+    return 1;
+  }
+  cfg_tmpl = GNUNET_CONFIGURATION_create();
+
+  /* load template */
+  if ((create_cfg_template != NULL) && (GNUNET_OK != GNUNET_CONFIGURATION_load(cfg_tmpl, create_cfg_template)))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not load template `%s'\n", create_cfg_template);
+    GNUNET_CONFIGURATION_destroy(cfg_tmpl);
+
+    return 1;
+  }
+  /* load defaults */
+  if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg_tmpl,  NULL))
+  {
+    GNUNET_break (0);
+    return 1;
+  }
+
+  fail = GNUNET_NO;
+  system = GNUNET_TESTING_system_create ("testing", NULL /* controller */);
+  for (cur = 0; cur < no; cur++)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating configuration no. %u \n", cur);
+    if (create_cfg_template != NULL)
+      GNUNET_asprintf (&cur_file,"%04u-%s",cur, create_cfg_template);
+    else
+      GNUNET_asprintf (&cur_file,"%04u%s",cur, ".conf");
+
+    cfg_new = GNUNET_CONFIGURATION_dup (cfg_tmpl);
+    if (GNUNET_OK !=
+       GNUNET_TESTING_configuration_create (system, cfg_new))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not create another configuration\n");
+      GNUNET_CONFIGURATION_destroy (cfg_new);
+      fail = GNUNET_YES;
+      break;
+    }
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+               "Writing configuration no. %u to file `%s' \n", cur, cur_file);
+    if (GNUNET_OK != GNUNET_CONFIGURATION_write(cfg_new, cur_file))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to write configuration no. %u \n", cur);
+      fail = GNUNET_YES;
+    }
+    GNUNET_CONFIGURATION_destroy (cfg_new);
+    GNUNET_free (cur_file);
+    if (fail == GNUNET_YES)
+      break;
+  }
+  GNUNET_CONFIGURATION_destroy(cfg_tmpl);
+  GNUNET_TESTING_system_destroy (system, GNUNET_NO);
+  if (GNUNET_YES == fail)
+    return 1;
+  return 0;
+}
+
+
+static int
+create_hostkeys (const unsigned int no)
+{
+  struct GNUNET_DISK_FileHandle *fd;
+  int cur = 0;
+  uint64_t fs;
+  uint64_t total_hostkeys;
+  char *hostkey_data;
+  char *hostkey_src_file;
+  char *hostkey_dest_file;
+
+  /* prepare hostkeys */
+  if (create_hostkey_file == NULL)
+    hostkey_src_file = "../../contrib/testing_hostkeys.dat";
+  else
+  {
+    hostkey_src_file = create_hostkey_file;
+  }
+
+  if (GNUNET_YES != GNUNET_DISK_file_test (hostkey_src_file))
+  {
+    if (create_hostkey_file == NULL)
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not read hostkeys file, specify hostkey file with -H!\n"));
+    else
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Specified hostkey file `%s' not found!\n"), create_hostkey_file);
+    return 1;
+  }
+  else
+  {
+    /* Check hostkey file size, read entire thing into memory */
+    fd = GNUNET_DISK_file_open (hostkey_src_file, GNUNET_DISK_OPEN_READ,
+                                GNUNET_DISK_PERM_NONE);
+    if (NULL == fd)
+    {
+      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", hostkey_src_file);
+      return 1;
+    }
+
+    if (GNUNET_OK != GNUNET_DISK_file_size (hostkey_src_file, &fs, GNUNET_YES, GNUNET_YES))
+      fs = 0;
+
+    if (0 != (fs % HOSTKEYFILESIZE))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  "File size %llu seems incorrect for hostkeys...\n", fs);
+    }
+    else
+    {
+      total_hostkeys = fs / HOSTKEYFILESIZE;
+      hostkey_data = GNUNET_malloc_large (fs);
+      GNUNET_assert (fs == GNUNET_DISK_file_read (fd, hostkey_data, fs));
+      GNUNET_log  (GNUNET_ERROR_TYPE_DEBUG,
+                       "Read %llu hostkeys from file\n", total_hostkeys);
+    }
+    GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd));
+  }
+
+  while (cur < no)
+  {
+    GNUNET_asprintf (&hostkey_dest_file, "%04u-hostkey",cur);
+    GNUNET_assert (GNUNET_OK ==
+                   GNUNET_DISK_directory_create_for_file (hostkey_dest_file));
+    fd = GNUNET_DISK_file_open (hostkey_dest_file,
+                                GNUNET_DISK_OPEN_READWRITE |
+                                GNUNET_DISK_OPEN_CREATE,
+                                GNUNET_DISK_PERM_USER_READ |
+                                GNUNET_DISK_PERM_USER_WRITE);
+    GNUNET_assert (fd != NULL);
+    GNUNET_assert (HOSTKEYFILESIZE ==
+                   GNUNET_DISK_file_write (fd, &hostkey_data[cur * HOSTKEYFILESIZE], HOSTKEYFILESIZE));
+    GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd));
+    GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
+                     "Wrote hostkey to file: `%s' \n", hostkey_dest_file);
+    GNUNET_free (hostkey_dest_file);
+    cur ++;
+  }
+
+  GNUNET_free (hostkey_data);
+
+  return 0;
+}
+
+/**
+ * Main function that will be run by the scheduler.
+ *
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param cfg configuration
+ */
+static void
+run (void *cls, char *const *args, const char *cfgfile,
+     const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  /* main code here */
+  if (create_cfg == GNUNET_YES)
+  {
+    if (create_no > 0)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating %u configuration files based on template `%s'\n", create_no, create_cfg_template);
+      ret = create_unique_cfgs (create_cfg_template, create_no);
+    }
+    else
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Missing arguments! \n");
+      ret = 1;
+    }
+  }
+
+  if (create_hostkey == GNUNET_YES)
+  {
+    if  (create_no > 0)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating %u hostkeys \n", create_no);
+      ret = create_hostkeys (create_no);
+    }
+    else
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Missing arguments! \n");
+      ret = 1;
+    }
+  }
+
+  GNUNET_free_non_null (create_cfg_template);
+}
+
+
+/**
+ * The main function.
+ *
+ * @param argc number of arguments from the command line
+ * @param argv command line arguments
+ * @return 0 ok, 1 on error
+ */
+int
+main (int argc, char *const *argv)
+{
+  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+    {'C', "cfg", NULL, gettext_noop ("create unique configuration files"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &create_cfg},
+     {'k', "key", NULL, gettext_noop ("create hostkey files from pre-computed hostkey list"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &create_hostkey},
+     {'H', "hostkeys", NULL, gettext_noop ("host key file"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &create_hostkey_file},
+    {'n', "number", NULL, gettext_noop ("number of unique configuration files or hostkeys to create"),
+     GNUNET_YES, &GNUNET_GETOPT_set_uint, &create_no},
+    {'t', "template", NULL, gettext_noop ("configuration template"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &create_cfg_template},
+    GNUNET_GETOPT_OPTION_END
+  };
+
+  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
+    return 2;
+
+  return (GNUNET_OK ==
+          GNUNET_PROGRAM_run (argc, argv, "gnunet-testing",
+                              gettext_noop ("Command line tool to access the testing library"), options, &run,
+                              NULL)) ? ret : 1;
+}
+
+/* end of gnunet-testing.c */
index fca969b19bdac235edf9d952ecd97473216e06fc..369bd4e51ffa089f3e3b925f7726796ada012125 100644 (file)
@@ -441,9 +441,9 @@ reserve_path (struct GNUNET_TESTING_System *system)
  * @param key_number desired pre-created hostkey to obtain
  * @param id set to the peer's identity (hash of the public
  *        key; if NULL, GNUNET_SYSERR is returned immediately
- * @return GNUNET_SYSERR on error (not enough keys)
+ * @return NULL on error (not enough keys)
  */
-int
+struct GNUNET_CRYPTO_RsaPrivateKey *
 GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
                            uint32_t key_number,
                            struct GNUNET_PeerIdentity *id)
@@ -452,12 +452,12 @@ GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
   struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded public_key;
   
   if ((NULL == id) || (NULL == system->hostkeys_data))
-    return GNUNET_SYSERR;
+    return NULL;
   if (key_number >= system->total_hostkeys)
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Key number %u does not exist\n"), key_number);
-    return GNUNET_SYSERR;
+    return NULL;
   }   
   private_key = GNUNET_CRYPTO_rsa_decode_key (system->hostkeys_data +
                                               (key_number * HOSTKEYFILESIZE),
@@ -466,14 +466,13 @@ GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Error while decoding key %u\n"), key_number);
-    return GNUNET_SYSERR;
+    return NULL;
   }
   GNUNET_CRYPTO_rsa_key_get_public (private_key, &public_key);
   GNUNET_CRYPTO_hash (&public_key,
                       sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded),
                       &(id->hashPubKey));
-  GNUNET_CRYPTO_rsa_key_free (private_key);
-  return GNUNET_OK;
+  return private_key;
 }
 
 
@@ -698,6 +697,7 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
   char hostkey_filename[128];
   char *config_filename;
   char *emsg_;
+  struct GNUNET_CRYPTO_RsaPrivateKey *pk;
 
   if (NULL != emsg)
     *emsg = NULL;
@@ -724,8 +724,9 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
       GNUNET_free (emsg_);
     return NULL;
   }
+  pk = NULL;
   if ((NULL != id) &&
-      (GNUNET_SYSERR == GNUNET_TESTING_hostkey_get (system, key_number, id)))
+      (NULL == (pk = GNUNET_TESTING_hostkey_get (system, key_number, id))))
   {
     GNUNET_asprintf (&emsg_,
                     _("Failed to initialize hostkey for peer %u\n"),
@@ -737,6 +738,8 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
       GNUNET_free (emsg_);
     return NULL;
   }
+  if (NULL != pk)
+    GNUNET_CRYPTO_rsa_key_free (pk);
   GNUNET_assert (GNUNET_OK == 
                  GNUNET_CONFIGURATION_get_value_string (cfg, "PATHS",
                                                         "SERVICEHOME",
index fa4cf7394ca40181891b9cafc2f80871f5b5e584..7a7f193641e40ff3103da4ee34f3cb6a0b5186fa 100644 (file)
@@ -54,9 +54,6 @@ libgnunettesting_old_la_LDFLAGS = \
  -version-info 0:1:0
 
 
-bin_PROGRAMS = \
- gnunet-testing
-
 check_PROGRAMS = \
  test_testing \
  test_testing_connect \
@@ -91,14 +88,6 @@ TESTS = \
  test_testing_peergroup 
 endif
 
-gnunet_testing_SOURCES = \
- gnunet-testing.c         
-gnunet_testing_LDADD = \
- $(top_builddir)/src/testing_old/libgnunettesting_old.la \
- $(top_builddir)/src/util/libgnunetutil.la \
- $(GN_LIBINTL)
-gnunet_testing_DEPENDENCIES = \
- libgnunettesting_old.la
 
 
 test_testing_SOURCES = \
diff --git a/src/testing_old/gnunet-testing.c b/src/testing_old/gnunet-testing.c
deleted file mode 100644 (file)
index 3b0c83b..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
-     This file is part of GNUnet.
-     (C) 2001, 2002, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors)
-
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file testing_old/gnunet-testing.c
- * @brief tool to use testing functionality from cmd line
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_getopt_lib.h"
-#include "gnunet_program_lib.h"
-#include "gnunet_testing_lib.h"
-
-#define HOSTKEYFILESIZE 914
-
-/**
- * Final status code.
- */
-static int ret;
-
-static unsigned int create_hostkey;
-
-static unsigned int create_cfg;
-
-static int create_no;
-
-static char * create_cfg_template;
-
-static char * create_hostkey_file;
-
-static int
-create_unique_cfgs (const char * template, const unsigned int no)
-{
-  int fail = GNUNET_NO;
-
-  uint16_t port = 20000;
-  uint32_t upnum = 1;
-  uint32_t fdnum = 1;
-
-  if (GNUNET_NO == GNUNET_DISK_file_test(template))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Configuration template `%s': file not found\n", create_cfg_template);
-    return 1;
-  }
-
-  int cur = 0;
-  char * cur_file;
-  char *service_home = NULL;
-  char *cur_service_home = NULL;
-
-  struct GNUNET_CONFIGURATION_Handle *cfg_new = NULL;
-  struct GNUNET_CONFIGURATION_Handle *cfg_tmpl = GNUNET_CONFIGURATION_create();
-
-  /* load template */
-  if ((create_cfg_template != NULL) && (GNUNET_OK != GNUNET_CONFIGURATION_load(cfg_tmpl, create_cfg_template)))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Could not load template `%s'\n", create_cfg_template);
-    GNUNET_CONFIGURATION_destroy(cfg_tmpl);
-
-    return 1;
-  }
-  /* load defaults */
-  else if (GNUNET_OK != GNUNET_CONFIGURATION_load(cfg_tmpl,  NULL))
-  {
-    GNUNET_break (0);
-    return 1;
-  }
-
-  if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string(cfg_tmpl, "PATHS", "SERVICEHOME", &service_home))
-  {
-    GNUNET_asprintf(&service_home, "%s", "/tmp/testing");
-  }
-  else
-  {
-    int s = strlen (service_home);
-    if (service_home[s-1] == DIR_SEPARATOR)
-      service_home[s-1] = '\0';
-  }
-
-  while (cur < no)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating configuration no. %u \n", cur);
-    if (create_cfg_template != NULL)
-      GNUNET_asprintf (&cur_file,"%04u-%s",cur, create_cfg_template);
-    else
-      GNUNET_asprintf (&cur_file,"%04u%s",cur, ".conf");
-
-
-    GNUNET_asprintf (&cur_service_home, "%s-%04u%c",service_home, cur, DIR_SEPARATOR);
-    GNUNET_CONFIGURATION_set_value_string (cfg_tmpl,"PATHS","SERVICEHOME", cur_service_home);
-    GNUNET_CONFIGURATION_set_value_string (cfg_tmpl,"PATHS","DEFAULTCONFIG", cur_file);
-    GNUNET_free (cur_service_home);
-
-    cfg_new = GNUNET_TESTING_create_cfg(cfg_tmpl, cur, &port, &upnum, NULL, &fdnum);
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Writing configuration no. %u to file `%s' \n", cur, cur_file);
-    if (GNUNET_OK != GNUNET_CONFIGURATION_write(cfg_new, cur_file))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to write configuration no. %u \n", cur);
-      fail = GNUNET_YES;
-    }
-
-    GNUNET_CONFIGURATION_destroy (cfg_new);
-    GNUNET_free (cur_file);
-    if (fail == GNUNET_YES)
-      break;
-    cur ++;
-  }
-
-  GNUNET_CONFIGURATION_destroy(cfg_tmpl);
-  GNUNET_free (service_home);
-  if (fail == GNUNET_NO)
-    return 0;
-  else
-    return 1;
-}
-
-static int
-create_hostkeys (const unsigned int no)
-{
-  struct GNUNET_DISK_FileHandle *fd;
-  int cur = 0;
-  uint64_t fs;
-  uint64_t total_hostkeys;
-  char *hostkey_data;
-  char *hostkey_src_file;
-  char *hostkey_dest_file;
-
-  /* prepare hostkeys */
-  if (create_hostkey_file == NULL)
-    hostkey_src_file = "../../contrib/testing_hostkeys.dat";
-  else
-  {
-    hostkey_src_file = create_hostkey_file;
-  }
-
-  if (GNUNET_YES != GNUNET_DISK_file_test (hostkey_src_file))
-  {
-    if (create_hostkey_file == NULL)
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not read hostkeys file, specify hostkey file with -H!\n"));
-    else
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Specified hostkey file `%s' not found!\n"), create_hostkey_file);
-    return 1;
-  }
-  else
-  {
-    /* Check hostkey file size, read entire thing into memory */
-    fd = GNUNET_DISK_file_open (hostkey_src_file, GNUNET_DISK_OPEN_READ,
-                                GNUNET_DISK_PERM_NONE);
-    if (NULL == fd)
-    {
-      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", hostkey_src_file);
-      return 1;
-    }
-
-    if (GNUNET_OK != GNUNET_DISK_file_size (hostkey_src_file, &fs, GNUNET_YES, GNUNET_YES))
-      fs = 0;
-
-    if (0 != (fs % HOSTKEYFILESIZE))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "File size %llu seems incorrect for hostkeys...\n", fs);
-    }
-    else
-    {
-      total_hostkeys = fs / HOSTKEYFILESIZE;
-      hostkey_data = GNUNET_malloc_large (fs);
-      GNUNET_assert (fs == GNUNET_DISK_file_read (fd, hostkey_data, fs));
-      GNUNET_log  (GNUNET_ERROR_TYPE_DEBUG,
-                       "Read %llu hostkeys from file\n", total_hostkeys);
-    }
-    GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd));
-  }
-
-  while (cur < no)
-  {
-    GNUNET_asprintf (&hostkey_dest_file, "%04u-hostkey",cur);
-    GNUNET_assert (GNUNET_OK ==
-                   GNUNET_DISK_directory_create_for_file (hostkey_dest_file));
-    fd = GNUNET_DISK_file_open (hostkey_dest_file,
-                                GNUNET_DISK_OPEN_READWRITE |
-                                GNUNET_DISK_OPEN_CREATE,
-                                GNUNET_DISK_PERM_USER_READ |
-                                GNUNET_DISK_PERM_USER_WRITE);
-    GNUNET_assert (fd != NULL);
-    GNUNET_assert (HOSTKEYFILESIZE ==
-                   GNUNET_DISK_file_write (fd, &hostkey_data[cur * HOSTKEYFILESIZE], HOSTKEYFILESIZE));
-    GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd));
-    GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
-                     "Wrote hostkey to file: `%s' \n", hostkey_dest_file);
-    GNUNET_free (hostkey_dest_file);
-    cur ++;
-  }
-
-  GNUNET_free (hostkey_data);
-
-  return 0;
-}
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  /* main code here */
-  if (create_cfg == GNUNET_YES)
-  {
-    if (create_no > 0)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating %u configuration files based on template `%s'\n", create_no, create_cfg_template);
-      ret = create_unique_cfgs (create_cfg_template, create_no);
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Missing arguments! \n");
-      ret = 1;
-    }
-  }
-
-  if (create_hostkey == GNUNET_YES)
-  {
-    if  (create_no > 0)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating %u hostkeys \n", create_no);
-      ret = create_hostkeys (create_no);
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Missing arguments! \n");
-      ret = 1;
-    }
-  }
-
-  GNUNET_free_non_null (create_cfg_template);
-}
-
-
-/**
- * The main function.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- */
-int
-main (int argc, char *const *argv)
-{
-  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    {'C', "cfg", NULL, gettext_noop ("create unique configuration files"),
-     GNUNET_NO, &GNUNET_GETOPT_set_one, &create_cfg},
-     {'k', "key", NULL, gettext_noop ("create hostkey files from pre-computed hostkey list"),
-     GNUNET_NO, &GNUNET_GETOPT_set_one, &create_hostkey},
-     {'H', "hostkeys", NULL, gettext_noop ("host key file"),
-     GNUNET_YES, &GNUNET_GETOPT_set_string, &create_hostkey_file},
-    {'n', "number", NULL, gettext_noop ("number of unique configuration files or hostkeys to create"),
-     GNUNET_YES, &GNUNET_GETOPT_set_uint, &create_no},
-    {'t', "template", NULL, gettext_noop ("configuration template"),
-     GNUNET_YES, &GNUNET_GETOPT_set_string, &create_cfg_template},
-    GNUNET_GETOPT_OPTION_END
-  };
-
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-
-  return (GNUNET_OK ==
-          GNUNET_PROGRAM_run (argc, argv, "gnunet-testing",
-                              gettext_noop ("Command line tool to access the testing library"), options, &run,
-                              NULL)) ? ret : 1;
-}
-
-/* end of gnunet-testing.c */