diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-23 14:56:59 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-23 14:56:59 +0000 |
commit | ee1c5c74a2409a52af706e613bd86a26341abba8 (patch) | |
tree | ef18e73357f63737c7560cc3a3ca7fb211bcd468 /src/ats-tests/ats-testing-experiment.c | |
parent | 65b732a465152cf0769651397ff9d2c0980e1727 (diff) | |
download | gnunet-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.c | 148 |
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 | ||
42 | static void | 43 | static void |
43 | free_experiment (struct Experiment *e) | 44 | free_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 | ||
61 | static int | ||
62 | load_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 | |||
106 | static void | ||
107 | timeout_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 | |||
116 | static void | ||
117 | timeout_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 | |||
146 | void | ||
147 | GNUNET_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 | |||
50 | struct Experiment * | 171 | struct Experiment * |
51 | GNUNET_ATS_TEST_experimentation_start (char *filename) | 172 | GNUNET_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 | ||
123 | void | 250 | void |
124 | GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e) | 251 | GNUNET_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 | ||