X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftesting%2Ftesting.c;h=f4df6d48c45376ee82691f38db44c150502bf63a;hb=f4d040c0f0dd2fef3d73b1f4532c76219f760f75;hp=11d42206fd7226912b5eee66f523cac3195daf62;hpb=e42f4ea1e1a754236530dbfe16afaef90a6ce9f2;p=oweals%2Fgnunet.git diff --git a/src/testing/testing.c b/src/testing/testing.c index 11d42206f..f4df6d48c 100644 --- a/src/testing/testing.c +++ b/src/testing/testing.c @@ -363,6 +363,7 @@ GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system, struct GNUNET_NETWORK_Handle *socket; struct addrinfo hint; struct addrinfo *ret; + struct addrinfo *ai; uint32_t *port_buckets; char *open_port_str; int bind_status; @@ -409,19 +410,25 @@ GNUNET_TESTING_reserve_port (struct GNUNET_TESTING_System *system, GNUNET_asprintf (&open_port_str, "%u", (unsigned int) open_port); ret = NULL; GNUNET_assert (0 == getaddrinfo (NULL, open_port_str, &hint, &ret)); - GNUNET_free (open_port_str); - socket = GNUNET_NETWORK_socket_create (ret->ai_family, - (GNUNET_YES == is_tcp) ? - SOCK_STREAM : SOCK_DGRAM, - 0); - GNUNET_assert (NULL != socket); - bind_status = GNUNET_NETWORK_socket_bind (socket, - ret->ai_addr, - ret->ai_addrlen); - freeaddrinfo (ret); - GNUNET_NETWORK_socket_close (socket); - socket = NULL; + GNUNET_free (open_port_str); + bind_status = GNUNET_NO; + for (ai = ret; NULL != ai; ai = ai->ai_next) + { + socket = GNUNET_NETWORK_socket_create (ai->ai_family, + (GNUNET_YES == is_tcp) ? + SOCK_STREAM : SOCK_DGRAM, + 0); + if (NULL == socket) + continue; + bind_status = GNUNET_NETWORK_socket_bind (socket, + ai->ai_addr, + ai->ai_addrlen); + GNUNET_NETWORK_socket_close (socket); + if (GNUNET_OK != bind_status) + break; + } port_buckets[index] |= (1U << pos); /* Set the port bit */ + freeaddrinfo (ret); if (GNUNET_OK == bind_status) { LOG (GNUNET_ERROR_TYPE_DEBUG, @@ -926,7 +933,7 @@ GNUNET_TESTING_peer_configure (struct GNUNET_TESTING_System *system, } peer = GNUNET_malloc (sizeof (struct GNUNET_TESTING_Peer)); peer->cfgfile = config_filename; /* Free in peer_destroy */ - peer->main_binary = GNUNET_strdup ("gnunet-service-arm"); + peer->main_binary = GNUNET_OS_get_libexec_binary_path ("gnunet-service-arm"); peer->system = system; peer->key_number = key_number; return peer; @@ -1127,6 +1134,7 @@ GNUNET_TESTING_service_run (const char *testdir, struct GNUNET_TESTING_System *system; struct GNUNET_TESTING_Peer *peer; struct GNUNET_CONFIGURATION_Handle *cfg; + char *binary; GNUNET_log_setup (testdir, "WARNING", NULL); system = GNUNET_TESTING_system_create (testdir, "127.0.0.1", NULL); @@ -1150,7 +1158,9 @@ GNUNET_TESTING_service_run (const char *testdir, return 1; } GNUNET_free (peer->main_binary); - GNUNET_asprintf (&peer->main_binary, "gnunet-service-%s", service_name); + GNUNET_asprintf (&binary, "gnunet-service-%s", service_name); + peer->main_binary = GNUNET_OS_get_libexec_binary_path (binary); + GNUNET_free (binary); if (GNUNET_OK != GNUNET_TESTING_peer_start (peer)) { GNUNET_TESTING_peer_destroy (peer);