[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r24666 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r24666 - gnunet/src/testbed |
Date: |
Thu, 1 Nov 2012 22:12:56 +0100 |
Author: harsha
Date: 2012-11-01 22:12:56 +0100 (Thu, 01 Nov 2012)
New Revision: 24666
Added:
gnunet/src/testbed/test_testbed_api_testbed_run_topologyclique.conf
gnunet/src/testbed/test_testbed_api_testbed_run_topologyline.conf
gnunet/src/testbed/test_testbed_api_testbed_run_topologyrandom.conf
Modified:
gnunet/src/testbed/
gnunet/src/testbed/Makefile.am
gnunet/src/testbed/test_testbed_api.conf
gnunet/src/testbed/test_testbed_api_testbed_run.c
gnunet/src/testbed/testbed_api_testbed.c
Log:
topology option support for GNUNET_TESTBED_run() via configuration
Index: gnunet/src/testbed
===================================================================
--- gnunet/src/testbed 2012-11-01 16:58:00 UTC (rev 24665)
+++ gnunet/src/testbed 2012-11-01 21:12:56 UTC (rev 24666)
Property changes on: gnunet/src/testbed
___________________________________________________________________
Modified: svn:ignore
## -20,3 +20,6 ##
test_gnunet_helper_testbed
test_testbed_api_topology
test_testbed_api_topology_clique
+test_testbed_api_testbed_run_topologyrandom
+test_testbed_api_testbed_run_topologyline
+test_testbed_api_testbed_run_topologyclique
Modified: gnunet/src/testbed/Makefile.am
===================================================================
--- gnunet/src/testbed/Makefile.am 2012-11-01 16:58:00 UTC (rev 24665)
+++ gnunet/src/testbed/Makefile.am 2012-11-01 21:12:56 UTC (rev 24666)
@@ -90,7 +90,10 @@
test_testbed_api_test \
test_gnunet_helper_testbed \
test_testbed_api_topology \
- test_testbed_api_topology_clique
+ test_testbed_api_topology_clique \
+ test_testbed_api_testbed_run_topologyrandom \
+ test_testbed_api_testbed_run_topologyline \
+ test_testbed_api_testbed_run_topologyclique
if ENABLE_TEST_RUN
TESTS = \
@@ -104,7 +107,10 @@
test_testbed_api_testbed_run \
test_testbed_api_test \
test_testbed_api_topology \
- test_testbed_api_topology_clique
+ test_testbed_api_topology_clique \
+ test_testbed_api_testbed_run_topologyrandom \
+ test_testbed_api_testbed_run_topologyline \
+ test_testbed_api_testbed_run_topologyclique
endif
test_testbed_api_hosts_SOURCES = \
@@ -178,6 +184,24 @@
libgnunettestbed.la \
-lz
+test_testbed_api_testbed_run_topologyrandom_SOURCES = \
+ test_testbed_api_testbed_run.c
+test_testbed_api_testbed_run_topologyrandom_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ libgnunettestbed.la
+test_testbed_api_testbed_run_topologyline_SOURCES = \
+ test_testbed_api_testbed_run.c
+test_testbed_api_testbed_run_topologyline_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ libgnunettestbed.la
+
+test_testbed_api_testbed_run_topologyclique_SOURCES = \
+ test_testbed_api_testbed_run.c
+test_testbed_api_testbed_run_topologyclique_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ libgnunettestbed.la
+
+
EXTRA_DIST = \
test_testbed_api.conf
Modified: gnunet/src/testbed/test_testbed_api.conf
===================================================================
--- gnunet/src/testbed/test_testbed_api.conf 2012-11-01 16:58:00 UTC (rev
24665)
+++ gnunet/src/testbed/test_testbed_api.conf 2012-11-01 21:12:56 UTC (rev
24666)
@@ -5,6 +5,7 @@
HOSTNAME = localhost
NEIGHBOUR_LIMIT = 100
MAX_PARALLEL_OVERLAY_CONNECT_OPERATIONS = 10
+TOPOLOGY = RANDOM
#PREFIX = xterm -geometry 100x85 -T peer1 -e libtool --mode=execute gdb --args
[fs]
Modified: gnunet/src/testbed/test_testbed_api_testbed_run.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run.c 2012-11-01 16:58:00 UTC
(rev 24665)
+++ gnunet/src/testbed/test_testbed_api_testbed_run.c 2012-11-01 21:12:56 UTC
(rev 24666)
@@ -152,13 +152,11 @@
event_mask = 0;
event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START);
event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP);
- event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT);
- event_mask |= (1LL << GNUNET_TESTBED_ET_DISCONNECT);
GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask,
&controller_event_cb,
NULL, &master_task, NULL);
abort_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
- (GNUNET_TIME_UNIT_SECONDS, 5), &do_abort,
+ (GNUNET_TIME_UNIT_SECONDS, 60), &do_abort,
NULL);
}
@@ -169,22 +167,39 @@
int
main (int argc, char **argv)
{
- int ret;
-
- char *const argv2[] = {
+ char *argv2[] = {
"test_testbed_api_testbed_run",
- "-c", "test_testbed_api.conf",
+ "-c", NULL,
NULL
};
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
+ char *testname;
+ char *config_filename;
+ int ret;
+ testname = rindex (argv[0], (int) '_');
+ testname++;
+ if (NULL == testname)
+ {
+ GNUNET_break (0);
+ return 1;
+ }
+ if (0 != strcmp ("run", testname))
+ {
+ GNUNET_asprintf (&config_filename,
+ "test_testbed_api_testbed_run_%s.conf", testname);
+ }
+ else
+ config_filename = GNUNET_strdup ("test_testbed_api.conf");
+ argv2[2] = config_filename;
result = GNUNET_SYSERR;
ret =
GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2,
"test_testbed_api_testbed_run", "nohelp", options,
&run, NULL);
+ GNUNET_free (config_filename);
if ((GNUNET_OK != ret) || (GNUNET_OK != result))
return 1;
return 0;
Copied: gnunet/src/testbed/test_testbed_api_testbed_run_topologyclique.conf
(from rev 24655, gnunet/src/testbed/test_testbed_api.conf)
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run_topologyclique.conf
(rev 0)
+++ gnunet/src/testbed/test_testbed_api_testbed_run_topologyclique.conf
2012-11-01 21:12:56 UTC (rev 24666)
@@ -0,0 +1,80 @@
+[testbed]
+AUTOSTART = NO
+PORT = 12113
+ACCEPT_FROM = 127.0.0.1;
+HOSTNAME = localhost
+NEIGHBOUR_LIMIT = 100
+MAX_PARALLEL_OVERLAY_CONNECT_OPERATIONS = 10
+OVERLAY_TOPOLOGY = CLIQUE
+#PREFIX = xterm -geometry 100x85 -T peer1 -e libtool --mode=execute gdb --args
+
+[fs]
+AUTOSTART = NO
+
+[resolver]
+AUTOSTART = NO
+
+[mesh]
+AUTOSTART = NO
+
+[dht]
+AUTOSTART = NO
+
+[block]
+plugins = dht test
+
+[dhtcache]
+QUOTA = 1 MB
+DATABASE = sqlite
+
+[transport]
+PLUGINS = tcp
+DEBUG = NO
+ACCEPT_FROM6 = ::1;
+ACCEPT_FROM = 127.0.0.1;
+NEIGHBOUR_LIMIT = 50
+PORT = 12365
+
+[ats]
+WAN_QUOTA_OUT = 3932160
+WAN_QUOTA_IN = 3932160
+
+[core]
+PORT = 12092
+AUTOSTART = YES
+
+[arm]
+DEFAULTSERVICES = core transport
+PORT = 12366
+DEBUG = NO
+
+[transport-tcp]
+TIMEOUT = 300 s
+PORT = 12368
+
+[TESTING]
+NUM_PEERS = 5
+WEAKRANDOM = YES
+DEBUG = YES
+HOSTKEYSFILE = ../../contrib/testing_hostkeys.dat
+MAX_CONCURRENT_SSH = 10
+USE_PROGRESSBARS = YES
+PEERGROUP_TIMEOUT = 2400 s
+
+[gnunetd]
+HOSTKEY = $SERVICEHOME/.hostkey
+
+[PATHS]
+SERVICEHOME = /tmp/test-testbed/
+
+[dns]
+AUTOSTART = NO
+
+[nse]
+AUTOSTART = NO
+
+[vpn]
+AUTOSTART = NO
+
+[nat]
+RETURN_LOCAL_ADDRESSES = YES
Copied: gnunet/src/testbed/test_testbed_api_testbed_run_topologyline.conf (from
rev 24655, gnunet/src/testbed/test_testbed_api.conf)
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run_topologyline.conf
(rev 0)
+++ gnunet/src/testbed/test_testbed_api_testbed_run_topologyline.conf
2012-11-01 21:12:56 UTC (rev 24666)
@@ -0,0 +1,80 @@
+[testbed]
+AUTOSTART = NO
+PORT = 12113
+ACCEPT_FROM = 127.0.0.1;
+HOSTNAME = localhost
+NEIGHBOUR_LIMIT = 100
+MAX_PARALLEL_OVERLAY_CONNECT_OPERATIONS = 10
+OVERLAY_TOPOLOGY = LINE
+#PREFIX = xterm -geometry 100x85 -T peer1 -e libtool --mode=execute gdb --args
+
+[fs]
+AUTOSTART = NO
+
+[resolver]
+AUTOSTART = NO
+
+[mesh]
+AUTOSTART = NO
+
+[dht]
+AUTOSTART = NO
+
+[block]
+plugins = dht test
+
+[dhtcache]
+QUOTA = 1 MB
+DATABASE = sqlite
+
+[transport]
+PLUGINS = tcp
+DEBUG = NO
+ACCEPT_FROM6 = ::1;
+ACCEPT_FROM = 127.0.0.1;
+NEIGHBOUR_LIMIT = 50
+PORT = 12365
+
+[ats]
+WAN_QUOTA_OUT = 3932160
+WAN_QUOTA_IN = 3932160
+
+[core]
+PORT = 12092
+AUTOSTART = YES
+
+[arm]
+DEFAULTSERVICES = core transport
+PORT = 12366
+DEBUG = NO
+
+[transport-tcp]
+TIMEOUT = 300 s
+PORT = 12368
+
+[TESTING]
+NUM_PEERS = 5
+WEAKRANDOM = YES
+DEBUG = YES
+HOSTKEYSFILE = ../../contrib/testing_hostkeys.dat
+MAX_CONCURRENT_SSH = 10
+USE_PROGRESSBARS = YES
+PEERGROUP_TIMEOUT = 2400 s
+
+[gnunetd]
+HOSTKEY = $SERVICEHOME/.hostkey
+
+[PATHS]
+SERVICEHOME = /tmp/test-testbed/
+
+[dns]
+AUTOSTART = NO
+
+[nse]
+AUTOSTART = NO
+
+[vpn]
+AUTOSTART = NO
+
+[nat]
+RETURN_LOCAL_ADDRESSES = YES
Copied: gnunet/src/testbed/test_testbed_api_testbed_run_topologyrandom.conf
(from rev 24655, gnunet/src/testbed/test_testbed_api.conf)
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run_topologyrandom.conf
(rev 0)
+++ gnunet/src/testbed/test_testbed_api_testbed_run_topologyrandom.conf
2012-11-01 21:12:56 UTC (rev 24666)
@@ -0,0 +1,81 @@
+[testbed]
+AUTOSTART = NO
+PORT = 12113
+ACCEPT_FROM = 127.0.0.1;
+HOSTNAME = localhost
+NEIGHBOUR_LIMIT = 100
+MAX_PARALLEL_OVERLAY_CONNECT_OPERATIONS = 10
+OVERLAY_TOPOLOGY = RANDOM
+OVERLAY_RANDOM_LINKS = 5
+#PREFIX = xterm -geometry 100x85 -T peer1 -e libtool --mode=execute gdb --args
+
+[fs]
+AUTOSTART = NO
+
+[resolver]
+AUTOSTART = NO
+
+[mesh]
+AUTOSTART = NO
+
+[dht]
+AUTOSTART = NO
+
+[block]
+plugins = dht test
+
+[dhtcache]
+QUOTA = 1 MB
+DATABASE = sqlite
+
+[transport]
+PLUGINS = tcp
+DEBUG = NO
+ACCEPT_FROM6 = ::1;
+ACCEPT_FROM = 127.0.0.1;
+NEIGHBOUR_LIMIT = 50
+PORT = 12365
+
+[ats]
+WAN_QUOTA_OUT = 3932160
+WAN_QUOTA_IN = 3932160
+
+[core]
+PORT = 12092
+AUTOSTART = YES
+
+[arm]
+DEFAULTSERVICES = core transport
+PORT = 12366
+DEBUG = NO
+
+[transport-tcp]
+TIMEOUT = 300 s
+PORT = 12368
+
+[TESTING]
+NUM_PEERS = 5
+WEAKRANDOM = YES
+DEBUG = YES
+HOSTKEYSFILE = ../../contrib/testing_hostkeys.dat
+MAX_CONCURRENT_SSH = 10
+USE_PROGRESSBARS = YES
+PEERGROUP_TIMEOUT = 2400 s
+
+[gnunetd]
+HOSTKEY = $SERVICEHOME/.hostkey
+
+[PATHS]
+SERVICEHOME = /tmp/test-testbed/
+
+[dns]
+AUTOSTART = NO
+
+[nse]
+AUTOSTART = NO
+
+[vpn]
+AUTOSTART = NO
+
+[nat]
+RETURN_LOCAL_ADDRESSES = YES
Modified: gnunet/src/testbed/testbed_api_testbed.c
===================================================================
--- gnunet/src/testbed/testbed_api_testbed.c 2012-11-01 16:58:00 UTC (rev
24665)
+++ gnunet/src/testbed/testbed_api_testbed.c 2012-11-01 21:12:56 UTC (rev
24666)
@@ -87,9 +87,11 @@
RC_INIT = 0,
/**
- * Peers have been started
+ * The testbed run is ready and the master callback can be called now. At
this
+ * time the peers are all started and if a topology is provided in the
+ * configuration the topology would have been attempted
*/
- RC_PEERS_STARTED,
+ RC_READY,
/**
* Peers are stopped
@@ -159,6 +161,12 @@
struct GNUNET_TESTBED_Peer **peers;
/**
+ * The topology generation operation. Will be null if no topology is set in
+ * the configuration
+ */
+ struct GNUNET_TESTBED_Operation *topology_operation;
+
+ /**
* The event mask for the controller
*/
uint64_t event_mask;
@@ -169,6 +177,11 @@
enum State state;
/**
+ * The topology which has to be achieved with the peers started in this
context
+ */
+ enum GNUNET_TESTBED_TopologyOption topology;
+
+ /**
* Current peer count for an operation; Set this to 0 and increment for each
* successful operation on a peer
*/
@@ -179,6 +192,17 @@
*/
unsigned int num_peers;
+ /**
+ * counter to count overlay connect attempts. This counter includes both
+ * successful and failed overlay connects
+ */
+ unsigned int oc_count;
+
+ /**
+ * Expected overlay connects. Should be zero if no topology is relavant
+ */
+ unsigned int num_oc;
+
};
@@ -281,6 +305,28 @@
/**
+ * Task to call master task
+ *
+ * @param cls the run context
+ * @param tc the task context
+ */
+static void
+call_master (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct RunContext *rc = cls;
+
+ if (NULL != rc->topology_operation)
+ {
+ GNUNET_TESTBED_operation_done (rc->topology_operation);
+ rc->topology_operation = NULL;
+ }
+ if (NULL != rc->master)
+ GNUNET_SCHEDULER_add_continuation (rc->master, rc->master_cls,
+ GNUNET_SCHEDULER_REASON_PREREQ_DONE);
+}
+
+
+/**
* Signature of the event handler function called by the
* respective event controller.
*
@@ -294,7 +340,25 @@
struct DLLOperation *dll_op;
unsigned int peer_id;
-
+ if (NULL != rc->topology_operation)
+ {
+ switch (event->type)
+ {
+ case GNUNET_TESTBED_ET_OPERATION_FINISHED:
+ case GNUNET_TESTBED_ET_CONNECT:
+ rc->oc_count++;
+ break;
+ default:
+ GNUNET_assert (0);
+ }
+ if (rc->oc_count == rc->num_oc)
+ {
+ rc->state = RC_READY;
+ GNUNET_SCHEDULER_add_continuation (&call_master, rc,
+ GNUNET_SCHEDULER_REASON_PREREQ_DONE);
+ }
+ return;
+ }
if ((RC_INIT != rc->state) &&
((GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type) ||
(GNUNET_TESTBED_ET_PEER_STOP == event->type)))
@@ -318,7 +382,7 @@
return;
switch (rc->state)
{
- case RC_PEERS_STARTED:
+ case RC_READY:
rc->state = RC_PEERS_STOPPED;
rc->peer_count = 0;
for (peer_id = 0; peer_id < rc->num_peers; peer_id++)
@@ -359,10 +423,32 @@
if (rc->peer_count < rc->num_peers)
return;
LOG (GNUNET_ERROR_TYPE_DEBUG, "Peers started successfully\n");
- rc->state = RC_PEERS_STARTED;
- if (NULL != rc->master)
- GNUNET_SCHEDULER_add_continuation (rc->master, rc->master_cls,
- GNUNET_SCHEDULER_REASON_PREREQ_DONE);
+ if (GNUNET_TESTBED_TOPOLOGY_OPTION_END != rc->topology)
+ {
+ if (GNUNET_TESTBED_TOPOLOGY_ERDOS_RENYI == rc->topology)
+ rc->topology_operation =
+ GNUNET_TESTBED_overlay_configure_topology (dll_op,
+ rc->num_peers,
+ rc->peers,
+ rc->topology,
+ rc->num_oc,
+
GNUNET_TESTBED_TOPOLOGY_OPTION_END);
+ else
+ rc->topology_operation =
+ GNUNET_TESTBED_overlay_configure_topology (dll_op,
+ rc->num_peers,
+ rc->peers,
+ rc->topology,
+
GNUNET_TESTBED_TOPOLOGY_OPTION_END);
+ if (NULL == rc->topology_operation)
+ LOG (GNUNET_ERROR_TYPE_WARNING,
+ "Not generating topology. Check number of peers\n");
+ else
+ return;
+ }
+ rc->state = RC_READY;
+ GNUNET_SCHEDULER_add_continuation (&call_master, rc,
+ GNUNET_SCHEDULER_REASON_PREREQ_DONE);
}
@@ -393,6 +479,8 @@
event_mask = rc->event_mask;
event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP);
event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED);
+ if (rc->topology < GNUNET_TESTBED_TOPOLOGY_OPTION_END)
+ event_mask |= GNUNET_TESTBED_ET_CONNECT;
rc->c =
GNUNET_TESTBED_controller_connect (cfg, rc->h, event_mask, &event_cb,
rc);
rc->peers =
@@ -427,6 +515,13 @@
{
if (NULL != rc->peers)
{
+ if (NULL != rc->topology_operation)
+ {
+ GNUNET_TESTBED_operation_done (rc->topology_operation);
+ rc->topology_operation = NULL;
+ }
+ if (RC_INIT == rc->state)
+ rc->state = RC_READY; /* Even though we haven't called the master
callback */
rc->peer_count = 0;
/* Check if some peers are stopped */
for (peer = 0; peer < rc->num_peers; peer++)
@@ -506,6 +601,8 @@
GNUNET_SCHEDULER_Task master, void *master_cls)
{
struct RunContext *rc;
+ char *topology;
+ unsigned long long random_links;
GNUNET_break (NULL == host_filename); /* Currently we do not support host
* files */
@@ -527,6 +624,49 @@
rc->master = master;
rc->master_cls = master_cls;
rc->state = RC_INIT;
+ rc->topology = GNUNET_TESTBED_TOPOLOGY_OPTION_END;
+ if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, "testbed",
+ "OVERLAY_TOPOLOGY",
+ &topology))
+ {
+ if (0 == strcmp (topology, "RANDOM"))
+ {
+ rc->topology = GNUNET_TESTBED_TOPOLOGY_ERDOS_RENYI;
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, "testbed",
+
"OVERLAY_RANDOM_LINKS",
+ &random_links))
+ {
+ /* OVERLAY option RANDOM requires OVERLAY_RANDOM_LINKS option to */
+ /* be set to the number of random links to be established */
+ GNUNET_break (0);
+ GNUNET_free (rc);
+ GNUNET_free (topology);
+ return;
+ }
+ if (random_links > UINT32_MAX)
+ {
+ GNUNET_break (0); /* Too big number */
+ GNUNET_free (rc);
+ GNUNET_free (topology);
+ return;
+ }
+ rc->num_oc = (unsigned int) random_links;
+ }
+ else if (0 == strcasecmp (topology, "CLIQUE"))
+ {
+ rc->topology = GNUNET_TESTBED_TOPOLOGY_CLIQUE;
+ rc->num_oc = num_peers * (num_peers - 1);
+ }
+ else if (0 == strcasecmp (topology, "LINE"))
+ {
+ rc->topology = GNUNET_TESTBED_TOPOLOGY_LINE;
+ rc->num_oc = num_peers - 1;
+ }
+ else
+ LOG (GNUNET_ERROR_TYPE_WARNING,
+ "Unknown topology %s given in configuration\n", topology);
+ GNUNET_free (topology);
+ }
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
&shutdown_run_task, rc);
}
@@ -558,6 +698,7 @@
enum GNUNET_TESTBED_TopologyOption underlay_topology,
va_list va)
{
+ GNUNET_assert (underlay_topology < GNUNET_TESTBED_TOPOLOGY_OPTION_END);
GNUNET_break (0);
return NULL;
}
@@ -588,7 +729,13 @@
enum GNUNET_TESTBED_TopologyOption underlay_topology,
...)
{
- GNUNET_break (0);
+ struct GNUNET_TESTBED_Testbed *testbed;
+ va_list vargs;
+
+ va_start (vargs, underlay_topology);
+ testbed = GNUNET_TESTBED_create_va (controller, num_hosts, hosts, num_peers,
+ peer_cfg, underlay_topology, vargs);
+ va_end (vargs);
return NULL;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r24666 - gnunet/src/testbed,
gnunet <=