aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-08-31 16:24:14 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-08-31 16:24:14 +0000
commit5bd025ac2ef652ac31947388bc5bf4a051e1838c (patch)
tree18444ad8b6bc313e8140b86b8e4e1b42e1cbe123 /src/testbed
parente0d211f88998bd642ee8ba9db9a43e7879e6c3e8 (diff)
downloadgnunet-5bd025ac2ef652ac31947388bc5bf4a051e1838c.tar.gz
gnunet-5bd025ac2ef652ac31947388bc5bf4a051e1838c.zip
implemented GNUNET_TESTBED_test_run
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/testbed_api_test.c112
1 files changed, 111 insertions, 1 deletions
diff --git a/src/testbed/testbed_api_test.c b/src/testbed/testbed_api_test.c
index b532cf64e..0b3844011 100644
--- a/src/testbed/testbed_api_test.c
+++ b/src/testbed/testbed_api_test.c
@@ -22,11 +22,98 @@
22 * @file testbed/testbed_api_test.c 22 * @file testbed/testbed_api_test.c
23 * @brief high-level test function 23 * @brief high-level test function
24 * @author Christian Grothoff 24 * @author Christian Grothoff
25 * @author Sree Harsha Totakura
25 */ 26 */
26#include "platform.h" 27#include "platform.h"
27#include "gnunet_testbed_service.h" 28#include "gnunet_testbed_service.h"
28 29
29 30
31/**
32 * Context information for test run
33 */
34struct TestRunContext
35{
36 /**
37 * Test master callback
38 */
39 GNUNET_TESTBED_TestMaster test_master;
40
41 /**
42 * Closure for test master
43 */
44 void *test_master_cls;
45
46 /**
47 * Number of peers to start
48 */
49 unsigned int num_peers;
50
51 /**
52 * counter for loading peers
53 */
54 unsigned int peer_cnt;
55
56 /**
57 * Followed by peers list
58 */
59 struct GNUNET_TESTBED_Peer *peers[0];
60};
61
62
63/**
64 * Controller event callback
65 *
66 * @param cls NULL
67 * @param event the controller event
68 */
69static void
70controller_event_cb (void *cls,
71 const struct GNUNET_TESTBED_EventInformation *event)
72{
73 struct TestRunContext *rc = cls;
74
75 if (rc->peer_cnt == rc->num_peers)
76 return;
77 GNUNET_assert (GNUNET_TESTBED_ET_PEER_START == event->type);
78 GNUNET_assert (NULL == rc->peers[rc->peer_cnt]);
79 GNUNET_assert (NULL != event->details.peer_start.peer);
80 rc->peers[rc->peer_cnt++] = event->details.peer_start.peer;
81}
82
83
84/**
85 * Task to be executed when peers are ready
86 *
87 * @param cls NULL
88 * @param tc the task context
89 */
90static void
91master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
92{
93 struct TestRunContext *rc = cls;
94
95 GNUNET_assert (rc->peer_cnt == rc->num_peers);
96 rc->test_master (rc->test_master_cls, rc->num_peers, rc->peers);
97}
98
99
100/**
101 * Main run function.
102 *
103 * @param cls NULL
104 * @param args arguments passed to GNUNET_PROGRAM_run
105 * @param cfgfile the path to configuration file
106 * @param cfg the configuration file handle
107 */
108static void
109run (void *cls, char *const *args, const char *cfgfile,
110 const struct GNUNET_CONFIGURATION_Handle *config)
111{
112 struct TestRunContext *rc = cls;
113
114 GNUNET_TESTBED_run (NULL, config, rc->num_peers, 0, &controller_event_cb,
115 rc, &master_task, rc);
116}
30 117
31 118
32/** 119/**
@@ -58,7 +145,30 @@ GNUNET_TESTBED_test_run (const char *testname, const char *cfg_filename,
58 GNUNET_TESTBED_TestMaster test_master, 145 GNUNET_TESTBED_TestMaster test_master,
59 void *test_master_cls) 146 void *test_master_cls)
60{ 147{
61 GNUNET_break (0); 148 char *argv2[] = {
149 NULL,
150 "-c",
151 NULL,
152 NULL
153 };
154 struct GNUNET_GETOPT_CommandLineOption options[] = {
155 GNUNET_GETOPT_OPTION_END
156 };
157 struct TestRunContext *rc;
158
159 argv2[0] = GNUNET_strdup (testname);
160 argv2[2] = GNUNET_strdup (cfg_filename);
161 GNUNET_assert (NULL != test_master);
162 rc = GNUNET_malloc (sizeof (struct TestRunContext) +
163 (num_peers * sizeof (struct GNUNET_TESTBED_Peer *)));
164 rc->test_master = test_master;
165 rc->test_master_cls = test_master_cls;
166 rc->num_peers = rc->num_peers;
167 (void) GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2,
168 "testname", "nohelp", options, &run, rc);
169 GNUNET_free (rc);
170 GNUNET_free (argv2[0]);
171 GNUNET_free (argv2[2]);
62} 172}
63 173
64 174