#include "gnunet_testing_lib.h"
#include "gnunet_core_service.h"
-#define VERBOSE GNUNET_YES
+#define VERBOSE GNUNET_NO
/**
* How long until we fail the whole testcase?
static int ok;
+struct GNUNET_TIME_Relative connect_timeout;
+
+static unsigned long long connect_attempts;
+
static unsigned long long num_peers;
static unsigned int total_connections;
static struct GNUNET_TESTING_PeerGroup *pg;
-static struct GNUNET_SCHEDULER_Handle *sched;
-
const struct GNUNET_CONFIGURATION_Handle *main_cfg;
GNUNET_SCHEDULER_TaskIdentifier die_task;
static char *blacklist_transports;
-static enum GNUNET_TESTING_Topology topology = GNUNET_TESTING_TOPOLOGY_CLIQUE; /* Overlay should allow all connections */
+static enum GNUNET_TESTING_Topology topology = GNUNET_TESTING_TOPOLOGY_CLIQUE; /* Overlay should allow all connections */
-static enum GNUNET_TESTING_Topology blacklist_topology = GNUNET_TESTING_TOPOLOGY_RING; /* Blacklist underlay into a ring */
+static enum GNUNET_TESTING_Topology blacklist_topology = GNUNET_TESTING_TOPOLOGY_RING; /* Blacklist underlay into a ring */
static enum GNUNET_TESTING_Topology connection_topology = GNUNET_TESTING_TOPOLOGY_NONE; /* NONE actually means connect all allowed peers */
/**
* Check whether peers successfully shut down.
*/
-void shutdown_callback (void *cls,
- const char *emsg)
+void
+shutdown_callback (void *cls, const char *emsg)
{
if (emsg != NULL)
{
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Shutdown of peers failed!\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown of peers failed!\n");
#endif
if (ok == 0)
ok = 666;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Called finish testing, stopping daemons.\n");
#endif
- sleep(1);
+ sleep (1);
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Calling daemons_stop\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Calling daemons_stop\n");
#endif
GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "daemons_stop finished\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "daemons_stop finished\n");
#endif
if (dotOutFile != NULL)
{
- fprintf(dotOutFile, "}");
- fclose(dotOutFile);
+ fprintf (dotOutFile, "}");
+ fclose (dotOutFile);
}
ok = 0;
}
static void
-end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
+end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
char *msg = cls;
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
if (dotOutFile != NULL)
{
- fprintf(dotOutFile, "}");
- fclose(dotOutFile);
+ fprintf (dotOutFile, "}");
+ fclose (dotOutFile);
}
}
total_connections++;
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "connected peer %s to peer %s\n",
- first_daemon->shortname,
- second_daemon->shortname);
+ first_daemon->shortname, second_daemon->shortname);
#endif
if (dotOutFile != NULL)
- fprintf(dotOutFile, "\tn%s -- n%s;\n", first_daemon->shortname, second_daemon->shortname);
+ fprintf (dotOutFile, "\tn%s -- n%s;\n", first_daemon->shortname,
+ second_daemon->shortname);
}
-#if VERBOSE
+
else
{
failed_connections++;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to connect peer %s to peer %s with error :\n%s\n",
- first_daemon->shortname,
- second_daemon->shortname, emsg);
- }
+#if VERBOSE
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Failed to connect peer %s to peer %s with error :\n%s\n",
+ first_daemon->shortname, second_daemon->shortname, emsg);
#endif
+ }
+
if (total_connections == expected_connections)
{
total_connections);
#endif
- GNUNET_SCHEDULER_cancel (sched, die_task);
+ GNUNET_SCHEDULER_cancel (die_task);
die_task = GNUNET_SCHEDULER_NO_TASK;
- die_task = GNUNET_SCHEDULER_add_now (sched,
- &end_badly, "from topology_callback (too many successful connections)");
+ die_task =
+ GNUNET_SCHEDULER_add_now (&end_badly,
+ "from topology_callback (too many successful connections)");
}
else if (total_connections + failed_connections == expected_connections)
{
- if ((failed_connections == expected_failed_connections) && (total_connections == expected_connections - expected_failed_connections))
+ if ((failed_connections == expected_failed_connections)
+ && (total_connections ==
+ expected_connections - expected_failed_connections))
{
- GNUNET_SCHEDULER_cancel (sched, die_task);
+ GNUNET_SCHEDULER_cancel (die_task);
die_task = GNUNET_SCHEDULER_NO_TASK;
- die_task = GNUNET_SCHEDULER_add_now (sched,
- &finish_testing, NULL);
+ die_task = GNUNET_SCHEDULER_add_now (&finish_testing, NULL);
}
else
{
- GNUNET_SCHEDULER_cancel (sched, die_task);
- die_task = GNUNET_SCHEDULER_add_now (sched,
- &end_badly, "from topology_callback (wrong number of failed connections)");
+ GNUNET_SCHEDULER_cancel (die_task);
+ die_task =
+ GNUNET_SCHEDULER_add_now (&end_badly,
+ "from topology_callback (wrong number of failed connections)");
}
}
else
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Have %d total connections, %d failed connections, Want %d (failed) and %d (successful)\n",
- total_connections, failed_connections, expected_failed_connections, expected_connections - expected_failed_connections);
+ total_connections, failed_connections,
+ expected_failed_connections,
+ expected_connections - expected_failed_connections);
#endif
}
}
expected_connections = -1;
if ((pg != NULL) && (peers_left == 0))
{
- expected_connections = GNUNET_TESTING_connect_topology (pg, connection_topology, connect_topology_option, connect_topology_option_modifier);
+ expected_connections =
+ GNUNET_TESTING_connect_topology (pg, connection_topology,
+ connect_topology_option,
+ connect_topology_option_modifier,
+ connect_timeout,
+ connect_attempts,
+ NULL, NULL);
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Have %d expected connections\n", expected_connections);
#endif
}
- GNUNET_SCHEDULER_cancel (sched, die_task);
+ GNUNET_SCHEDULER_cancel (die_task);
if (expected_connections == GNUNET_SYSERR)
{
- die_task = GNUNET_SCHEDULER_add_now (sched,
- &end_badly, "from connect topology (bad return)");
+ die_task =
+ GNUNET_SCHEDULER_add_now (&end_badly,
+ "from connect topology (bad return)");
}
- die_task = GNUNET_SCHEDULER_add_delayed (sched,
- TEST_TIMEOUT,
- &end_badly, "from connect topology (timeout)");
+ die_task = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT,
+ &end_badly,
+ "from connect topology (timeout)");
}
static void
create_topology ()
{
- peers_left = num_peers; /* Reset counter */
- if (GNUNET_TESTING_create_topology (pg, topology, blacklist_topology, blacklist_transports) != GNUNET_SYSERR)
+ peers_left = num_peers; /* Reset counter */
+ if (GNUNET_TESTING_create_topology
+ (pg, topology, blacklist_topology,
+ blacklist_transports) != GNUNET_SYSERR)
{
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Topology set up, now starting peers!\n");
#endif
- GNUNET_TESTING_daemons_continue_startup(pg);
+ GNUNET_TESTING_daemons_continue_startup (pg);
}
else
{
- GNUNET_SCHEDULER_cancel (sched, die_task);
- die_task = GNUNET_SCHEDULER_add_now (sched,
- &end_badly, "from create topology (bad return)");
+ GNUNET_SCHEDULER_cancel (die_task);
+ die_task =
+ GNUNET_SCHEDULER_add_now (&end_badly,
+ "from create topology (bad return)");
}
- GNUNET_SCHEDULER_cancel (sched, die_task);
- die_task = GNUNET_SCHEDULER_add_delayed (sched,
- TEST_TIMEOUT,
- &end_badly, "from continue startup (timeout)");
+ GNUNET_SCHEDULER_cancel (die_task);
+ die_task = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT,
+ &end_badly,
+ "from continue startup (timeout)");
}
static void
peers_started_callback (void *cls,
- const struct GNUNET_PeerIdentity *id,
- const struct GNUNET_CONFIGURATION_Handle *cfg,
- struct GNUNET_TESTING_Daemon *d, const char *emsg)
+ const struct GNUNET_PeerIdentity *id,
+ const struct GNUNET_CONFIGURATION_Handle *cfg,
+ struct GNUNET_TESTING_Daemon *d, const char *emsg)
{
if (emsg != NULL)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to start daemon with error: `%s'\n",
- emsg);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Failed to start daemon with error: `%s'\n", emsg);
return;
}
GNUNET_assert (id != NULL);
"All %d daemons started, now creating topology!\n",
num_peers);
#endif
- GNUNET_SCHEDULER_cancel (sched, die_task);
+ GNUNET_SCHEDULER_cancel (die_task);
/* Set up task in case topology creation doesn't finish
* within a reasonable amount of time */
- die_task = GNUNET_SCHEDULER_add_delayed (sched,
- GNUNET_TIME_relative_multiply
+ die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_MINUTES, 5),
- &end_badly, "from peers_started_callback");
+ &end_badly,
+ "from peers_started_callback");
connect_topology ();
ok = 0;
}
* @param d the daemon handle (pretty useless at this point, remove?)
* @param emsg non-null on failure
*/
-void hostkey_callback (void *cls,
- const struct GNUNET_PeerIdentity *id,
- struct GNUNET_TESTING_Daemon *d,
- const char *emsg)
+void
+hostkey_callback (void *cls,
+ const struct GNUNET_PeerIdentity *id,
+ struct GNUNET_TESTING_Daemon *d, const char *emsg)
{
if (emsg != NULL)
{
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Hostkey callback received error: %s\n", emsg);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Hostkey callback received error: %s\n", emsg);
}
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Hostkey created for peer `%s'\n",
- GNUNET_i2s(id));
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Hostkey created for peer `%s'\n", GNUNET_i2s (id));
#endif
- peers_left--;
- if (peers_left == 0)
- {
+ peers_left--;
+ if (peers_left == 0)
+ {
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "All %d hostkeys created, now creating topology!\n",
- num_peers);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "All %d hostkeys created, now creating topology!\n",
+ num_peers);
#endif
- GNUNET_SCHEDULER_cancel (sched, die_task);
- /* Set up task in case topology creation doesn't finish
- * within a reasonable amount of time */
- die_task = GNUNET_SCHEDULER_add_delayed (sched,
- GNUNET_TIME_relative_multiply
- (GNUNET_TIME_UNIT_MINUTES, 5),
- &end_badly, "from hostkey_callback");
- GNUNET_SCHEDULER_add_now(sched, &create_topology, NULL);
- ok = 0;
- }
+ GNUNET_SCHEDULER_cancel (die_task);
+ /* Set up task in case topology creation doesn't finish
+ * within a reasonable amount of time */
+ die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
+ (GNUNET_TIME_UNIT_MINUTES, 5),
+ &end_badly,
+ "from hostkey_callback");
+ GNUNET_SCHEDULER_add_now (&create_topology, NULL);
+ ok = 0;
+ }
}
static void
run (void *cls,
- struct GNUNET_SCHEDULER_Handle *s,
char *const *args,
const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
{
unsigned long long connect_topology_num;
unsigned long long blacklist_topology_num;
unsigned long long connect_topology_option_num;
+ unsigned long long temp_connect;
char *connect_topology_option_modifier_string;
- sched = s;
ok = 1;
dotOutFile = fopen (dotOutFileName, "w");
"Starting daemons based on config file %s\n", cfgfile);
#endif
- if (GNUNET_YES != GNUNET_CONFIGURATION_get_value_string(cfg, "paths", "servicehome", &test_directory))
+ if (GNUNET_YES !=
+ GNUNET_CONFIGURATION_get_value_string (cfg, "paths", "servicehome",
+ &test_directory))
{
ok = 404;
if (dotOutFile != NULL)
{
- fclose(dotOutFile);
+ fclose (dotOutFile);
}
return;
}
topology = topology_num;
if (GNUNET_YES ==
- GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "connect_topology",
+ GNUNET_CONFIGURATION_get_value_number (cfg, "testing",
+ "connect_topology",
&connect_topology_num))
connection_topology = connect_topology_num;
if (GNUNET_YES ==
- GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "connect_topology_option",
- &connect_topology_option_num))
+ GNUNET_CONFIGURATION_get_value_number (cfg, "testing",
+ "connect_topology_option",
+ &connect_topology_option_num))
connect_topology_option = connect_topology_option_num;
if (GNUNET_YES ==
- GNUNET_CONFIGURATION_get_value_string (cfg, "testing", "connect_topology_option_modifier",
- &connect_topology_option_modifier_string))
+ GNUNET_CONFIGURATION_get_value_string (cfg, "testing",
+ "connect_topology_option_modifier",
+ &connect_topology_option_modifier_string))
{
- if (sscanf(connect_topology_option_modifier_string, "%lf", &connect_topology_option_modifier) != 1)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("Invalid value `%s' for option `%s' in section `%s': expected float\n"),
- connect_topology_option_modifier_string,
- "connect_topology_option_modifier",
- "TESTING");
- GNUNET_free (connect_topology_option_modifier_string);
- ok = 707;
- if (dotOutFile != NULL)
- {
- fclose(dotOutFile);
- }
- return;
- }
+ if (sscanf
+ (connect_topology_option_modifier_string, "%lf",
+ &connect_topology_option_modifier) != 1)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ _
+ ("Invalid value `%s' for option `%s' in section `%s': expected float\n"),
+ connect_topology_option_modifier_string,
+ "connect_topology_option_modifier", "TESTING");
+ GNUNET_free (connect_topology_option_modifier_string);
+ ok = 707;
+ if (dotOutFile != NULL)
+ {
+ fclose (dotOutFile);
+ }
+ return;
+ }
GNUNET_free (connect_topology_option_modifier_string);
}
- if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "testing", "blacklist_transports",
- &blacklist_transports))
- {
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "No transports specified for blacklisting in blacklist testcase (this shouldn't happen!)\n");
- ok = 808;
- if (dotOutFile != NULL)
- {
- fclose(dotOutFile);
- }
- return;
- }
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_string (cfg, "testing",
+ "blacklist_transports",
+ &blacklist_transports))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "No transports specified for blacklisting in blacklist testcase (this shouldn't happen!)\n");
+ ok = 808;
+ if (dotOutFile != NULL)
+ {
+ fclose (dotOutFile);
+ }
+ return;
+ }
if (GNUNET_YES ==
- GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "blacklist_topology",
+ GNUNET_CONFIGURATION_get_value_number (cfg, "testing",
+ "blacklist_topology",
&blacklist_topology_num))
blacklist_topology = blacklist_topology_num;
&num_peers))
num_peers = DEFAULT_NUM_PEERS;
+ if (GNUNET_OK ==
+ GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "connect_timeout",
+ &temp_connect))
+ connect_timeout =
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, temp_connect);
+ else
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Must provide option %s:%s!\n", "testing", "connect_timeout");
+ return;
+ }
+
+
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_number (cfg, "testing", "connect_attempts",
+ &connect_attempts))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Must provide option %s:%s!\n", "testing", "connect_attempts");
+ return;
+ }
+
main_cfg = cfg;
+ GNUNET_assert (num_peers > 0 && num_peers < (unsigned int) -1);
peers_left = num_peers;
/* For this specific test we only really want a CLIQUE topology as the
/* Set up a task to end testing if peer start fails */
- die_task = GNUNET_SCHEDULER_add_delayed (sched,
- GNUNET_TIME_relative_multiply
+ die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_MINUTES, 5),
- &end_badly, "didn't start all daemons in reasonable amount of time!!!");
+ &end_badly,
+ "didn't start all daemons in reasonable amount of time!!!");
- pg = GNUNET_TESTING_daemons_start (sched, cfg,
- peers_left, TIMEOUT, &hostkey_callback, NULL, &peers_started_callback, NULL,
+ pg = GNUNET_TESTING_daemons_start (cfg,
+ peers_left, peers_left, peers_left,
+ TIMEOUT, &hostkey_callback,
+ NULL, &peers_started_callback, NULL,
&topology_callback, NULL, NULL);
}
check ()
{
int ret;
- char *const argv[] = {"test-testing-topology-blacklist",
+ char *const argv[] = { "test-testing-topology-blacklist",
"-c",
"test_testing_data_topology_blacklist.conf",
#if VERBOSE
GNUNET_GETOPT_OPTION_END
};
ret = GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
- argv, "test-testing-topology-blacklist", "nohelp",
- options, &run, &ok);
+ argv, "test-testing-topology-blacklist", "nohelp",
+ options, &run, &ok);
if (ret != GNUNET_OK)
{
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "`test-testing-topology-blacklist': Failed with error code %d\n", ret);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "`test-testing-topology-blacklist': Failed with error code %d\n",
+ ret);
}
return ok;
{
if (GNUNET_DISK_directory_remove (test_directory) != GNUNET_OK)
{
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Failed to remove testing directory %s\n", test_directory);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Failed to remove testing directory %s\n",
+ test_directory);
}
}