modified to create cfg with default without template
[oweals/gnunet.git] / src / testing / gnunet-testing.c
index e15cacdcd84b017f029d18d877fd99d33af05f7c..1c518fef97dac18220e8eddc6e791687bf47633b 100644 (file)
@@ -43,6 +43,7 @@ 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)
@@ -67,15 +68,17 @@ create_unique_cfgs (const char * template, const unsigned int no)
   struct GNUNET_CONFIGURATION_Handle *cfg_new = NULL;
   struct GNUNET_CONFIGURATION_Handle *cfg_tmpl = GNUNET_CONFIGURATION_create();
 
-
-
-  if (GNUNET_OK != GNUNET_CONFIGURATION_load(cfg_tmpl, create_cfg_template))
+  /* 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
+    GNUNET_CONFIGURATION_load(cfg_tmpl,  NULL);
 
   if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string(cfg_tmpl, "PATHS", "SERVICEHOME", &service_home))
   {
@@ -91,7 +94,10 @@ create_unique_cfgs (const char * template, const unsigned int no)
   while (cur < no)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating configuration no. %u \n", cur);
-    GNUNET_asprintf (&cur_file,"%04u-%s",cur, create_cfg_template);
+    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);
@@ -131,27 +137,37 @@ create_hostkeys (const unsigned int no)
   uint64_t fs;
   uint64_t total_hostkeys;
   char *hostkey_data;
-  char *hostkeyfile;
+  char *hostkey_src_file;
+  char *hostkey_dest_file;
 
   /* prepare hostkeys */
-  const char *hostkeys_file = "../../contrib/testing_hostkeys.dat";
+  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 (hostkeys_file))
+  if (GNUNET_YES != GNUNET_DISK_file_test (hostkey_src_file))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not read hostkeys file!\n"));
+    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 (hostkeys_file, GNUNET_DISK_OPEN_READ,
+    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", hostkeys_file);
+      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", hostkey_src_file);
       return 1;
     }
 
-    if (GNUNET_YES != GNUNET_DISK_file_size (hostkeys_file, &fs, GNUNET_YES))
+    if (GNUNET_YES != GNUNET_DISK_file_size (hostkey_src_file, &fs, GNUNET_YES))
       fs = 0;
 
     if (0 != (fs % HOSTKEYFILESIZE))
@@ -172,10 +188,10 @@ create_hostkeys (const unsigned int no)
 
   while (cur < no)
   {
-    GNUNET_asprintf (&hostkeyfile, "%04u-hostkey",cur);
+    GNUNET_asprintf (&hostkey_dest_file, "%04u-hostkey",cur);
     GNUNET_assert (GNUNET_OK ==
-                   GNUNET_DISK_directory_create_for_file (hostkeyfile));
-    fd = GNUNET_DISK_file_open (hostkeyfile,
+                   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 |
@@ -185,8 +201,8 @@ create_hostkeys (const unsigned int no)
                    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", hostkeyfile);
-    GNUNET_free (hostkeyfile);
+                     "Wrote hostkey to file: `%s' \n", hostkey_dest_file);
+    GNUNET_free (hostkey_dest_file);
     cur ++;
   }
 
@@ -208,22 +224,34 @@ run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   /* main code here */
-  if ((create_cfg == GNUNET_YES) &&
-      (create_no > 0) &&
-      (create_cfg_template != NULL))
+  if (create_cfg == GNUNET_YES)
   {
-    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 if ((create_hostkey == GNUNET_YES) && (create_no > 0))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating %u hostkeys \n", create_no);
-    ret = create_hostkeys (create_no);
+    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;
+    }
   }
-  else
+
+  if (create_hostkey == GNUNET_YES)
   {
-    ret = 1;
+    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);
 }
 
@@ -241,8 +269,10 @@ 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"),
+     {'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"),