aboutsummaryrefslogtreecommitdiff
path: root/src/mesh/test_mesh2_small.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesh/test_mesh2_small.c')
-rw-r--r--src/mesh/test_mesh2_small.c833
1 files changed, 0 insertions, 833 deletions
diff --git a/src/mesh/test_mesh2_small.c b/src/mesh/test_mesh2_small.c
deleted file mode 100644
index 0a184d56f0..0000000000
--- a/src/mesh/test_mesh2_small.c
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- This file is part of GNUnet.
- (C) 2011 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-/**
- * @file mesh/test_mesh2_small.c
- *
- * @brief Test for the mesh service: retransmission of traffic.
- */
-#include <stdio.h>
-#include "platform.h"
-#include "mesh2_test_lib.h"
-#include "gnunet_mesh2_service.h"
-#include <gauger.h>
-
-
-/**
- * How namy messages to send
- */
-#define TOTAL_PACKETS 1000
-
-/**
- * How long until we give up on connecting the peers?
- */
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 120)
-
-/**
- * Time to wait for stuff that should be rather fast
- */
-#define SHORT_TIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 20)
-
-/**
- * DIFFERENT TESTS TO RUN
- */
-#define SETUP 0
-#define FORWARD 1
-#define SPEED 3
-#define SPEED_ACK 4
-#define SPEED_NOBUF 6
-#define P2P_SIGNAL 10
-
-/**
- * Which test are we running?
- */
-static int test;
-
-/**
- * String with test name
- */
-char *test_name;
-
-/**
- * Flag to send traffic leaf->root in speed tests to test BCK_ACK logic.
- */
-static int test_backwards = GNUNET_NO;
-
-/**
- * How many events have happened
- */
-static int ok;
-
- /**
- * 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;
-
-
-/**
- * Size of each test packet
- */
-size_t size_payload = sizeof (struct GNUNET_MessageHeader) + sizeof (uint32_t);
-
-/**
- * Operation to get peer ids.
- */
-struct GNUNET_TESTBED_Operation *t_op[2];
-
-/**
- * Peer ids.
- */
-struct GNUNET_PeerIdentity *p_id[2];
-
-/**
- * Peer ids counter.
- */
-unsigned int p_ids;
-
-/**
- * Is the setup initialized?
- */
-static int initialized;
-
-/**
- * Peers that have responded
- */
-static int peers_responded;
-
-/**
- * Number of payload packes sent
- */
-static int data_sent;
-
-/**
- * Number of payload packets received
- */
-static int data_received;
-
-/**
- * Number of payload packed explicitly (app level) acknowledged
- */
-static int data_ack;
-
-/**
- * Total number of currently running peers.
- */
-static unsigned long long peers_running;
-
-/**
- * Test context (to shut down).
- */
-struct GNUNET_MESH_TEST_Context *test_ctx;
-
-/**
- * Task called to disconnect peers.
- */
-static GNUNET_SCHEDULER_TaskIdentifier disconnect_task;
-
-/**
- * Task To perform tests
- */
-static GNUNET_SCHEDULER_TaskIdentifier test_task;
-
-/**
- * Task called to shutdown test.
- */
-static GNUNET_SCHEDULER_TaskIdentifier shutdown_handle;
-
-/**
- * Mesh handle for the root peer
- */
-static struct GNUNET_MESH_Handle *h1;
-
-/**
- * Mesh handle for the first leaf peer
- */
-static struct GNUNET_MESH_Handle *h2;
-
-/**
- * Tunnel handle for the root peer
- */
-static struct GNUNET_MESH_Tunnel *t;
-
-/**
- * Tunnel handle for the first leaf peer
- */
-static struct GNUNET_MESH_Tunnel *incoming_t;
-
-/**
- * Time we started the data transmission (after tunnel has been established
- * and initilized).
- */
-static struct GNUNET_TIME_Absolute start_time;
-
-
-/**
- * Show the results of the test (banwidth acheived) and log them to GAUGER
- */
-static void
-show_end_data (void)
-{
- static struct GNUNET_TIME_Absolute end_time;
- static struct GNUNET_TIME_Relative total_time;
-
- end_time = GNUNET_TIME_absolute_get();
- total_time = GNUNET_TIME_absolute_get_difference(start_time, end_time);
- FPRINTF (stderr, "\nResults of test \"%s\"\n", test_name);
- FPRINTF (stderr, "Test time %llu ms\n",
- (unsigned long long) total_time.rel_value);
- FPRINTF (stderr, "Test bandwidth: %f kb/s\n",
- 4 * TOTAL_PACKETS * 1.0 / total_time.rel_value); // 4bytes * ms
- FPRINTF (stderr, "Test throughput: %f packets/s\n\n",
- TOTAL_PACKETS * 1000.0 / total_time.rel_value); // packets * ms
- GAUGER ("MESH", test_name,
- TOTAL_PACKETS * 1000.0 / total_time.rel_value,
- "packets/s");
-}
-
-
-/**
- * Shut down peergroup, clean up.
- *
- * @param cls Closure (unused).
- * @param tc Task Context.
- */
-static void
-shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n");
- shutdown_handle = GNUNET_SCHEDULER_NO_TASK;
-}
-
-
-/**
- * Disconnect from mesh services af all peers, call shutdown.
- *
- * @param cls Closure (unused).
- * @param tc Task Context.
- */
-static void
-disconnect_mesh_peers (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- long line = (long) cls;
- unsigned int i;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "disconnecting mesh service of peers, called from line %ld\n",
- line);
- disconnect_task = GNUNET_SCHEDULER_NO_TASK;
- for (i = 0; i < 2; i++)
- {
- GNUNET_TESTBED_operation_done (t_op[i]);
- }
- if (NULL != t)
- {
- GNUNET_MESH_tunnel_destroy (t);
- t = NULL;
- }
- if (NULL != incoming_t)
- {
- GNUNET_MESH_tunnel_destroy (incoming_t);
- incoming_t = NULL;
- }
- GNUNET_MESH_TEST_cleanup (test_ctx);
- if (GNUNET_SCHEDULER_NO_TASK != shutdown_handle)
- {
- GNUNET_SCHEDULER_cancel (shutdown_handle);
- }
- shutdown_handle = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
-}
-
-
-/**
- * Abort test: schedule disconnect and shutdown immediately
- *
- * @param line Line in the code the abort is requested from (__LINE__).
- */
-static void
-abort_test (long line)
-{
- if (disconnect_task != GNUNET_SCHEDULER_NO_TASK)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_mesh_peers,
- (void *) line);
- }
-}
-
-/**
- * Transmit ready callback.
- *
- * @param cls Closure (message type).
- * @param size Size of the tranmist buffer.
- * @param buf Pointer to the beginning of the buffer.
- *
- * @return Number of bytes written to buf.
- */
-static size_t
-tmt_rdy (void *cls, size_t size, void *buf);
-
-
-/**
- * Task to schedule a new data transmission.
- *
- * @param cls Closure (peer #).
- * @param tc Task Context.
- */
-static void
-data_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- struct GNUNET_MESH_TransmitHandle *th;
- struct GNUNET_MESH_Tunnel *tunnel;
-
- if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0)
- return;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n");
- if (GNUNET_YES == test_backwards)
- {
- tunnel = incoming_t;
- }
- else
- {
- tunnel = t;
- }
- th = GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
- GNUNET_TIME_UNIT_FOREVER_REL,
- size_payload, &tmt_rdy, (void *) 1L);
- if (NULL == th)
- {
- unsigned long i = (unsigned long) cls;
-
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Retransmission\n");
- if (0 == i)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, " in 1 ms\n");
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
- &data_task, (void *)1UL);
- }
- else
- {
- i++;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "in %u ms\n", i);
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(
- GNUNET_TIME_UNIT_MILLISECONDS,
- i),
- &data_task, (void *)i);
- }
- }
-}
-
-
-/**
- * Transmit ready callback
- *
- * @param cls Closure (message type).
- * @param size Size of the buffer we have.
- * @param buf Buffer to copy data to.
- */
-size_t
-tmt_rdy (void *cls, size_t size, void *buf)
-{
- struct GNUNET_MessageHeader *msg = buf;
- uint32_t *data;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- " tmt_rdy called\n");
- if (size < size_payload || NULL == buf)
- {
- GNUNET_break (0);
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "size %u, buf %p, data_sent %u, data_received %u\n",
- size,
- buf,
- data_sent,
- data_received);
- return 0;
- }
- msg->size = htons (size);
- msg->type = htons ((long) cls);
- data = (uint32_t *) &msg[1];
- *data = htonl (data_sent);
- if (SPEED == test && GNUNET_YES == initialized)
- {
- data_sent++;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- " Sent packet %d\n", data_sent);
- if (data_sent < TOTAL_PACKETS)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- " Scheduling packet %d\n", data_sent + 1);
- GNUNET_SCHEDULER_add_now(&data_task, NULL);
- }
- }
- return size_payload;
-}
-
-
-/**
- * Function is called whenever a message is received.
- *
- * @param cls closure (set from GNUNET_MESH_connect)
- * @param tunnel connection to the other end
- * @param tunnel_ctx place to store local state associated with the tunnel
- * @param message the actual message
- * @return GNUNET_OK to keep the connection open,
- * GNUNET_SYSERR to close it (signal serious error)
- */
-int
-data_callback (void *cls, struct GNUNET_MESH_Tunnel *tunnel, void **tunnel_ctx,
- const struct GNUNET_MessageHeader *message)
-{
- long client = (long) cls;
- long expected_target_client;
- uint32_t *data;
-
- ok++;
-
- GNUNET_MESH_receive_done (tunnel);
-
- if ((ok % 20) == 0)
- {
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- }
- }
-
- switch (client)
- {
- case 0L:
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Root client got a message!\n");
- peers_responded++;
- break;
- case 4L:
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Leaf client %li got a message.\n",
- client);
- client = 4L;
- break;
- default:
- GNUNET_assert (0);
- break;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, " ok: (%d/%d)\n", ok, ok_goal);
- data = (uint32_t *) &message[1];
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, " payload: (%u)\n", ntohl (*data));
- if (SPEED == test && GNUNET_YES == test_backwards)
- {
- expected_target_client = 0L;
- }
- else
- {
- expected_target_client = 4L;
- }
-
- if (GNUNET_NO == initialized)
- {
- initialized = GNUNET_YES;
- start_time = GNUNET_TIME_absolute_get ();
- if (SPEED == test)
- {
- GNUNET_assert (4L == client);
- GNUNET_SCHEDULER_add_now (&data_task, NULL);
- return GNUNET_OK;
- }
- }
-
- if (client == expected_target_client) // Normally 3 or 4
- {
- data_received++;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- " received data %u\n", data_received);
- if (SPEED != test || (ok_goal - 2) == ok)
- {
- GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
- GNUNET_TIME_UNIT_FOREVER_REL,
- size_payload, &tmt_rdy, (void *) 1L);
- return GNUNET_OK;
- }
- else
- {
- if (data_received < TOTAL_PACKETS)
- return GNUNET_OK;
- }
- }
- else // Normally 0
- {
- if (test == SPEED_ACK || test == SPEED)
- {
- data_ack++;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- " received ack %u\n", data_ack);
- GNUNET_MESH_notify_transmit_ready (tunnel, GNUNET_NO,
- GNUNET_TIME_UNIT_FOREVER_REL,
- size_payload, &tmt_rdy, (void *) 1L);
- if (data_ack < TOTAL_PACKETS && SPEED != test)
- return GNUNET_OK;
- if (ok == 2 && SPEED == test)
- return GNUNET_OK;
- show_end_data();
- }
- if (test == P2P_SIGNAL)
- {
- GNUNET_MESH_tunnel_destroy (incoming_t);
- incoming_t = NULL;
- }
- else
- {
- GNUNET_MESH_tunnel_destroy (t);
- t = NULL;
- }
- }
-
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- }
-
- return GNUNET_OK;
-}
-
-
-/**
- * Handlers, for diverse services
- */
-static struct GNUNET_MESH_MessageHandler handlers[] = {
- {&data_callback, 1, sizeof (struct GNUNET_MessageHeader)},
- {NULL, 0, 0}
-};
-
-
-/**
- * Method called whenever another peer has added us to a tunnel
- * the other peer initiated.
- *
- * @param cls Closure.
- * @param tunnel New handle to the tunnel.
- * @param initiator Peer that started the tunnel.
- * @param port Port this tunnels is connected to.
- * @return Initial tunnel context for the tunnel
- * (can be NULL -- that's not an error).
- */
-static void *
-incoming_tunnel (void *cls, struct GNUNET_MESH_Tunnel *tunnel,
- const struct GNUNET_PeerIdentity *initiator,
- uint32_t port)
-{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Incoming tunnel from %s to peer %d\n",
- GNUNET_i2s (initiator), (long) cls);
- ok++;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, " ok: %d\n", ok);
- if ((long) cls == 4L)
- incoming_t = tunnel;
- else
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Incoming tunnel for unknown client %lu\n", (long) cls);
- GNUNET_break(0);
- }
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- }
-
- return NULL;
-}
-
-/**
- * Function called whenever an inbound tunnel is destroyed. Should clean up
- * any associated state.
- *
- * @param cls closure (set from GNUNET_MESH_connect)
- * @param tunnel connection to the other end (henceforth invalid)
- * @param tunnel_ctx place where local state associated
- * with the tunnel is stored
- */
-static void
-tunnel_cleaner (void *cls, const struct GNUNET_MESH_Tunnel *tunnel,
- void *tunnel_ctx)
-{
- long i = (long) cls;
-
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Incoming tunnel disconnected at peer %d\n",
- i);
- if (4L == i)
- {
- ok++;
- incoming_t = NULL;
- }
- else if (0L == i && P2P_SIGNAL == test)
- {
- ok ++;
- }
- else
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Unknown peer! %d\n", i);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, " ok: %d\n", ok);
-
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_mesh_peers,
- (void *) __LINE__);
- }
-
- return;
-}
-
-
-/**
- * START THE TESTCASE ITSELF, AS WE ARE CONNECTED TO THE MESH SERVICES.
- *
- * Testcase continues when the root receives confirmation of connected peers,
- * on callback funtion ch.
- *
- * @param cls Closure (unsued).
- * @param tc Task Context.
- */
-static void
-do_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test_task\n");
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "add peer 2\n");
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "schedule timeout in TIMEOUT\n");
- if (GNUNET_SCHEDULER_NO_TASK != disconnect_task)
- {
- GNUNET_SCHEDULER_cancel (disconnect_task);
- }
- t = GNUNET_MESH_tunnel_create (h1, NULL, p_id[1], 1);
- if (SPEED_NOBUF == test)
- {
- GNUNET_MESH_tunnel_buffer(t, GNUNET_NO);
- test = SPEED;
- }
-
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Sending data initializer...\n");
- peers_responded = 0;
- data_ack = 0;
- data_received = 0;
- data_sent = 0;
- GNUNET_MESH_notify_transmit_ready (t, GNUNET_NO,
- GNUNET_TIME_UNIT_FOREVER_REL,
- size_payload, &tmt_rdy, (void *) 1L);
-}
-
-/**
- * Callback to be called when the requested peer information is available
- *
- * @param cls the closure from GNUNET_TESTBED_peer_get_information()
- * @param op the operation this callback corresponds to
- * @param pinfo the result; will be NULL if the operation has failed
- * @param emsg error message if the operation has failed;
- * NULL if the operation is successfull
- */
-static void
-pi_cb (void *cls,
- struct GNUNET_TESTBED_Operation *op,
- const struct GNUNET_TESTBED_PeerInformation *pinfo,
- const char *emsg)
-{
- long i = (long) cls;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "id callback for %ld\n", i);
-
- if (NULL == pinfo || NULL != emsg)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "pi_cb: %s\n", emsg);
- abort_test (__LINE__);
- return;
- }
- p_id[i] = pinfo->result.id;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " id: %s\n", GNUNET_i2s (p_id[i]));
- p_ids++;
- if (p_ids < 2)
- return;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got all IDs, starting test\n");
- test_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
- &do_test, NULL);
-}
-
-/**
- * test main: start test when all peers are connected
- *
- * @param cls Closure.
- * @param ctx Argument to give to GNUNET_MESH_TEST_cleanup on test end.
- * @param num_peers Number of peers that are running.
- * @param peers Array of peers.
- * @param meshes Handle to each of the MESHs of the peers.
- */
-static void
-tmain (void *cls,
- struct GNUNET_MESH_TEST_Context *ctx,
- unsigned int num_peers,
- struct GNUNET_TESTBED_Peer **peers,
- struct GNUNET_MESH_Handle **meshes)
-{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test main\n");
- ok = 0;
- test_ctx = ctx;
- peers_running = num_peers;
- h1 = meshes[0];
- h2 = meshes[num_peers - 1];
- disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME,
- &disconnect_mesh_peers,
- (void *) __LINE__);
- shutdown_handle = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
- &shutdown_task, NULL);
- t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0],
- GNUNET_TESTBED_PIT_IDENTITY,
- &pi_cb, (void *) 0L);
- t_op[1] = GNUNET_TESTBED_peer_get_information (peers[num_peers - 1],
- GNUNET_TESTBED_PIT_IDENTITY,
- &pi_cb, (void *) 1L);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "requested peer ids\n");
-}
-
-
-/**
- * Main: start test
- */
-int
-main (int argc, char *argv[])
-{
- initialized = GNUNET_NO;
- uint32_t ports[2];
-
- GNUNET_log_setup ("test", "DEBUG", NULL);
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Start\n");
- if (strstr (argv[0], "_small_forward") != NULL)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "FORWARD\n");
- test = FORWARD;
- test_name = "unicast2";
- ok_goal = 4;
- }
- else if (strstr (argv[0], "_small_signal") != NULL)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SIGNAL\n");
- test = P2P_SIGNAL;
- test_name = "signal2";
- ok_goal = 4;
- }
- else if (strstr (argv[0], "_small_speed_ack") != NULL)
- {
- /* Each peer is supposed to generate the following callbacks:
- * 1 incoming tunnel (@dest)
- * TOTAL_PACKETS received data packet (@dest)
- * TOTAL_PACKETS received data packet (@orig)
- * 1 received tunnel destroy (@dest)
- * _________________________________
- * 5 x ok expected per peer
- */
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SPEED_ACK\n");
- test = SPEED_ACK;
- test_name = "speed2 ack";
- ok_goal = TOTAL_PACKETS * 2 + 2;
- }
- else if (strstr (argv[0], "_small_speed") != NULL)
- {
- /* Each peer is supposed to generate the following callbacks:
- * 1 incoming tunnel (@dest)
- * 1 initial packet (@dest)
- * TOTAL_PACKETS received data packet (@dest)
- * 1 received data packet (@orig)
- * 1 received tunnel destroy (@dest)
- * _________________________________
- */
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SPEED\n");
- ok_goal = TOTAL_PACKETS + 4;
- if (strstr (argv[0], "_nobuf") != NULL)
- {
- test = SPEED_NOBUF;
- test_name = "speed2 nobuf";
- }
- else
- {
- test = SPEED;
- test_name = "speed2";
- }
- }
- else
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "UNKNOWN\n");
- test = SETUP;
- ok_goal = 0;
- }
-
- if (strstr (argv[0], "backwards") != NULL)
- {
- char *aux;
-
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "BACKWARDS (LEAF TO ROOT)\n");
- test_backwards = GNUNET_YES;
- aux = GNUNET_malloc (32);
- sprintf (aux, "backwards %s", test_name);
- test_name = aux;
- }
-
- p_ids = 0;
- ports[0] = 1;
- ports[1] = 0;
- GNUNET_MESH_TEST_run ("test_mesh2_small",
- "test_mesh2.conf",
- 5,
- &tmain,
- NULL, /* tmain cls */
- &incoming_tunnel,
- &tunnel_cleaner,
- handlers,
- ports);
-
- if (ok_goal > ok)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "FAILED! (%d/%d)\n", ok, ok_goal);
- return 1;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "success\n");
- return 0;
-}
-
-/* end of test_mesh_small.c */
-