gnunet-svn
[Top][All Lists]
Advanced

[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;
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]