#include "platform.h"
#include "gnunet_testing_lib.h"
-#define VERBOSE GNUNET_NO
+#define VERBOSE GNUNET_EXTRA_LOGGING
#define NUM_PEERS 2
static struct GNUNET_TESTING_Daemon *last;
+/**
+ * Active connection attempt.
+ */
+struct GNUNET_TESTING_ConnectContext *cc[NUM_PEERS];
+
/**
* Check whether peers successfully shut down.
*/
static void
clean_up_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
+ unsigned int i;
+
+ for (i = 0; i < NUM_PEERS; i++)
+ {
+ if (NULL != cc[i])
+ {
+ GNUNET_TESTING_daemons_connect_cancel (cc[i]);
+ cc[i] = NULL;
+ }
+ }
GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
ok = 0;
}
static void
-notify_connect_complete (void *cls,
- const struct GNUNET_PeerIdentity *first,
+notify_connect_complete (void *cls, const struct GNUNET_PeerIdentity *first,
const struct GNUNET_PeerIdentity *second,
unsigned int distance,
const struct GNUNET_CONFIGURATION_Handle *first_cfg,
struct GNUNET_TESTING_Daemon *second_daemon,
const char *emsg)
{
+ struct GNUNET_TESTING_ConnectContext **cc = cls;
+ unsigned int i;
+
+ *cc = NULL;
if (NULL != emsg)
{
- fprintf (stderr, "Failed to connect two peers: %s\n", emsg);
+ FPRINTF (stderr, "Failed to connect two peers: %s\n", emsg);
+ for (i = 0; i < NUM_PEERS; i++)
+ if (NULL != cc[i])
+ {
+ GNUNET_TESTING_daemons_connect_cancel (cc[i]);
+ cc[i] = NULL;
+ }
GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
GNUNET_assert (0);
return;
static void
-my_cb (void *cls,
- const struct GNUNET_PeerIdentity *id,
+my_cb (void *cls, const struct GNUNET_PeerIdentity *id,
const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_TESTING_Daemon *d, const char *emsg)
{
last = d;
return;
}
- GNUNET_TESTING_daemons_connect (last, d, TIMEOUT, CONNECT_ATTEMPTS,
- GNUNET_YES, ¬ify_connect_complete, NULL);
+ cc[peers_left] =
+ GNUNET_TESTING_daemons_connect (last, d, TIMEOUT, CONNECT_ATTEMPTS,
+ GNUNET_YES, ¬ify_connect_complete,
+ &cc[peers_left]);
if (peers_left == 0)
{
/* close circle */
- GNUNET_TESTING_daemons_connect (d, first, TIMEOUT, CONNECT_ATTEMPTS,
- GNUNET_YES, ¬ify_connect_complete, NULL);
+ cc[NUM_PEERS - 1] =
+ GNUNET_TESTING_daemons_connect (d, first, TIMEOUT, CONNECT_ATTEMPTS,
+ GNUNET_YES, ¬ify_connect_complete,
+ &cc[NUM_PEERS - 1]);
}
}
static void
-run (void *cls,
- char *const *args,
- const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
+run (void *cls, char *const *args, const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *cfg)
{
ok = 1;
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting daemons.\n");
#endif
peers_left = NUM_PEERS;
- pg = GNUNET_TESTING_daemons_start (cfg,
- peers_left,
- peers_left,
- peers_left,
- TIMEOUT,
- NULL, NULL,
- &my_cb, NULL, NULL, NULL, NULL);
+ pg = GNUNET_TESTING_daemons_start (cfg, peers_left, peers_left, peers_left,
+ TIMEOUT, NULL, NULL, &my_cb, NULL, NULL,
+ NULL, NULL);
GNUNET_assert (pg != NULL);
}
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
- GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
- argv, "test-gnunet-daemon-topology", "nohelp",
- options, &run, &ok);
+ GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
+ "test-gnunet-daemon-topology", "nohelp", options, &run,
+ &ok);
return ok;
}