aboutsummaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
Diffstat (limited to 'src/testing')
-rw-r--r--src/testing/testing_api_loop.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/testing/testing_api_loop.c b/src/testing/testing_api_loop.c
index 1b50b9ff5..ccee76898 100644
--- a/src/testing/testing_api_loop.c
+++ b/src/testing/testing_api_loop.c
@@ -30,6 +30,9 @@
30#include "gnunet_testing_ng_lib.h" 30#include "gnunet_testing_ng_lib.h"
31#include "testing.h" 31#include "testing.h"
32 32
33#define CHECK_FINISHED_PERIOD \
34 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
35
33struct GNUNET_TESTING_Interpreter *is; 36struct GNUNET_TESTING_Interpreter *is;
34 37
35/** 38/**
@@ -188,14 +191,20 @@ run_finish_task_next (void *cls)
188 struct FinishTaskClosure *ftc = cls; 191 struct FinishTaskClosure *ftc = cls;
189 const struct GNUNET_TESTING_Command *cmd = ftc->cmd; 192 const struct GNUNET_TESTING_Command *cmd = ftc->cmd;
190 struct GNUNET_TESTING_Interpreter *is = ftc->is; 193 struct GNUNET_TESTING_Interpreter *is = ftc->is;
194 unsigned int finished = cmd->finish (cmd->cls, &interpreter_next, is);
191 195
192 if (cmd->finish (cmd->cls, &interpreter_next, is)) 196 if (GNUNET_YES == finished)
193 { 197 {
194 is->finish_task = GNUNET_SCHEDULER_add_now (&run_finish_task_next, ftc); 198 is->finish_task = NULL;
199 }
200 else if (GNUNET_NO == finished)
201 {
202 is->finish_task = GNUNET_SCHEDULER_add_delayed (CHECK_FINISHED_PERIOD,
203 &run_finish_task_next, ftc);
195 } 204 }
196 else 205 else
197 { 206 {
198 is->finish_task = NULL; 207 GNUNET_TESTING_interpreter_fail (is);
199 } 208 }
200 209
201} 210}
@@ -210,6 +219,7 @@ run_finish_task_sync (void *cls)
210 struct FinishTaskClosure *ftc; 219 struct FinishTaskClosure *ftc;
211 struct SyncState *sync_state = sync_cmd->cls; 220 struct SyncState *sync_state = sync_cmd->cls;
212 struct GNUNET_SCHEDULER_Task *finish_task = sync_state->finish_task; 221 struct GNUNET_SCHEDULER_Task *finish_task = sync_state->finish_task;
222 unsigned int finished = cmd->finish (cmd->cls, &interpreter_next, is);
213 223
214 GNUNET_assert (NULL != finish_task); 224 GNUNET_assert (NULL != finish_task);
215 ftc = GNUNET_new (struct FinishTaskClosure); 225 ftc = GNUNET_new (struct FinishTaskClosure);
@@ -222,17 +232,21 @@ run_finish_task_sync (void *cls)
222 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 232 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
223 "The command with label %s did not finish its asynchronous task in time.\n", 233 "The command with label %s did not finish its asynchronous task in time.\n",
224 cmd->label); 234 cmd->label);
225 is->result = GNUNET_SYSERR; 235 GNUNET_TESTING_interpreter_fail (is);
226 GNUNET_SCHEDULER_shutdown ();
227 } 236 }
228 237
229 if (cmd->finish (cmd->cls, run_finish_task_next, ftc)) 238 if (GNUNET_YES == finished)
239 {
240 finish_task = NULL;
241 }
242 else if (GNUNET_NO == finished)
230 { 243 {
231 finish_task = GNUNET_SCHEDULER_add_now (&run_finish_task_sync, stc); 244 finish_task = GNUNET_SCHEDULER_add_delayed (CHECK_FINISHED_PERIOD,
245 &run_finish_task_sync, stc);
232 } 246 }
233 else 247 else
234 { 248 {
235 finish_task = NULL; 249 GNUNET_TESTING_interpreter_fail (is);
236 } 250 }
237} 251}
238 252
@@ -252,8 +266,10 @@ start_finish_on_ref (void *cls,
252 stc->sync_cmd = cmd; 266 stc->sync_cmd = cmd;
253 stc->is = is; 267 stc->is = is;
254 sync_state->start_finish_time = GNUNET_TIME_absolute_get (); 268 sync_state->start_finish_time = GNUNET_TIME_absolute_get ();
255 sync_state->finish_task = GNUNET_SCHEDULER_add_now (&run_finish_task_sync, 269 sync_state->finish_task = GNUNET_SCHEDULER_add_delayed (
256 stc); 270 CHECK_FINISHED_PERIOD,
271 &run_finish_task_sync,
272 stc);
257} 273}
258 274
259 275
@@ -281,7 +297,7 @@ GNUNET_TESTING_cmd_finish (const char *finish_label,
281 297
282 298
283const struct GNUNET_TESTING_Command 299const struct GNUNET_TESTING_Command
284GNUNET_TESTING_cmd_make_asynchronous (const struct GNUNET_TESTING_Command cmd) 300GNUNET_TESTING_cmd_make_unblocking (const struct GNUNET_TESTING_Command cmd)
285{ 301{
286 302
287 GNUNET_assert (NULL != cmd.finish); 303 GNUNET_assert (NULL != cmd.finish);
@@ -375,10 +391,12 @@ interpreter_run (void *cls)
375 GNUNET_SCHEDULER_shutdown (); 391 GNUNET_SCHEDULER_shutdown ();
376 return; 392 return;
377 } 393 }
378 394 else if (NULL != cmd)
379 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 395 {
380 "Running command `%s'\n", 396 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
381 cmd->label); 397 "Running command `%s'\n",
398 cmd->label);
399 }
382 cmd->start_time 400 cmd->start_time
383 = cmd->last_req_time 401 = cmd->last_req_time
384 = GNUNET_TIME_absolute_get (); 402 = GNUNET_TIME_absolute_get ();
@@ -388,10 +406,14 @@ interpreter_run (void *cls)
388 is); 406 is);
389 if ((NULL != cmd->finish) && (GNUNET_NO == cmd->asynchronous_finish)) 407 if ((NULL != cmd->finish) && (GNUNET_NO == cmd->asynchronous_finish))
390 { 408 {
409 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
410 "Next task will not be called directly!\n");
391 ftc = GNUNET_new (struct FinishTaskClosure); 411 ftc = GNUNET_new (struct FinishTaskClosure);
392 ftc->cmd = cmd; 412 ftc->cmd = cmd;
393 ftc->is = is; 413 ftc->is = is;
394 cmd->finish_task = GNUNET_SCHEDULER_add_now (run_finish_task_next, ftc); 414 cmd->finish_task = GNUNET_SCHEDULER_add_delayed (CHECK_FINISHED_PERIOD,
415 &run_finish_task_next,
416 ftc);
395 } 417 }
396 else 418 else
397 { 419 {