/**
* Time to wait for stuff that should be rather fast
*/
-#define SHORT_TIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
+#define SHORT_TIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
/**
* DIFFERENT TESTS TO RUN
*/
static int ok;
+static int peers_in_tunnel;
+
+static int peers_responded;
+
/**
* Be verbose
*/
static char *topology_file;
-static char *data_filename;
-
static struct GNUNET_TESTING_Daemon *d1;
static GNUNET_PEER_Id pid1;
static struct GNUNET_TESTING_Daemon *d2;
+static struct GNUNET_TESTING_Daemon *d3;
+
static struct GNUNET_MESH_Handle *h1;
static struct GNUNET_MESH_Handle *h2;
+static struct GNUNET_MESH_Handle *h3;
+
static struct GNUNET_MESH_Tunnel *t;
static struct GNUNET_MESH_Tunnel *incoming_t;
+static struct GNUNET_MESH_Tunnel *incoming_t2;
+
static uint16_t *mesh_peers;
/**
if (emsg != NULL)
{
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Shutdown of peers failed!\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Shutdown of peers failed!\n");
#endif
ok--;
}
else
{
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: All peers successfully shut down!\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: All peers successfully shut down!\n");
#endif
}
}
shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Ending test.\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Ending test.\n");
#endif
if (disconnect_task != GNUNET_SCHEDULER_NO_TASK)
disconnect_mesh_peers (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: disconnecting mesh service of peers\n");
+ "***************** test: disconnecting mesh service of peers\n");
disconnect_task = GNUNET_SCHEDULER_NO_TASK;
GNUNET_MESH_disconnect(h1);
GNUNET_MESH_disconnect(h2);
- GNUNET_SCHEDULER_cancel (shutdown_handle);
- shutdown_handle = GNUNET_SCHEDULER_add_now(&shutdown_task, NULL);
+ if (test == MULTICAST)
+ GNUNET_MESH_disconnect(h3);
+ if (GNUNET_SCHEDULER_NO_TASK != shutdown_handle)
+ {
+ GNUNET_SCHEDULER_cancel (shutdown_handle);
+ shutdown_handle = GNUNET_SCHEDULER_add_now(&shutdown_task, NULL);
+ }
}
{
struct GNUNET_MessageHeader *msg = buf;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: tmt_rdy called\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: tmt_rdy called\n");
if (size < sizeof(struct GNUNET_MessageHeader) || NULL == buf)
return 0;
msg->size = htons (sizeof(struct GNUNET_MessageHeader));
{
case 1L:
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Origin client got a response!\n");
+ "***************** test: Origin client got a response!\n");
ok++;
- GNUNET_MESH_tunnel_destroy (tunnel);
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
+ peers_responded++;
+ if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (disconnect_task);
+ disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
&disconnect_mesh_peers,
NULL);
+ }
+ if (test == MULTICAST && peers_responded < 2)
+ return GNUNET_OK;
+ GNUNET_MESH_tunnel_destroy (tunnel);
break;
case 2L:
+ case 3L:
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Destination client got a message \n");
+ "***************** test: Destination client %u got a message.\n",
+ client);
ok++;
- GNUNET_MESH_notify_transmit_ready(incoming_t,
+ GNUNET_MESH_notify_transmit_ready(tunnel,
GNUNET_NO,
0,
GNUNET_TIME_UNIT_FOREVER_REL,
sizeof(struct GNUNET_MessageHeader),
&tmt_rdy,
(void *) 1L);
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
- &disconnect_mesh_peers,
- NULL);
+ if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (disconnect_task);
+ disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
+ &disconnect_mesh_peers,
+ NULL);
+ }
break;
default:
break;
const struct GNUNET_ATS_Information * atsi)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Incoming tunnel from %s\n",
- GNUNET_i2s(initiator));
+ "***************** test: Incoming tunnel from %s to peer %d\n",
+ GNUNET_i2s(initiator),
+ (long) cls);
ok++;
- incoming_t = tunnel;
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
- &disconnect_mesh_peers,
- NULL);
+ if ((long) cls == 1L)
+ incoming_t = tunnel;
+ else
+ incoming_t2 = tunnel;
+ if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (disconnect_task);
+ disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
+ &disconnect_mesh_peers,
+ NULL);
+ }
return NULL;
}
long i = (long) cls;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Incoming tunnel disconnected at peer %d\n",
+ "***************** test: Incoming tunnel disconnected at peer %d\n",
i);
if (2L == i)
ok++;
-
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_mesh_peers, NULL);
-
+ else if (3L == i)
+ ok++;
+ else
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "***************** test: Unknown peer! %d\n",
+ i);
+ peers_in_tunnel--;
+ if (peers_in_tunnel > 0)
+ return;
+
+ if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (disconnect_task);
+ disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_mesh_peers, NULL);
+ }
+
return;
}
dh (void *cls, const struct GNUNET_PeerIdentity *peer)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: peer %s disconnected\n",
+ "***************** test: peer %s disconnected\n",
GNUNET_i2s(peer));
return;
}
{
struct GNUNET_PeerIdentity *dest;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "***************** test: peer %s connected\n",
+ GNUNET_i2s(peer));
+
+ if (0 == memcmp(&d2->id, peer, sizeof(d2->id)) && (long) cls == 1L)
+ ok++;
+ if (test == MULTICAST &&
+ 0 == memcmp(&d3->id, peer, sizeof(d3->id)) &&
+ (long) cls == 1L)
+ ok++;
switch (test)
{
case UNICAST:
dest = &d2->id;
break;
case MULTICAST:
+ peers_in_tunnel++;
+ if (peers_in_tunnel < 2)
+ return;
dest = NULL;
break;
default:
return;
}
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: peer %s connected\n",
- GNUNET_i2s(peer));
- if (0 == memcmp(&d2->id, peer, sizeof(d2->id)) && (long) cls == 1L)
- ok++;
if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
{
GNUNET_SCHEDULER_cancel (disconnect_task);
disconnect_task = GNUNET_SCHEDULER_add_delayed(SHORT_TIME,
&disconnect_mesh_peers,
NULL);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Sending data...\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "***************** test: Sending data...\n");
+ peers_responded = 0;
GNUNET_MESH_notify_transmit_ready(t,
GNUNET_NO,
0,
}
else
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Disconnect already run?\n");
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Aborting...\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Disconnect already run?\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Aborting...\n");
}
return;
}
static void
do_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: test_task\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: test_task\n");
+ if (test == MULTICAST)
+ {
+ GNUNET_MESH_peer_request_connect_add(t, &d3->id);
+ }
GNUNET_MESH_peer_request_connect_add(t, &d2->id);
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed(
- GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 30),
- &disconnect_mesh_peers, NULL);
+ if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
+ {
+ GNUNET_SCHEDULER_cancel (disconnect_task);
+ disconnect_task = GNUNET_SCHEDULER_add_delayed(
+ GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 30),
+ &disconnect_mesh_peers,
+ NULL);
+ }
}
if (p1 == pid1)
{
p2 = GNUNET_PEER_search(second);
- GNUNET_assert(p2 < num_peers);
- GNUNET_assert(p2 > 0);
+ if (p2 == 0 || p2 > num_peers)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "***************** test: %s is UNKNOWN!? (%u)\n",
+ GNUNET_i2s(second),
+ p2);
+ return;
+ }
mesh_peers[p2]++;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: %s IS a neighbor\n",
+ "***************** test: %s IS a neighbor\n",
GNUNET_i2s(second));
return;
}
if (p1 == pid1)
{
p2 = GNUNET_PEER_search(first);
- GNUNET_assert(p2 < num_peers);
- GNUNET_assert(p2 > 0);
+ if (p2 == 0 || p2 > num_peers)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "***************** test: %s is UNKNOWN!? (%u)\n",
+ GNUNET_i2s(first),
+ p2);
+ return;
+ }
mesh_peers[p2]++;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: %s IS a neighbor\n",
+ "***************** test: %s IS a neighbor\n",
GNUNET_i2s(first));
return;
}
unsigned int i;
struct GNUNET_PeerIdentity id;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: connect_mesh_service\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: connect_mesh_service\n");
for (i = 1; i <= num_peers; i++)
{
GNUNET_PEER_resolve(i, &id);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: peer %s has %u conns to d1\n",
+ "***************** test: peer %s has %u conns to d1\n",
GNUNET_i2s (&id),
mesh_peers[i]);
if (mesh_peers[i] == 0)
}
GNUNET_assert (i < num_peers);
d2 = GNUNET_TESTING_daemon_get_by_id (pg, &id);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Peer searched: %s\n",
- GNUNET_i2s (&d2->id));
+ if (test == MULTICAST)
+ {
+ for (i++; i <= num_peers; i++)
+ {
+ GNUNET_PEER_resolve(i, &id);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "***************** test: peer %s has %u conns to d1\n",
+ GNUNET_i2s (&id),
+ mesh_peers[i]);
+ if (mesh_peers[i] == 0)
+ break;
+ }
+ GNUNET_assert (i < num_peers);
+ d3 = GNUNET_TESTING_daemon_get_by_id (pg, &id);
+ }
app = (GNUNET_MESH_ApplicationType) 0;
#if VERBOSE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: connecting to mesh service of peer %s (%u)\n",
+ "***************** test: connecting to mesh service of peer %s (%u)\n",
GNUNET_i2s (&d1->id),
mesh_peers[0]);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: connecting to mesh service of peer %s (%u)\n",
+ "***************** test: connecting to mesh service of peer %s (%u)\n",
GNUNET_i2s (&d2->id),
i);
+ if (test == MULTICAST)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "***************** test: connecting to mesh service of peer %s (%u)\n",
+ GNUNET_i2s (&d3->id),
+ i);
+ }
#endif
h1 = GNUNET_MESH_connect (d1->cfg,
10,
&tunnel_cleaner,
handlers,
&app);
-#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: connected to mesh service of peer %s\n",
- GNUNET_i2s (&d1->id));
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: connected to mesh service of peer %s\n",
- GNUNET_i2s (&d2->id));
-#endif
+ if (test == MULTICAST)
+ {
+ h3 = GNUNET_MESH_connect (d3->cfg,
+ 10,
+ (void *) 3L,
+ &incoming_tunnel,
+ &tunnel_cleaner,
+ handlers,
+ &app);
+ }
t = GNUNET_MESH_tunnel_create (h1, NULL, &ch, &dh, (void *) 1L);
+ peers_in_tunnel = 0;
test_task =
GNUNET_SCHEDULER_add_delayed(
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 6),
if (emsg != NULL)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Peergroup callback called with error, aborting test!\n");
+ "***************** test: Peergroup callback called with error, aborting test!\n");
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Error from testing: `%s'\n", emsg);
+ "***************** test: Error from testing: `%s'\n", emsg);
ok--;
GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
return;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"************************************************************\n");
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Peer Group started successfully!\n");
+ "***************** test: Peer Group started successfully!\n");
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Have %u connections\n",
+ "***************** test: Have %u connections\n",
total_connections);
#endif
{
d1 = GNUNET_TESTING_daemon_get (pg, i);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: %u: %s\n",
+ "***************** test: %u: %s\n",
GNUNET_PEER_intern(&d1->id),
GNUNET_i2s (&d1->id));
}
d1 = GNUNET_TESTING_daemon_get (pg, 0);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Peer looking: %s\n",
+ "***************** test: Peer looking: %s\n",
GNUNET_i2s (&d1->id));
pid1 = GNUNET_PEER_intern(&d1->id);
mesh_peers[pid1] = 100;
else
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: Problem with new connection (%s)\n",
+ "***************** test: Problem with new connection (%s)\n",
emsg);
}
char *temp_str;
unsigned long long temp_wait;
struct GNUNET_TESTING_Host *hosts;
+ char *data_filename;
ok = 0;
testing_cfg = GNUNET_CONFIGURATION_dup (cfg);
NULL);
#if VERBOSE
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Starting daemons.\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Starting daemons.\n");
GNUNET_CONFIGURATION_set_value_string (testing_cfg, "testing",
"use_progressbars", "YES");
#endif
return;
}
- if (GNUNET_OK !=
+ if (GNUNET_OK ==
GNUNET_CONFIGURATION_get_value_string (testing_cfg, "test_mesh_small",
"data_output_file",
&data_filename))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Option test_mesh_small:data_output_file is required!\n");
- return;
- }
-
- data_file =
+ data_file =
GNUNET_DISK_file_open (data_filename,
GNUNET_DISK_OPEN_READWRITE |
GNUNET_DISK_OPEN_CREATE,
GNUNET_DISK_PERM_USER_READ |
GNUNET_DISK_PERM_USER_WRITE);
- if (data_file == NULL)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Failed to open %s for output!\n",
- data_filename);
- GNUNET_free (data_filename);
+ if (data_file == NULL)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Failed to open %s for output!\n",
+ data_filename);
+ GNUNET_free (data_filename);
+ }
}
wait_time =
#endif
NULL
};
+
+ /* Each peer is supposed to generate the following callbacks:
+ * 1 incoming tunnel (@dest)
+ * 1 connected peer (@orig)
+ * 1 received data packet (@dest)
+ * 1 received data packet (@orig)
+ * 1 received tunnel destroy (@dest)
+ * _________________________________
+ * 5 x ok expected per peer
+ */
int ok_goal;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Start\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: Start\n");
if (strstr (argv[0], "test_mesh_small_unicast") != NULL)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: UNICAST\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: UNICAST\n");
test = UNICAST;
ok_goal = 5;
}
else if (strstr (argv[0], "test_mesh_small_multicast") != NULL)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: MULTICAST\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: MULTICAST\n");
test = MULTICAST;
- ok_goal = 5;
+ ok_goal = 10;
}
else
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: UNKNOWN\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "***************** test: UNKNOWN\n");
test = SETUP;
ok_goal = 0;
}
if (ok_goal != ok)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "test: %s FAILED! (%d/%d)\n",
- argv[0], ok, ok_goal);
+ "***************** test: FAILED! (%d/%d)\n", ok, ok_goal);
return 1;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "test: %s success\n",
- argv[0]);
+ "***************** test: success\n");
return 0;
}