- rename
[oweals/gnunet.git] / src / testing / testing.c
index 8502809f3a8f7c6edffb91b84b814281bb7f168d..a4fdd38cabcf55eaef7107777a97f7672c3ba834 100644 (file)
@@ -103,7 +103,8 @@ struct GNUNET_TESTING_System
 {
   /**
    * Prefix (i.e. "/tmp/gnunet-testing/") we prepend to each
 {
   /**
    * Prefix (i.e. "/tmp/gnunet-testing/") we prepend to each
-   * SERVICEHOME.    */
+   * GNUNET_HOME.
+   */
   char *tmppath;
 
   /**
   char *tmppath;
 
   /**
@@ -149,7 +150,7 @@ struct GNUNET_TESTING_System
    * by one for each configured peer.  Even if peers are destroyed,
    * we never re-use path counters.
    */
    * by one for each configured peer.  Even if peers are destroyed,
    * we never re-use path counters.
    */
-  uint32_t path_counter;  
+  uint32_t path_counter;
 
   /**
    * The number of hostkeys
 
   /**
    * The number of hostkeys
@@ -185,13 +186,13 @@ struct GNUNET_TESTING_Peer
 
   /**
    * Binary to be executed during 'GNUNET_TESTING_peer_start'.
 
   /**
    * Binary to be executed during 'GNUNET_TESTING_peer_start'.
-   * Typically 'gnunet-service-arm' (but can be set to a 
+   * Typically 'gnunet-service-arm' (but can be set to a
    * specific service by 'GNUNET_TESTING_service_run' if
    * necessary).
    * specific service by 'GNUNET_TESTING_service_run' if
    * necessary).
-   */ 
+   */
   char *main_binary;
   char *args;
   char *main_binary;
   char *args;
-  
+
   /**
    * Handle to the running binary of the service, NULL if the
    * peer/service is currently not running.
   /**
    * Handle to the running binary of the service, NULL if the
    * peer/service is currently not running.
@@ -215,14 +216,14 @@ struct GNUNET_TESTING_Peer
 
   /**
    * The callback to call asynchronously when a peer is stopped
 
   /**
    * The callback to call asynchronously when a peer is stopped
-   */  
+   */
   GNUNET_TESTING_PeerStopCallback cb;
   GNUNET_TESTING_PeerStopCallback cb;
-  
+
   /**
    * The closure for the above callback
    */
   void *cb_cls;
   /**
    * The closure for the above callback
    */
   void *cb_cls;
-  
+
   /**
    * The cached identity of this peer.  Will be populated on call to
    * GNUNET_TESTING_peer_get_identity()
   /**
    * The cached identity of this peer.  Will be populated on call to
    * GNUNET_TESTING_peer_get_identity()
@@ -260,7 +261,7 @@ struct GNUNET_TESTING_Peer
 static int
 hostkeys_load (struct GNUNET_TESTING_System *system)
 {
 static int
 hostkeys_load (struct GNUNET_TESTING_System *system)
 {
-  uint64_t fs; 
+  uint64_t fs;
   char *data_dir;
   char *filename;
   struct GNUNET_DISK_FileHandle *fd;
   char *data_dir;
   char *filename;
   struct GNUNET_DISK_FileHandle *fd;
@@ -268,7 +269,7 @@ hostkeys_load (struct GNUNET_TESTING_System *system)
   GNUNET_assert (NULL == system->hostkeys_data);
   data_dir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
   GNUNET_asprintf (&filename, "%s/testing_hostkeys.ecc", data_dir);
   GNUNET_assert (NULL == system->hostkeys_data);
   data_dir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
   GNUNET_asprintf (&filename, "%s/testing_hostkeys.ecc", data_dir);
-  GNUNET_free (data_dir);  
+  GNUNET_free (data_dir);
 
   if (GNUNET_YES != GNUNET_DISK_file_test (filename))
   {
 
   if (GNUNET_YES != GNUNET_DISK_file_test (filename))
   {
@@ -278,7 +279,7 @@ hostkeys_load (struct GNUNET_TESTING_System *system)
     return GNUNET_SYSERR;
   }
   /* Check hostkey file size, read entire thing into memory */
     return GNUNET_SYSERR;
   }
   /* Check hostkey file size, read entire thing into memory */
-  if (GNUNET_OK != 
+  if (GNUNET_OK !=
       GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES))
     fs = 0;
   if (0 == fs)
       GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES))
     fs = 0;
   if (0 == fs)
@@ -355,7 +356,9 @@ cfg_copy_iterator (void *cls, const char *section,
  *
  * @param testdir only the directory name without any path. This is used for
  *          all service homes; the directory will be created in a temporary
  *
  * @param testdir only the directory name without any path. This is used for
  *          all service homes; the directory will be created in a temporary
- *          location depending on the underlying OS
+ *          location depending on the underlying OS.  This variable will be
+ *          overridden with the value of the environmental variable
+ *          GNUNET_TESTING_PREFIX, if it exists.
  * @param trusted_ip the ip address which will be set as TRUSTED HOST in all
  *          service configurations generated to allow control connections from
  *          this ip. This can either be a single ip address or a network address
  * @param trusted_ip the ip address which will be set as TRUSTED HOST in all
  *          service configurations generated to allow control connections from
  *          this ip. This can either be a single ip address or a network address
@@ -384,8 +387,11 @@ GNUNET_TESTING_system_create_with_portrange (const char *testdir,
   unsigned int cnt;
 
   GNUNET_assert (NULL != testdir);
   unsigned int cnt;
 
   GNUNET_assert (NULL != testdir);
-  system = GNUNET_malloc (sizeof (struct GNUNET_TESTING_System));
-  system->tmppath = GNUNET_DISK_mkdtemp (testdir);
+  system = GNUNET_new (struct GNUNET_TESTING_System);
+  if (NULL == (system->tmppath = getenv (GNUNET_TESTING_PREFIX)))
+    system->tmppath = GNUNET_DISK_mkdtemp (testdir);
+  else
+    system->tmppath = GNUNET_strdup (system->tmppath);
   system->lowport = lowport;
   system->highport = highport;
   if (NULL == system->tmppath)
   system->lowport = lowport;
   system->highport = highport;
   if (NULL == system->tmppath)
@@ -407,13 +413,15 @@ GNUNET_TESTING_system_create_with_portrange (const char *testdir,
   for (cnt = 0; NULL != shared_services[cnt].service; cnt++)
   {
     tss = shared_services[cnt];
   for (cnt = 0; NULL != shared_services[cnt].service; cnt++)
   {
     tss = shared_services[cnt];
-    ss = GNUNET_malloc (sizeof (struct SharedService));
+    ss = GNUNET_new (struct SharedService);
     ss->sname = GNUNET_strdup (tss.service);
     ss->cfg = GNUNET_CONFIGURATION_create ();
     GNUNET_CONFIGURATION_iterate_section_values (tss.cfg, ss->sname,
                                                  &cfg_copy_iterator, ss->cfg);
     GNUNET_CONFIGURATION_iterate_section_values (tss.cfg, "TESTING",
                                                  &cfg_copy_iterator, ss->cfg);
     ss->sname = GNUNET_strdup (tss.service);
     ss->cfg = GNUNET_CONFIGURATION_create ();
     GNUNET_CONFIGURATION_iterate_section_values (tss.cfg, ss->sname,
                                                  &cfg_copy_iterator, ss->cfg);
     GNUNET_CONFIGURATION_iterate_section_values (tss.cfg, "TESTING",
                                                  &cfg_copy_iterator, ss->cfg);
+    GNUNET_CONFIGURATION_iterate_section_values (tss.cfg, "PATHS",
+                                                 &cfg_copy_iterator, ss->cfg);
     ss->share = tss.share;
     GNUNET_array_append (system->shared_services, system->n_shared_services,
                          ss);
     ss->share = tss.share;
     GNUNET_array_append (system->shared_services, system->n_shared_services,
                          ss);
@@ -429,7 +437,9 @@ GNUNET_TESTING_system_create_with_portrange (const char *testdir,
  *
  * @param testdir only the directory name without any path. This is used for all
  *          service homes; the directory will be created in a temporary location
  *
  * @param testdir only the directory name without any path. This is used for all
  *          service homes; the directory will be created in a temporary location
- *          depending on the underlying OS
+ *          depending on the underlying OS.  This variable will be
+ *          overridden with the value of the environmental variable
+ *          GNUNET_TESTING_PREFIX, if it exists.
  * @param trusted_ip the ip address which will be set as TRUSTED HOST in all
  *          service configurations generated to allow control connections from
  *          this ip. This can either be a single ip address or a network address
  * @param trusted_ip the ip address which will be set as TRUSTED HOST in all
  *          service configurations generated to allow control connections from
  *          this ip. This can either be a single ip address or a network address
@@ -483,7 +493,7 @@ start_shared_service_instance (struct SharedServiceInstance *i)
   GNUNET_free (binary);
   i->proc = GNUNET_OS_start_process (PIPE_CONTROL,
                                      GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
   GNUNET_free (binary);
   i->proc = GNUNET_OS_start_process (PIPE_CONTROL,
                                      GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-                                     NULL, NULL,
+                                     NULL, NULL, NULL,
                                      libexec_binary,
                                      libexec_binary,
                                      "-c",
                                      libexec_binary,
                                      libexec_binary,
                                      "-c",
@@ -500,7 +510,7 @@ static void
 stop_shared_service_instance (struct SharedServiceInstance *i)
 {
   GNUNET_break (0 == i->n_refs);
 stop_shared_service_instance (struct SharedServiceInstance *i)
 {
   GNUNET_break (0 == i->n_refs);
-  if (0 != GNUNET_OS_process_kill (i->proc, SIGTERM))
+  if (0 != GNUNET_OS_process_kill (i->proc, GNUNET_TERM_SIG))
     LOG (GNUNET_ERROR_TYPE_WARNING,
          "Killing shared service instance (%s) failed\n", i->ss->sname);
   (void) GNUNET_OS_process_wait (i->proc);
     LOG (GNUNET_ERROR_TYPE_WARNING,
          "Killing shared service instance (%s) failed\n", i->ss->sname);
   (void) GNUNET_OS_process_wait (i->proc);
@@ -558,7 +568,7 @@ GNUNET_TESTING_system_destroy (struct GNUNET_TESTING_System *system,
  * @param system system to use for reservation tracking
  * @return 0 if no free port was available
  */
  * @param system system to use for reservation tracking
  * @return 0 if no free port was available
  */
-uint16_t 
+uint16_t
 GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system)
 {
   struct GNUNET_NETWORK_Handle *socket;
 GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system)
 {
   struct GNUNET_NETWORK_Handle *socket;
@@ -576,7 +586,7 @@ GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system)
   /*
   FIXME: Instead of using getaddrinfo we should try to determine the port
          status by the following heurestics.
   /*
   FIXME: Instead of using getaddrinfo we should try to determine the port
          status by the following heurestics.
-  
+
         On systems which support both IPv4 and IPv6, only ports open on both
         address families are considered open.
         On system with either IPv4 or IPv6. A port is considered open if it's
         On systems which support both IPv4 and IPv6, only ports open on both
         address families are considered open.
         On system with either IPv4 or IPv6. A port is considered open if it's
@@ -619,8 +629,7 @@ GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system)
           continue;
         bind_status = GNUNET_NETWORK_socket_bind (socket,
                                                   ai->ai_addr,
           continue;
         bind_status = GNUNET_NETWORK_socket_bind (socket,
                                                   ai->ai_addr,
-                                                  ai->ai_addrlen,
-                                                  0);
+                                                  ai->ai_addrlen);
         GNUNET_NETWORK_socket_close (socket);
         if (GNUNET_OK != bind_status)
           break;
         GNUNET_NETWORK_socket_close (socket);
         if (GNUNET_OK != bind_status)
           break;
@@ -629,8 +638,7 @@ GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system)
           continue;
         bind_status = GNUNET_NETWORK_socket_bind (socket,
                                                   ai->ai_addr,
           continue;
         bind_status = GNUNET_NETWORK_socket_bind (socket,
                                                   ai->ai_addr,
-                                                  ai->ai_addrlen,
-                                                  0);
+                                                  ai->ai_addrlen);
         GNUNET_NETWORK_socket_close (socket);
         if (GNUNET_OK != bind_status)
           break;
         GNUNET_NETWORK_socket_close (socket);
         if (GNUNET_OK != bind_status)
           break;
@@ -683,7 +691,7 @@ GNUNET_TESTING_release_port (struct GNUNET_TESTING_System *system,
  * faster peer startup.  This function can be used to
  * access the n-th key of those pre-created hostkeys; note
  * that these keys are ONLY useful for testing and not
  * faster peer startup.  This function can be used to
  * access the n-th key of those pre-created hostkeys; note
  * that these keys are ONLY useful for testing and not
- * secure as the private keys are part of the public 
+ * secure as the private keys are part of the public
  * GNUnet source code.
  *
  * This is primarily a helper function used internally
  * GNUnet source code.
  *
  * This is primarily a helper function used internally
@@ -695,14 +703,13 @@ GNUNET_TESTING_release_port (struct GNUNET_TESTING_System *system,
  *        key; if NULL, GNUNET_SYSERR is returned immediately
  * @return NULL on error (not enough keys)
  */
  *        key; if NULL, GNUNET_SYSERR is returned immediately
  * @return NULL on error (not enough keys)
  */
-struct GNUNET_CRYPTO_EccPrivateKey *
+struct GNUNET_CRYPTO_EddsaPrivateKey *
 GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
                            uint32_t key_number,
                            struct GNUNET_PeerIdentity *id)
 GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
                            uint32_t key_number,
                            struct GNUNET_PeerIdentity *id)
-{  
-  struct GNUNET_CRYPTO_EccPrivateKey *private_key;
-  struct GNUNET_CRYPTO_EccPublicSignKey public_key;
-  
+{
+  struct GNUNET_CRYPTO_EddsaPrivateKey *private_key;
+
   if ((NULL == id) || (NULL == system->hostkeys_data))
     return NULL;
   if (key_number >= system->total_hostkeys)
   if ((NULL == id) || (NULL == system->hostkeys_data))
     return NULL;
   if (key_number >= system->total_hostkeys)
@@ -710,16 +717,14 @@ GNUNET_TESTING_hostkey_get (const struct GNUNET_TESTING_System *system,
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Key number %u does not exist\n"), key_number);
     return NULL;
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Key number %u does not exist\n"), key_number);
     return NULL;
-  }   
-  private_key = GNUNET_new (struct GNUNET_CRYPTO_EccPrivateKey);
+  }
+  private_key = GNUNET_new (struct GNUNET_CRYPTO_EddsaPrivateKey);
   memcpy (private_key,
          system->hostkeys_data +
          (key_number * GNUNET_TESTING_HOSTKEYFILESIZE),
          GNUNET_TESTING_HOSTKEYFILESIZE);
   memcpy (private_key,
          system->hostkeys_data +
          (key_number * GNUNET_TESTING_HOSTKEYFILESIZE),
          GNUNET_TESTING_HOSTKEYFILESIZE);
-  GNUNET_CRYPTO_ecc_key_get_public_for_signature (private_key, &public_key);
-  GNUNET_CRYPTO_hash (&public_key,
-                      sizeof (struct GNUNET_CRYPTO_EccPublicSignKey),
-                      &(id->hashPubKey));
+  GNUNET_CRYPTO_eddsa_key_get_public (private_key,
+                                                  &id->public_key);
   return private_key;
 }
 
   return private_key;
 }
 
@@ -734,7 +739,7 @@ struct UpdateContext
    * The system for which we are building configurations
    */
   struct GNUNET_TESTING_System *system;
    * The system for which we are building configurations
    */
   struct GNUNET_TESTING_System *system;
-  
+
   /**
    * The configuration we are building
    */
   /**
    * The configuration we are building
    */
@@ -743,7 +748,7 @@ struct UpdateContext
   /**
    * The customized service home path for this peer
    */
   /**
    * The customized service home path for this peer
    */
-  char *service_home;
+  char *gnunet_home;
 
   /**
    * Array of ports currently allocated to this peer.  These ports will be
 
   /**
    * Array of ports currently allocated to this peer.  These ports will be
@@ -835,7 +840,7 @@ update_config (void *cls, const char *section, const char *option,
                                               single_variable))
     {
       GNUNET_snprintf (uval, sizeof (uval), "%s/%s.sock",
                                               single_variable))
     {
       GNUNET_snprintf (uval, sizeof (uval), "%s/%s.sock",
-                       uc->service_home, section);
+                       uc->gnunet_home, section);
       value = uval;
     }
     else if ((GNUNET_YES ==
       value = uval;
     }
     else if ((GNUNET_YES ==
@@ -868,7 +873,7 @@ static void
 update_config_sections (void *cls,
                         const char *section)
 {
 update_config_sections (void *cls,
                         const char *section)
 {
-  struct UpdateContext *uc = cls;  
+  struct UpdateContext *uc = cls;
   char **ikeys;
   char *val;
   char *ptr;
   char **ikeys;
   char *val;
   char *ptr;
@@ -877,7 +882,7 @@ update_config_sections (void *cls,
   char *ACCEPT_FROM_key;
   uint16_t ikeys_cnt;
   uint16_t key;
   char *ACCEPT_FROM_key;
   uint16_t ikeys_cnt;
   uint16_t key;
-  
+
   ikeys_cnt = 0;
   val = NULL;
   /* Ignore certain options from sections.  See
   ikeys_cnt = 0;
   val = NULL;
   /* Ignore certain options from sections.  See
@@ -885,8 +890,8 @@ update_config_sections (void *cls,
   if (GNUNET_YES == GNUNET_CONFIGURATION_have_value (uc->cfg, section,
                                                      "TESTING_IGNORE_KEYS"))
   {
   if (GNUNET_YES == GNUNET_CONFIGURATION_have_value (uc->cfg, section,
                                                      "TESTING_IGNORE_KEYS"))
   {
-    GNUNET_assert 
-      (GNUNET_YES == 
+    GNUNET_assert
+      (GNUNET_YES ==
        GNUNET_CONFIGURATION_get_value_string (uc->cfg, section,
                                               "TESTING_IGNORE_KEYS", &val));
     ptr = val;
        GNUNET_CONFIGURATION_get_value_string (uc->cfg, section,
                                               "TESTING_IGNORE_KEYS", &val));
     ptr = val;
@@ -918,10 +923,10 @@ update_config_sections (void *cls,
        (GNUNET_YES == GNUNET_CONFIGURATION_have_value (uc->cfg, section,
                                                        "ADVERTISED_PORT")))
     {
        (GNUNET_YES == GNUNET_CONFIGURATION_have_value (uc->cfg, section,
                                                        "ADVERTISED_PORT")))
     {
-      if (GNUNET_OK == 
+      if (GNUNET_OK ==
          GNUNET_CONFIGURATION_get_value_string (uc->cfg, section, "PORT", &ptr))
       {
          GNUNET_CONFIGURATION_get_value_string (uc->cfg, section, "PORT", &ptr))
       {
-       GNUNET_CONFIGURATION_set_value_string (uc->cfg, section, 
+       GNUNET_CONFIGURATION_set_value_string (uc->cfg, section,
                                               "ADVERTISED_PORT", ptr);
        GNUNET_free (ptr);
       }
                                               "ADVERTISED_PORT", ptr);
        GNUNET_free (ptr);
       }
@@ -938,11 +943,11 @@ update_config_sections (void *cls,
     GNUNET_free (ikeys);
   }
   GNUNET_free_non_null (val);
     GNUNET_free (ikeys);
   }
   GNUNET_free_non_null (val);
-  ACCEPT_FROM_key = "ACCEPT_FROM";  
-  if ((NULL != uc->system->trusted_ip) && 
+  ACCEPT_FROM_key = "ACCEPT_FROM";
+  if ((NULL != uc->system->trusted_ip) &&
       (NULL != strstr (uc->system->trusted_ip, ":"))) /* IPv6 in use */
     ACCEPT_FROM_key = "ACCEPT_FROM6";
       (NULL != strstr (uc->system->trusted_ip, ":"))) /* IPv6 in use */
     ACCEPT_FROM_key = "ACCEPT_FROM6";
-  if (GNUNET_OK != 
+  if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_string (uc->cfg, section, ACCEPT_FROM_key,
                                              &orig_allowed_hosts))
   {
       GNUNET_CONFIGURATION_get_value_string (uc->cfg, section, ACCEPT_FROM_key,
                                              &orig_allowed_hosts))
   {
@@ -956,7 +961,7 @@ update_config_sections (void *cls,
   GNUNET_free (orig_allowed_hosts);
   GNUNET_CONFIGURATION_set_value_string (uc->cfg, section, ACCEPT_FROM_key,
                                          allowed_hosts);
   GNUNET_free (orig_allowed_hosts);
   GNUNET_CONFIGURATION_set_value_string (uc->cfg, section, ACCEPT_FROM_key,
                                          allowed_hosts);
-  GNUNET_free (allowed_hosts);  
+  GNUNET_free (allowed_hosts);
 }
 
 static struct SharedServiceInstance *
 }
 
 static struct SharedServiceInstance *
@@ -966,34 +971,34 @@ associate_shared_service (struct GNUNET_TESTING_System *system,
 {
   struct SharedServiceInstance *i;
   struct GNUNET_CONFIGURATION_Handle *temp;
 {
   struct SharedServiceInstance *i;
   struct GNUNET_CONFIGURATION_Handle *temp;
-  char *service_home;
+  char *gnunet_home;
   uint32_t port;
 
   ss->n_peers++;
   if ( ((0 == ss->share) && (NULL == ss->instances))
        ||
   uint32_t port;
 
   ss->n_peers++;
   if ( ((0 == ss->share) && (NULL == ss->instances))
        ||
-       ( (0 != ss->share) 
+       ( (0 != ss->share)
          && (ss->n_instances < ((ss->n_peers + ss->share - 1) / ss->share)) ) )
          && (ss->n_instances < ((ss->n_peers + ss->share - 1) / ss->share)) ) )
-  {    
-    i = GNUNET_malloc (sizeof (struct SharedServiceInstance));
+  {
+    i = GNUNET_new (struct SharedServiceInstance);
     i->ss = ss;
     i->ss = ss;
-    (void) GNUNET_asprintf (&service_home, "%s/shared/%s/%u",
+    (void) GNUNET_asprintf (&gnunet_home, "%s/shared/%s/%u",
                             system->tmppath, ss->sname, ss->n_instances);
                             system->tmppath, ss->sname, ss->n_instances);
-    (void) GNUNET_asprintf (&i->unix_sock, "%s/sock", service_home);
+    (void) GNUNET_asprintf (&i->unix_sock, "%s/sock", gnunet_home);
     port = GNUNET_TESTING_reserve_port (system);
     if (0 == port)
     {
     port = GNUNET_TESTING_reserve_port (system);
     if (0 == port)
     {
-      GNUNET_free (service_home);
+      GNUNET_free (gnunet_home);
       cleanup_shared_service_instance (i);
       return NULL;
     }
     GNUNET_array_append (ss->instances, ss->n_instances, i);
     temp = GNUNET_CONFIGURATION_dup (ss->cfg);
     (void) GNUNET_asprintf (&i->port_str, "%u", port);
       cleanup_shared_service_instance (i);
       return NULL;
     }
     GNUNET_array_append (ss->instances, ss->n_instances, i);
     temp = GNUNET_CONFIGURATION_dup (ss->cfg);
     (void) GNUNET_asprintf (&i->port_str, "%u", port);
-    (void) GNUNET_asprintf (&i->cfg_fn, "%s/config", service_home);
-    GNUNET_CONFIGURATION_set_value_string (temp, "PATHS", "SERVICEHOME",
-                                           service_home);
-    GNUNET_free (service_home);
+    (void) GNUNET_asprintf (&i->cfg_fn, "%s/config", gnunet_home);
+    GNUNET_CONFIGURATION_set_value_string (temp, "PATHS", "GNUNET_HOME",
+                                           gnunet_home);
+    GNUNET_free (gnunet_home);
     GNUNET_CONFIGURATION_set_value_string (temp, ss->sname, "UNIXPATH",
                                            i->unix_sock);
     GNUNET_CONFIGURATION_set_value_string (temp, ss->sname, "PORT",
     GNUNET_CONFIGURATION_set_value_string (temp, ss->sname, "UNIXPATH",
                                            i->unix_sock);
     GNUNET_CONFIGURATION_set_value_string (temp, ss->sname, "PORT",
@@ -1012,7 +1017,7 @@ associate_shared_service (struct GNUNET_TESTING_System *system,
     GNUNET_assert (0 < ss->n_instances);
     i = ss->instances[ss->n_instances - 1];
   }
     GNUNET_assert (0 < ss->n_instances);
     i = ss->instances[ss->n_instances - 1];
   }
-  GNUNET_CONFIGURATION_iterate_section_values(ss->cfg, ss->sname, 
+  GNUNET_CONFIGURATION_iterate_section_values(ss->cfg, ss->sname,
                                               &cfg_copy_iterator, cfg);
   GNUNET_CONFIGURATION_set_value_string (cfg, ss->sname, "UNIXPATH",
                                          i->unix_sock);
                                               &cfg_copy_iterator, cfg);
   GNUNET_CONFIGURATION_set_value_string (cfg, ss->sname, "UNIXPATH",
                                          i->unix_sock);
@@ -1025,9 +1030,9 @@ associate_shared_service (struct GNUNET_TESTING_System *system,
  * Create a new configuration using the given configuration as a template;
  * ports and paths will be modified to select available ports on the local
  * system. The default configuration will be available in PATHS section under
  * Create a new configuration using the given configuration as a template;
  * ports and paths will be modified to select available ports on the local
  * system. The default configuration will be available in PATHS section under
- * the option DEFAULTCONFIG after the call. SERVICE_HOME is also set in PATHS
+ * the option DEFAULTCONFIG after the call. GNUNET_HOME is also set in PATHS
  * section to the temporary directory specific to this configuration. If we run
  * section to the temporary directory specific to this configuration. If we run
- * out of "*port" numbers, return SYSERR.
+ * out of "*port" numbers, return #GNUNET_SYSERR.
  *
  * This is primarily a helper function used internally
  * by 'GNUNET_TESTING_peer_configure'.
  *
  * This is primarily a helper function used internally
  * by 'GNUNET_TESTING_peer_configure'.
@@ -1037,7 +1042,7 @@ associate_shared_service (struct GNUNET_TESTING_System *system,
  * @param ports array with port numbers used in the created configuration.
  *          Will be updated upon successful return.  Can be NULL
  * @param nports the size of the `ports' array.  Will be updated.
  * @param ports array with port numbers used in the created configuration.
  *          Will be updated upon successful return.  Can be NULL
  * @param nports the size of the `ports' array.  Will be updated.
- * @return GNUNET_OK on success, GNUNET_SYSERR on error - the configuration will
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error - the configuration will
  *           be incomplete and should not be used there upon
  */
 static int
  *           be incomplete and should not be used there upon
  */
 static int
@@ -1047,32 +1052,32 @@ GNUNET_TESTING_configuration_create_ (struct GNUNET_TESTING_System *system,
                                       unsigned int *nports)
 {
   struct UpdateContext uc;
                                       unsigned int *nports)
 {
   struct UpdateContext uc;
-  char *default_config;  
+  char *default_config;
 
   uc.system = system;
   uc.cfg = cfg;
   uc.status = GNUNET_OK;
   uc.ports = NULL;
   uc.nports = 0;
 
   uc.system = system;
   uc.cfg = cfg;
   uc.status = GNUNET_OK;
   uc.ports = NULL;
   uc.nports = 0;
-  GNUNET_asprintf (&uc.service_home, "%s/%u", system->tmppath,
+  GNUNET_asprintf (&uc.gnunet_home, "%s/%u", system->tmppath,
                    system->path_counter++);
                    system->path_counter++);
-  GNUNET_asprintf (&default_config, "%s/config", uc.service_home);
+  GNUNET_asprintf (&default_config, "%s/config", uc.gnunet_home);
   GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG",
                                          default_config);
   GNUNET_CONFIGURATION_set_value_string (cfg, "arm", "CONFIG",
                                          default_config);
   GNUNET_free (default_config);
   GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG",
                                          default_config);
   GNUNET_CONFIGURATION_set_value_string (cfg, "arm", "CONFIG",
                                          default_config);
   GNUNET_free (default_config);
-  GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "SERVICEHOME",
-                                         uc.service_home);
+  GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "GNUNET_HOME",
+                                         uc.gnunet_home);
   /* make PORTs and UNIXPATHs unique */
   GNUNET_CONFIGURATION_iterate (cfg, &update_config, &uc);
   /* allow connections to services from system trusted_ip host */
   GNUNET_CONFIGURATION_iterate_sections (cfg, &update_config_sections, &uc);
   /* enable loopback-based connections between peers */
   /* make PORTs and UNIXPATHs unique */
   GNUNET_CONFIGURATION_iterate (cfg, &update_config, &uc);
   /* allow connections to services from system trusted_ip host */
   GNUNET_CONFIGURATION_iterate_sections (cfg, &update_config_sections, &uc);
   /* enable loopback-based connections between peers */
-  GNUNET_CONFIGURATION_set_value_string (cfg, 
+  GNUNET_CONFIGURATION_set_value_string (cfg,
                                         "nat",
                                         "USE_LOCALADDR", "YES");
                                         "nat",
                                         "USE_LOCALADDR", "YES");
-  GNUNET_free (uc.service_home);
+  GNUNET_free (uc.gnunet_home);
   if ((NULL != ports) && (NULL != nports))
   {
     *ports = uc.ports;
   if ((NULL != ports) && (NULL != nports))
   {
     *ports = uc.ports;
@@ -1088,7 +1093,7 @@ GNUNET_TESTING_configuration_create_ (struct GNUNET_TESTING_System *system,
  * Create a new configuration using the given configuration as a template;
  * ports and paths will be modified to select available ports on the local
  * system. The default configuration will be available in PATHS section under
  * Create a new configuration using the given configuration as a template;
  * ports and paths will be modified to select available ports on the local
  * system. The default configuration will be available in PATHS section under
- * the option DEFAULTCONFIG after the call. SERVICE_HOME is also set in PATHS
+ * the option DEFAULTCONFIG after the call. GNUNET_HOME is also set in PATHS
  * section to the temporary directory specific to this configuration. If we run
  * out of "*port" numbers, return SYSERR.
  *
  * section to the temporary directory specific to this configuration. If we run
  * out of "*port" numbers, return SYSERR.
  *
@@ -1110,14 +1115,14 @@ GNUNET_TESTING_configuration_create (struct GNUNET_TESTING_System *system,
 
 /**
  * Configure a GNUnet peer.  GNUnet must be installed on the local
 
 /**
  * Configure a GNUnet peer.  GNUnet must be installed on the local
- * system and available in the PATH. 
+ * system and available in the PATH.
  *
  * @param system system to use to coordinate resource usage
  * @param cfg configuration to use; will be UPDATED (to reflect needed
  *            changes in port numbers and paths)
  * @param key_number number of the hostkey to use for the peer
  * @param id identifier for the daemon, will be set, can be NULL
  *
  * @param system system to use to coordinate resource usage
  * @param cfg configuration to use; will be UPDATED (to reflect needed
  *            changes in port numbers and paths)
  * @param key_number number of the hostkey to use for the peer
  * @param id identifier for the daemon, will be set, can be NULL
- * @param emsg set to freshly allocated error message (set to NULL on success), 
+ * @param emsg set to freshly allocated error message (set to NULL on success),
  *          can be NULL
  * @return handle to the peer, NULL on error
  */
  *          can be NULL
  * @return handle to the peer, NULL on error
  */
@@ -1134,12 +1139,12 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
   char *config_filename;
   char *libexec_binary;
   char *emsg_;
   char *config_filename;
   char *libexec_binary;
   char *emsg_;
-  struct GNUNET_CRYPTO_EccPrivateKey *pk;
+  struct GNUNET_CRYPTO_EddsaPrivateKey *pk;
   uint16_t *ports;
   struct SharedService *ss;
   struct SharedServiceInstance **ss_instances;
   unsigned int cnt;
   uint16_t *ports;
   struct SharedService *ss;
   struct SharedServiceInstance **ss_instances;
   unsigned int cnt;
-  unsigned int nports;      
+  unsigned int nports;
 
   ports = NULL;
   nports = 0;
 
   ports = NULL;
   nports = 0;
@@ -1150,7 +1155,7 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
   {
     GNUNET_asprintf (&emsg_,
                     _("You attempted to create a testbed with more than %u hosts.  Please precompute more hostkeys first.\n"),
   {
     GNUNET_asprintf (&emsg_,
                     _("You attempted to create a testbed with more than %u hosts.  Please precompute more hostkeys first.\n"),
-                    (unsigned int) system->total_hostkeys);    
+                    (unsigned int) system->total_hostkeys);
     goto err_ret;
   }
   pk = NULL;
     goto err_ret;
   }
   pk = NULL;
@@ -1161,13 +1166,13 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
                     _("Failed to initialize hostkey for peer %u\n"),
                     (unsigned int) key_number);
     goto err_ret;
                     _("Failed to initialize hostkey for peer %u\n"),
                     (unsigned int) key_number);
     goto err_ret;
-  }  
+  }
   if (NULL != pk)
     GNUNET_free (pk);
   if (NULL != pk)
     GNUNET_free (pk);
-  if (GNUNET_NO == 
+  if (GNUNET_NO ==
       GNUNET_CONFIGURATION_have_value (cfg, "PEER", "PRIVATE_KEY"))
   {
       GNUNET_CONFIGURATION_have_value (cfg, "PEER", "PRIVATE_KEY"))
   {
-    GNUNET_asprintf (&emsg_, 
+    GNUNET_asprintf (&emsg_,
                      _("PRIVATE_KEY option in PEER section missing in configuration\n"));
     goto err_ret;
   }
                      _("PRIVATE_KEY option in PEER section missing in configuration\n"));
     goto err_ret;
   }
@@ -1185,13 +1190,13 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
                        "(not enough free ports?)\n"));
     goto err_ret;
   }
                        "(not enough free ports?)\n"));
     goto err_ret;
   }
-  GNUNET_assert (GNUNET_OK == 
+  GNUNET_assert (GNUNET_OK ==
                  GNUNET_CONFIGURATION_get_value_filename (cfg, "PEER",
                                                          "PRIVATE_KEY",
                                                          &hostkey_filename));
   fd = GNUNET_DISK_file_open (hostkey_filename,
                               GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE,
                  GNUNET_CONFIGURATION_get_value_filename (cfg, "PEER",
                                                          "PRIVATE_KEY",
                                                          &hostkey_filename));
   fd = GNUNET_DISK_file_open (hostkey_filename,
                               GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE,
-                              GNUNET_DISK_PERM_USER_READ 
+                              GNUNET_DISK_PERM_USER_READ
                               | GNUNET_DISK_PERM_USER_WRITE);
   if (NULL == fd)
   {
                               | GNUNET_DISK_PERM_USER_WRITE);
   if (NULL == fd)
   {
@@ -1202,7 +1207,7 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
   }
   GNUNET_free (hostkey_filename);
   if (GNUNET_TESTING_HOSTKEYFILESIZE !=
   }
   GNUNET_free (hostkey_filename);
   if (GNUNET_TESTING_HOSTKEYFILESIZE !=
-      GNUNET_DISK_file_write (fd, system->hostkeys_data 
+      GNUNET_DISK_file_write (fd, system->hostkeys_data
                              + (key_number * GNUNET_TESTING_HOSTKEYFILESIZE),
                              GNUNET_TESTING_HOSTKEYFILESIZE))
   {
                              + (key_number * GNUNET_TESTING_HOSTKEYFILESIZE),
                              GNUNET_TESTING_HOSTKEYFILESIZE))
   {
@@ -1221,22 +1226,25 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
     ss = system->shared_services[cnt];
     ss_instances[cnt] = associate_shared_service (system, ss, cfg);
     if (NULL == ss_instances[cnt])
     ss = system->shared_services[cnt];
     ss_instances[cnt] = associate_shared_service (system, ss, cfg);
     if (NULL == ss_instances[cnt])
+    {
+      emsg_ = GNUNET_strdup ("FIXME");
       goto err_ret;
       goto err_ret;
-  }  
+    }
+  }
   GNUNET_assert (GNUNET_OK ==
   GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CONFIGURATION_get_value_string 
-                 (cfg, "PATHS", "DEFAULTCONFIG", &config_filename));  
+                 GNUNET_CONFIGURATION_get_value_filename
+                 (cfg, "PATHS", "DEFAULTCONFIG", &config_filename));
   if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, config_filename))
   {
     GNUNET_asprintf (&emsg_,
                     _("Failed to write configuration file `%s' for peer %u: %s\n"),
                     config_filename,
                     (unsigned int) key_number,
   if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, config_filename))
   {
     GNUNET_asprintf (&emsg_,
                     _("Failed to write configuration file `%s' for peer %u: %s\n"),
                     config_filename,
                     (unsigned int) key_number,
-                    STRERROR (errno));    
+                    STRERROR (errno));
     GNUNET_free (config_filename);
     goto err_ret;
   }
     GNUNET_free (config_filename);
     goto err_ret;
   }
-  peer = GNUNET_malloc (sizeof (struct GNUNET_TESTING_Peer));
+  peer = GNUNET_new (struct GNUNET_TESTING_Peer);
   peer->ss_instances = ss_instances;
   peer->cfgfile = config_filename; /* Free in peer_destroy */
   peer->cfg = GNUNET_CONFIGURATION_dup (cfg);
   peer->ss_instances = ss_instances;
   peer->cfgfile = config_filename; /* Free in peer_destroy */
   peer->cfg = GNUNET_CONFIGURATION_dup (cfg);
@@ -1248,7 +1256,9 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system,
     peer->args = strdup ("");
   }
   else
     peer->args = strdup ("");
   }
   else
+  {
     peer->args = strdup (libexec_binary);
     peer->args = strdup (libexec_binary);
+  }
   peer->system = system;
   peer->key_number = key_number;
   GNUNET_free (libexec_binary);
   peer->system = system;
   peer->key_number = key_number;
   GNUNET_free (libexec_binary);
@@ -1283,7 +1293,7 @@ GNUNET_TESTING_peer_get_identity (struct GNUNET_TESTING_Peer *peer,
     memcpy (id, peer->id, sizeof (struct GNUNET_PeerIdentity));
     return;
   }
     memcpy (id, peer->id, sizeof (struct GNUNET_PeerIdentity));
     return;
   }
-  peer->id = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity));
+  peer->id = GNUNET_new (struct GNUNET_PeerIdentity);
   GNUNET_free (GNUNET_TESTING_hostkey_get (peer->system,
                                                          peer->key_number,
                                                          peer->id));
   GNUNET_free (GNUNET_TESTING_hostkey_get (peer->system,
                                                          peer->key_number,
                                                          peer->id));
@@ -1292,7 +1302,7 @@ GNUNET_TESTING_peer_get_identity (struct GNUNET_TESTING_Peer *peer,
 
 
 /**
 
 
 /**
- * Start the peer. 
+ * Start the peer.
  *
  * @param peer peer to start
  * @return GNUNET_OK on success, GNUNET_SYSERR on error (i.e. peer already running)
  *
  * @param peer peer to start
  * @return GNUNET_OK on success, GNUNET_SYSERR on error (i.e. peer already running)
@@ -1307,7 +1317,7 @@ GNUNET_TESTING_peer_start (struct GNUNET_TESTING_Peer *peer)
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
-  }  
+  }
   GNUNET_assert (NULL != peer->cfgfile);
   for (cnt = 0; cnt < peer->system->n_shared_services; cnt++)
   {
   GNUNET_assert (NULL != peer->cfgfile);
   for (cnt = 0; cnt < peer->system->n_shared_services; cnt++)
   {
@@ -1317,15 +1327,15 @@ GNUNET_TESTING_peer_start (struct GNUNET_TESTING_Peer *peer)
       return GNUNET_SYSERR;
     i->n_refs++;
   }
       return GNUNET_SYSERR;
     i->n_refs++;
   }
-  peer->main_process = GNUNET_OS_start_process (PIPE_CONTROL, 
-                                                GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-                                                NULL, NULL,
-                                                peer->main_binary,
-                                                peer->main_binary,
-                                                peer->args,
-                                                "-c",
-                                                peer->cfgfile,
-                                                NULL);
+  peer->main_binary = GNUNET_CONFIGURATION_expand_dollar (peer->cfg, peer->main_binary);
+  peer->main_process = GNUNET_OS_start_process_s (PIPE_CONTROL,
+                                                  GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
+                                                  NULL,
+                                                  peer->main_binary,
+                                                  peer->args,
+                                                  "-c",
+                                                  peer->cfgfile,
+                                                  NULL);
   if (NULL == peer->main_process)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
   if (NULL == peer->main_process)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1380,7 +1390,7 @@ GNUNET_TESTING_peer_service_start (struct GNUNET_TESTING_Peer *peer,
  * @return GNUNET_OK upon successfully queuing the service stop request;
  *           GNUNET_SYSERR upon error
  */
  * @return GNUNET_OK upon successfully queuing the service stop request;
  *           GNUNET_SYSERR upon error
  */
-int 
+int
 GNUNET_TESTING_peer_service_stop (struct GNUNET_TESTING_Peer *peer,
                                   const char *service_name,
                                   struct GNUNET_TIME_Relative timeout,
 GNUNET_TESTING_peer_service_stop (struct GNUNET_TESTING_Peer *peer,
                                   const char *service_name,
                                   struct GNUNET_TIME_Relative timeout,
@@ -1389,13 +1399,13 @@ GNUNET_TESTING_peer_service_stop (struct GNUNET_TESTING_Peer *peer,
 {
   if (NULL == peer->ah)
     return GNUNET_SYSERR;
 {
   if (NULL == peer->ah)
     return GNUNET_SYSERR;
-  GNUNET_ARM_request_service_stop (peer->ah, 
+  GNUNET_ARM_request_service_stop (peer->ah,
                                    service_name,
                                    timeout,
                                    cont, cont_cls);
   return GNUNET_OK;
 }
                                    service_name,
                                    timeout,
                                    cont, cont_cls);
   return GNUNET_OK;
 }
-                                       
+
 
 /**
  * Sends SIGTERM to the peer's main process
 
 /**
  * Sends SIGTERM to the peer's main process
@@ -1415,7 +1425,7 @@ GNUNET_TESTING_peer_kill (struct GNUNET_TESTING_Peer *peer)
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
-  if (0 != GNUNET_OS_process_kill (peer->main_process, SIGTERM))
+  if (0 != GNUNET_OS_process_kill (peer->main_process, GNUNET_TERM_SIG))
     return GNUNET_SYSERR;
   for (cnt = 0; cnt < peer->system->n_shared_services; cnt++)
   {
     return GNUNET_SYSERR;
   for (cnt = 0; cnt < peer->system->n_shared_services; cnt++)
   {
@@ -1454,7 +1464,7 @@ GNUNET_TESTING_peer_wait (struct GNUNET_TESTING_Peer *peer)
 
 
 /**
 
 
 /**
- * Stop the peer. 
+ * Stop the peer.
  *
  * @param peer peer to stop
  * @return GNUNET_OK on success, GNUNET_SYSERR on error
  *
  * @param peer peer to stop
  * @return GNUNET_OK on success, GNUNET_SYSERR on error
@@ -1478,7 +1488,7 @@ GNUNET_TESTING_peer_stop (struct GNUNET_TESTING_Peer *peer)
  *                  GNUNET_SYSERR on error.
  */
 static void
  *                  GNUNET_SYSERR on error.
  */
 static void
-disconn_status (void *cls, 
+disconn_status (void *cls,
                 int connected)
 {
   struct GNUNET_TESTING_Peer *peer = cls;
                 int connected)
 {
   struct GNUNET_TESTING_Peer *peer = cls;
@@ -1517,7 +1527,7 @@ GNUNET_TESTING_peer_stop_async (struct GNUNET_TESTING_Peer *peer,
                                 void *cb_cls)
 {
   if (NULL == peer->main_process)
                                 void *cb_cls)
 {
   if (NULL == peer->main_process)
-    return GNUNET_SYSERR;  
+    return GNUNET_SYSERR;
   peer->ah = GNUNET_ARM_connect (peer->cfg, &disconn_status, peer);
   if (NULL == peer->ah)
     return GNUNET_SYSERR;
   peer->ah = GNUNET_ARM_connect (peer->cfg, &disconn_status, peer);
   if (NULL == peer->ah)
     return GNUNET_SYSERR;
@@ -1538,7 +1548,7 @@ GNUNET_TESTING_peer_stop_async (struct GNUNET_TESTING_Peer *peer,
  */
 void
 GNUNET_TESTING_peer_stop_async_cancel (struct GNUNET_TESTING_Peer *peer)
  */
 void
 GNUNET_TESTING_peer_stop_async_cancel (struct GNUNET_TESTING_Peer *peer)
-{  
+{
   GNUNET_assert (NULL != peer->ah);
   GNUNET_ARM_disconnect_and_free (peer->ah);
   peer->ah = NULL;
   GNUNET_assert (NULL != peer->ah);
   GNUNET_ARM_disconnect_and_free (peer->ah);
   peer->ah = NULL;
@@ -1621,7 +1631,7 @@ struct ServiceContext
    * Callback to signal service startup
    */
   GNUNET_TESTING_TestMain tm;
    * Callback to signal service startup
    */
   GNUNET_TESTING_TestMain tm;
-  
+
   /**
    * The peer in which the service is run.
    */
   /**
    * The peer in which the service is run.
    */
@@ -1722,7 +1732,7 @@ GNUNET_TESTING_service_run (const char *testdir,
   GNUNET_free (libexec_binary);
   GNUNET_free (binary);
   if (GNUNET_OK != GNUNET_TESTING_peer_start (peer))
   GNUNET_free (libexec_binary);
   GNUNET_free (binary);
   if (GNUNET_OK != GNUNET_TESTING_peer_start (peer))
-  {    
+  {
     GNUNET_TESTING_peer_destroy (peer);
     GNUNET_CONFIGURATION_destroy (cfg);
     GNUNET_TESTING_system_destroy (system, GNUNET_YES);
     GNUNET_TESTING_peer_destroy (peer);
     GNUNET_CONFIGURATION_destroy (cfg);
     GNUNET_TESTING_system_destroy (system, GNUNET_YES);
@@ -1752,14 +1762,14 @@ GNUNET_TESTING_service_run (const char *testdir,
  * Sometimes we use the binary name to determine which specific
  * test to run.  In those cases, the string after the last "_"
  * in 'argv[0]' specifies a string that determines the configuration
  * Sometimes we use the binary name to determine which specific
  * test to run.  In those cases, the string after the last "_"
  * in 'argv[0]' specifies a string that determines the configuration
- * file or plugin to use.  
+ * file or plugin to use.
  *
  * This function returns the respective substring, taking care
  * of issues such as binaries ending in '.exe' on W32.
  *
  * @param argv0 the name of the binary
  * @return string between the last '_' and the '.exe' (or the end of the string),
  *
  * This function returns the respective substring, taking care
  * of issues such as binaries ending in '.exe' on W32.
  *
  * @param argv0 the name of the binary
  * @return string between the last '_' and the '.exe' (or the end of the string),
- *         NULL if argv0 has no '_' 
+ *         NULL if argv0 has no '_'
  */
 char *
 GNUNET_TESTING_get_testname_from_underscore (const char *argv0)
  */
 char *
 GNUNET_TESTING_get_testname_from_underscore (const char *argv0)