aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests/ats-testing-experiment.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-23 14:56:59 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-23 14:56:59 +0000
commitee1c5c74a2409a52af706e613bd86a26341abba8 (patch)
treeef18e73357f63737c7560cc3a3ca7fb211bcd468 /src/ats-tests/ats-testing-experiment.c
parent65b732a465152cf0769651397ff9d2c0980e1727 (diff)
downloadgnunet-ee1c5c74a2409a52af706e613bd86a26341abba8.tar.gz
gnunet-ee1c5c74a2409a52af706e613bd86a26341abba8.zip
new logging functionality
Diffstat (limited to 'src/ats-tests/ats-testing-experiment.c')
-rw-r--r--src/ats-tests/ats-testing-experiment.c148
1 files changed, 140 insertions, 8 deletions
diff --git a/src/ats-tests/ats-testing-experiment.c b/src/ats-tests/ats-testing-experiment.c
index d0e74d1c3..fca374324 100644
--- a/src/ats-tests/ats-testing-experiment.c
+++ b/src/ats-tests/ats-testing-experiment.c
@@ -35,20 +35,141 @@ create_experiment ()
35 e->name = NULL; 35 e->name = NULL;
36 e->num_masters = 0; 36 e->num_masters = 0;
37 e->num_slaves = 0; 37 e->num_slaves = 0;
38 38 e->start = NULL;
39 e->total_duration = GNUNET_TIME_UNIT_ZERO;
39 return e; 40 return e;
40} 41}
41 42
42static void 43static void
43free_experiment (struct Experiment *e) 44free_experiment (struct Experiment *e)
44{ 45{
46 struct Episode *cur;
47 struct Episode *next;
48
49 next = e->start;
50 for (cur = next; NULL != cur; cur = next)
51 {
52 next = cur->next;
53 GNUNET_free (cur);
54 }
55
45 GNUNET_free_non_null (e->name); 56 GNUNET_free_non_null (e->name);
46 GNUNET_free_non_null (e->cfg_file); 57 GNUNET_free_non_null (e->cfg_file);
47 GNUNET_free (e); 58 GNUNET_free (e);
48} 59}
49 60
61static int
62load_episodes (struct Experiment *e, struct GNUNET_CONFIGURATION_Handle *cfg)
63{
64 int e_counter = 0;
65 char *sec_name;
66 struct GNUNET_TIME_Relative e_duration;
67 struct Episode *cur;
68 struct Episode *last;
69
70 e_counter = 0;
71 last = NULL;
72 while (1)
73 {
74 GNUNET_asprintf(&sec_name, "episode-%u", e_counter);
75 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg,
76 sec_name, "duration", &e_duration))
77 {
78 GNUNET_free (sec_name);
79 break;
80 }
81
82 cur = GNUNET_new (struct Episode);
83 cur->duration = e_duration;
84 cur->id = e_counter;
85
86 fprintf (stderr, "Found episode %u with duration %s \n",
87 e_counter,
88 GNUNET_STRINGS_relative_time_to_string(cur->duration, GNUNET_YES));
89
90 /* Update experiment */
91 e->num_episodes ++;
92 e->total_duration = GNUNET_TIME_relative_add(e->total_duration, cur->duration);
93 /* Put in linked list */
94 if (NULL == last)
95 e->start = cur;
96 else
97 last->next = cur;
98
99 GNUNET_free (sec_name);
100 e_counter ++;
101 last = cur;
102 }
103 return e_counter;
104}
105
106static void
107timeout_experiment (void *cls, const struct GNUNET_SCHEDULER_TaskContext* tc)
108{
109 struct Experiment *e = cls;
110 e->experiment_timeout_task = GNUNET_SCHEDULER_NO_TASK;
111 fprintf (stderr, "Experiment timeout!\n");
112
113 e->e_done_cb (e, GNUNET_SYSERR);
114}
115
116static void
117timeout_episode (void *cls, const struct GNUNET_SCHEDULER_TaskContext* tc)
118{
119 struct Experiment *e = cls;
120 e->episode_timeout_task = GNUNET_SCHEDULER_NO_TASK;
121 e->ep_done_cb (e->cur);
122
123 /* Scheduling next */
124 e->cur = e->cur->next;
125 if (NULL == e->cur)
126 {
127 /* done */
128 fprintf (stderr, "Last episode done!\n");
129 if (GNUNET_SCHEDULER_NO_TASK != e->experiment_timeout_task)
130 {
131 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
132 e->experiment_timeout_task = GNUNET_SCHEDULER_NO_TASK;
133 }
134 e->e_done_cb (e, GNUNET_OK);
135 return;
136 }
137
138 fprintf (stderr, "Running episode %u with timeout %s\n",
139 e->cur->id,
140 GNUNET_STRINGS_relative_time_to_string(e->cur->duration, GNUNET_YES));
141 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
142 &timeout_episode, e);
143}
144
145
146void
147GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
148 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb,
149 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb)
150{
151 fprintf (stderr, "Running experiment `%s' with timeout %s\n", e->name,
152 GNUNET_STRINGS_relative_time_to_string(e->max_duration, GNUNET_YES));
153 e->e_done_cb = e_done_cb;
154 e->ep_done_cb = ep_done_cb;
155
156 /* Start total time out */
157 e->experiment_timeout_task = GNUNET_SCHEDULER_add_delayed (e->max_duration,
158 &timeout_experiment, e);
159
160 /* Start */
161 e->cur = e->start;
162 fprintf (stderr, "Running episode %u with timeout %s\n",
163 e->cur->id,
164 GNUNET_STRINGS_relative_time_to_string(e->cur->duration, GNUNET_YES));
165 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
166 &timeout_episode, e);
167
168
169}
170
50struct Experiment * 171struct Experiment *
51GNUNET_ATS_TEST_experimentation_start (char *filename) 172GNUNET_ATS_TEST_experimentation_load (char *filename)
52{ 173{
53 struct Experiment *e; 174 struct Experiment *e;
54 struct GNUNET_CONFIGURATION_Handle *cfg; 175 struct GNUNET_CONFIGURATION_Handle *cfg;
@@ -57,7 +178,7 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
57 cfg = GNUNET_CONFIGURATION_create(); 178 cfg = GNUNET_CONFIGURATION_create();
58 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, filename)) 179 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, filename))
59 { 180 {
60 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to load `%s'\n", filename); 181 fprintf (stderr, "Failed to load `%s'\n", filename);
61 GNUNET_CONFIGURATION_destroy (cfg); 182 GNUNET_CONFIGURATION_destroy (cfg);
62 return NULL; 183 return NULL;
63 } 184 }
@@ -72,7 +193,7 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
72 return NULL; 193 return NULL;
73 } 194 }
74 else 195 else
75 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment name: `%s'\n", e->name); 196 fprintf (stderr, "Experiment name: `%s'\n", e->name);
76 197
77 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg, "experiment", 198 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg, "experiment",
78 "cfg_file", &e->cfg_file)) 199 "cfg_file", &e->cfg_file))
@@ -82,7 +203,7 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
82 return NULL; 203 return NULL;
83 } 204 }
84 else 205 else
85 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment name: `%s'\n", e->cfg_file); 206 fprintf (stderr, "Experiment name: `%s'\n", e->cfg_file);
86 207
87 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number(cfg, "experiment", 208 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number(cfg, "experiment",
88 "masters", &e->num_masters)) 209 "masters", &e->num_masters))
@@ -92,7 +213,7 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
92 return NULL; 213 return NULL;
93 } 214 }
94 else 215 else
95 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment masters: `%llu'\n", 216 fprintf (stderr, "Experiment masters: `%llu'\n",
96 e->num_masters); 217 e->num_masters);
97 218
98 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number(cfg, "experiment", 219 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number(cfg, "experiment",
@@ -103,7 +224,7 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
103 return NULL; 224 return NULL;
104 } 225 }
105 else 226 else
106 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment slaves: `%llu'\n", 227 fprintf (stderr, "Experiment slaves: `%llu'\n",
107 e->num_slaves); 228 e->num_slaves);
108 229
109 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, "experiment", 230 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, "experiment",
@@ -114,15 +235,26 @@ GNUNET_ATS_TEST_experimentation_start (char *filename)
114 return NULL; 235 return NULL;
115 } 236 }
116 else 237 else
117 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment duration: `%s'\n", 238 fprintf (stderr, "Experiment duration: `%s'\n",
118 GNUNET_STRINGS_relative_time_to_string (e->max_duration, GNUNET_YES)); 239 GNUNET_STRINGS_relative_time_to_string (e->max_duration, GNUNET_YES));
119 240
241 load_episodes (e, cfg);
242 fprintf (stderr, "Loaded %u episodes with total duration %s\n",
243 e->num_episodes,
244 GNUNET_STRINGS_relative_time_to_string (e->total_duration, GNUNET_YES));
245
246 GNUNET_CONFIGURATION_destroy (cfg);
120 return e; 247 return e;
121} 248}
122 249
123void 250void
124GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e) 251GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e)
125{ 252{
253 if (GNUNET_SCHEDULER_NO_TASK != e->experiment_timeout_task)
254 {
255 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
256 e->experiment_timeout_task = GNUNET_SCHEDULER_NO_TASK;
257 }
126 free_experiment (e); 258 free_experiment (e);
127} 259}
128 260