X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftesting%2Ftesting.c;h=a4fdd38cabcf55eaef7107777a97f7672c3ba834;hb=cea95af17bb3bfaf65224d0ecd2db2308e333764;hp=db74f88979a5085f3172ac8bdd6c9b5362c7f52d;hpb=65e91346db9fe4ca1b1ff6516872454c468eb7f2;p=oweals%2Fgnunet.git diff --git a/src/testing/testing.c b/src/testing/testing.c index db74f8897..a4fdd38ca 100644 --- a/src/testing/testing.c +++ b/src/testing/testing.c @@ -103,7 +103,8 @@ struct GNUNET_TESTING_System { /** * Prefix (i.e. "/tmp/gnunet-testing/") we prepend to each - * SERVICEHOME. */ + * GNUNET_HOME. + */ 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. */ - uint32_t path_counter; + uint32_t path_counter; /** * The number of hostkeys @@ -185,13 +186,13 @@ struct GNUNET_TESTING_Peer /** * 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). - */ + */ char *main_binary; char *args; - + /** * 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 - */ + */ GNUNET_TESTING_PeerStopCallback cb; - + /** * 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() @@ -260,7 +261,7 @@ struct GNUNET_TESTING_Peer 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; @@ -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_free (data_dir); + GNUNET_free (data_dir); 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 */ - if (GNUNET_OK != + if (GNUNET_OK != 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 - * 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 @@ -384,8 +387,11 @@ GNUNET_TESTING_system_create_with_portrange (const char *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) @@ -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]; - 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); + 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); @@ -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 - * 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 @@ -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, - NULL, NULL, + NULL, NULL, NULL, libexec_binary, libexec_binary, "-c", @@ -500,7 +510,7 @@ static void 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); @@ -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 */ -uint16_t +uint16_t 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. - + 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, - ai->ai_addrlen, - 0); + ai->ai_addrlen); 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, - ai->ai_addrlen, - 0); + ai->ai_addrlen); GNUNET_NETWORK_socket_close (socket); if (GNUNET_OK != bind_status) break; @@ -683,11 +691,11 @@ 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 - * 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 - * by 'GNUNET_TESTING_peer_configure'. + * by #GNUNET_TESTING_peer_configure. * * @param system the testing system handle * @param key_number desired pre-created hostkey to obtain @@ -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) */ -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) -{ - struct GNUNET_CRYPTO_EccPrivateKey *private_key; - struct GNUNET_CRYPTO_EccPublicKey public_key; - +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *private_key; + if ((NULL == id) || (NULL == system->hostkeys_data)) return NULL; if (key_number >= system->total_hostkeys) @@ -710,22 +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; - } - 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); - if (NULL == private_key) - { - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Error while decoding key %u\n"), key_number); - return NULL; - } - GNUNET_CRYPTO_ecc_key_get_public (private_key, &public_key); - GNUNET_CRYPTO_hash (&public_key, - sizeof (struct GNUNET_CRYPTO_EccPublicKey), - &(id->hashPubKey)); + GNUNET_CRYPTO_eddsa_key_get_public (private_key, + &id->public_key); return private_key; } @@ -740,7 +739,7 @@ struct UpdateContext * The system for which we are building configurations */ struct GNUNET_TESTING_System *system; - + /** * The configuration we are building */ @@ -749,7 +748,7 @@ struct UpdateContext /** * 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 @@ -841,7 +840,7 @@ update_config (void *cls, const char *section, const char *option, single_variable)) { GNUNET_snprintf (uval, sizeof (uval), "%s/%s.sock", - uc->service_home, section); + uc->gnunet_home, section); value = uval; } else if ((GNUNET_YES == @@ -874,7 +873,7 @@ static void update_config_sections (void *cls, const char *section) { - struct UpdateContext *uc = cls; + struct UpdateContext *uc = cls; char **ikeys; char *val; char *ptr; @@ -883,7 +882,7 @@ update_config_sections (void *cls, char *ACCEPT_FROM_key; uint16_t ikeys_cnt; uint16_t key; - + ikeys_cnt = 0; val = NULL; /* Ignore certain options from sections. See @@ -891,8 +890,8 @@ update_config_sections (void *cls, 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; @@ -924,10 +923,10 @@ update_config_sections (void *cls, (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_set_value_string (uc->cfg, section, + GNUNET_CONFIGURATION_set_value_string (uc->cfg, section, "ADVERTISED_PORT", ptr); GNUNET_free (ptr); } @@ -944,11 +943,11 @@ update_config_sections (void *cls, 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"; - if (GNUNET_OK != + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (uc->cfg, section, ACCEPT_FROM_key, &orig_allowed_hosts)) { @@ -962,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 (allowed_hosts); + GNUNET_free (allowed_hosts); } static struct SharedServiceInstance * @@ -972,34 +971,34 @@ associate_shared_service (struct GNUNET_TESTING_System *system, { 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)) || - ( (0 != ss->share) + ( (0 != 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; - (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); - (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) { - 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); - (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", @@ -1018,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_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); @@ -1031,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 - * 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. + * out of "*port" numbers, return #GNUNET_SYSERR. * * This is primarily a helper function used internally * by 'GNUNET_TESTING_peer_configure'. @@ -1043,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. - * @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 @@ -1053,32 +1052,32 @@ GNUNET_TESTING_configuration_create_ (struct GNUNET_TESTING_System *system, 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; - GNUNET_asprintf (&uc.service_home, "%s/%u", system->tmppath, + GNUNET_asprintf (&uc.gnunet_home, "%s/%u", system->tmppath, 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", "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 */ - GNUNET_CONFIGURATION_set_value_string (cfg, + GNUNET_CONFIGURATION_set_value_string (cfg, "nat", "USE_LOCALADDR", "YES"); - GNUNET_free (uc.service_home); + GNUNET_free (uc.gnunet_home); if ((NULL != ports) && (NULL != nports)) { *ports = uc.ports; @@ -1094,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 - * 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. * @@ -1116,14 +1115,14 @@ GNUNET_TESTING_configuration_create (struct GNUNET_TESTING_System *system, /** * 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 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 */ @@ -1140,12 +1139,12 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system, 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; - unsigned int nports; + unsigned int nports; ports = NULL; nports = 0; @@ -1156,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"), - (unsigned int) system->total_hostkeys); + (unsigned int) system->total_hostkeys); goto err_ret; } pk = NULL; @@ -1167,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; - } + } if (NULL != pk) GNUNET_free (pk); - if (GNUNET_NO == + if (GNUNET_NO == 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; } @@ -1191,22 +1190,24 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system, "(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_DISK_PERM_USER_READ + GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); if (NULL == fd) { - GNUNET_asprintf (&emsg_, _("Cannot open hostkey file: %s\n"), - STRERROR (errno)); + GNUNET_asprintf (&emsg_, _("Cannot open hostkey file `%s': %s\n"), + hostkey_filename, STRERROR (errno)); + GNUNET_free (hostkey_filename); goto err_ret; } + 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)) { @@ -1225,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]) + { + emsg_ = GNUNET_strdup ("FIXME"); goto err_ret; - } + } + } 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, - STRERROR (errno)); + STRERROR (errno)); 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); @@ -1252,7 +1256,9 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system, peer->args = strdup (""); } else + { peer->args = strdup (libexec_binary); + } peer->system = system; peer->key_number = key_number; GNUNET_free (libexec_binary); @@ -1287,7 +1293,7 @@ GNUNET_TESTING_peer_get_identity (struct GNUNET_TESTING_Peer *peer, 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)); @@ -1296,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) @@ -1311,7 +1317,7 @@ GNUNET_TESTING_peer_start (struct GNUNET_TESTING_Peer *peer) { GNUNET_break (0); return GNUNET_SYSERR; - } + } GNUNET_assert (NULL != peer->cfgfile); for (cnt = 0; cnt < peer->system->n_shared_services; cnt++) { @@ -1321,15 +1327,15 @@ GNUNET_TESTING_peer_start (struct GNUNET_TESTING_Peer *peer) 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, @@ -1384,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 */ -int +int GNUNET_TESTING_peer_service_stop (struct GNUNET_TESTING_Peer *peer, const char *service_name, struct GNUNET_TIME_Relative timeout, @@ -1393,13 +1399,13 @@ GNUNET_TESTING_peer_service_stop (struct GNUNET_TESTING_Peer *peer, { 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; } - + /** * Sends SIGTERM to the peer's main process @@ -1419,7 +1425,7 @@ GNUNET_TESTING_peer_kill (struct GNUNET_TESTING_Peer *peer) 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++) { @@ -1458,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 @@ -1482,7 +1488,7 @@ GNUNET_TESTING_peer_stop (struct GNUNET_TESTING_Peer *peer) * GNUNET_SYSERR on error. */ static void -disconn_status (void *cls, +disconn_status (void *cls, int connected) { struct GNUNET_TESTING_Peer *peer = cls; @@ -1521,7 +1527,7 @@ GNUNET_TESTING_peer_stop_async (struct GNUNET_TESTING_Peer *peer, 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; @@ -1542,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) -{ +{ GNUNET_assert (NULL != peer->ah); GNUNET_ARM_disconnect_and_free (peer->ah); peer->ah = NULL; @@ -1625,7 +1631,7 @@ struct ServiceContext * Callback to signal service startup */ GNUNET_TESTING_TestMain tm; - + /** * The peer in which the service is run. */ @@ -1726,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_TESTING_peer_destroy (peer); GNUNET_CONFIGURATION_destroy (cfg); GNUNET_TESTING_system_destroy (system, GNUNET_YES); @@ -1756,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 - * 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), - * NULL if argv0 has no '_' + * NULL if argv0 has no '_' */ char * GNUNET_TESTING_get_testname_from_underscore (const char *argv0)