aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/test_testbed_api_operations.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/testbed/test_testbed_api_operations.c')
-rw-r--r--src/testbed/test_testbed_api_operations.c87
1 files changed, 75 insertions, 12 deletions
diff --git a/src/testbed/test_testbed_api_operations.c b/src/testbed/test_testbed_api_operations.c
index af3e68c20..3f556c88f 100644
--- a/src/testbed/test_testbed_api_operations.c
+++ b/src/testbed/test_testbed_api_operations.c
@@ -35,6 +35,12 @@
35 GNUNET_log (kind, __VA_ARGS__) 35 GNUNET_log (kind, __VA_ARGS__)
36 36
37/** 37/**
38 * Delay to start step task
39 */
40#define STEP_DELAY \
41 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 500)
42
43/**
38 * Queue A. Initially the max active is set to 2 and then reduced to 0 - this 44 * Queue A. Initially the max active is set to 2 and then reduced to 0 - this
39 * should block op2 even after op1 has finished. Later the max active is set to 45 * should block op2 even after op1 has finished. Later the max active is set to
40 * 2 and this should start op2 46 * 2 and this should start op2
@@ -93,11 +99,20 @@ struct GNUNET_TESTBED_Operation *op7;
93 99
94/** 100/**
95 * This operation is started after op6 is finished in step task. It consumes 2 101 * This operation is started after op6 is finished in step task. It consumes 2
96 * resources on both queues q1 and q1. 102 * resources on both queues q1 and q2. This operation should evict op7. After
103 * starting, it should be made inactive, active and inactive again in the step task.
97 */ 104 */
98struct GNUNET_TESTBED_Operation *op8; 105struct GNUNET_TESTBED_Operation *op8;
99 106
100/** 107/**
108 * This opration is started after activating op8. It should consume a resource
109 * on queues q1 and q2. It should not be started until op8 is again made
110 * inactive at which point it should be released. It can be released as soon as
111 * it begins.
112 */
113struct GNUNET_TESTBED_Operation *op9;
114
115/**
101 * The delay task identifier 116 * The delay task identifier
102 */ 117 */
103GNUNET_SCHEDULER_TaskIdentifier step_task; 118GNUNET_SCHEDULER_TaskIdentifier step_task;
@@ -190,9 +205,29 @@ enum Test
190 TEST_OP8_STARTED, 205 TEST_OP8_STARTED,
191 206
192 /** 207 /**
208 * op8 is inactive
209 */
210 TEST_OP8_INACTIVE_1,
211
212 /**
213 * op8 is active
214 */
215 TEST_OP8_ACTIVE,
216
217 /**
193 * op8 has been released 218 * op8 has been released
194 */ 219 */
195 TEST_OP8_RELEASED 220 TEST_OP8_RELEASED,
221
222 /**
223 * op9 has started
224 */
225 TEST_OP9_STARTED,
226
227 /**
228 * op9 has been released
229 */
230 TEST_OP9_RELEASED
196}; 231};
197 232
198/** 233/**
@@ -269,7 +304,26 @@ step (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
269 GNUNET_TESTBED_operation_begin_wait_ (op8); 304 GNUNET_TESTBED_operation_begin_wait_ (op8);
270 break; 305 break;
271 case TEST_OP8_STARTED: 306 case TEST_OP8_STARTED:
272 GNUNET_TESTBED_operation_release_ (op8); 307 GNUNET_TESTBED_operation_inactivate_ (op8);
308 result = TEST_OP8_INACTIVE_1;
309 step_task = GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
310 break;
311 case TEST_OP8_INACTIVE_1:
312 GNUNET_TESTBED_operation_activate_ (op8);
313 result = TEST_OP8_ACTIVE;
314 op9 = GNUNET_TESTBED_operation_create_ (&op9, &start_cb, &release_cb);
315 GNUNET_TESTBED_operation_queue_insert2_ (q1, op9, 1);
316 GNUNET_TESTBED_operation_queue_insert2_ (q2, op9, 1);
317 GNUNET_TESTBED_operation_begin_wait_ (op9);
318 step_task = GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
319 break;
320 case TEST_OP8_ACTIVE:
321 GNUNET_TESTBED_operation_inactivate_ (op8);
322 /* op8 should be released by now due to above call */
323 GNUNET_assert (TEST_OP8_RELEASED == result);
324 break;
325 case TEST_OP9_STARTED:
326 GNUNET_TESTBED_operation_release_ (op9);
273 break; 327 break;
274 default: 328 default:
275 GNUNET_assert (0); 329 GNUNET_assert (0);
@@ -292,28 +346,28 @@ start_cb (void *cls)
292 result = TEST_OP1_STARTED; 346 result = TEST_OP1_STARTED;
293 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); 347 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
294 step_task = 348 step_task =
295 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); 349 GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
296 break; 350 break;
297 case TEST_PAUSE: 351 case TEST_PAUSE:
298 GNUNET_assert (&op2 == cls); 352 GNUNET_assert (&op2 == cls);
299 result = TEST_OP2_STARTED; 353 result = TEST_OP2_STARTED;
300 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); 354 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
301 step_task = 355 step_task =
302 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); 356 GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
303 break; 357 break;
304 case TEST_OP2_RELEASED: 358 case TEST_OP2_RELEASED:
305 GNUNET_assert (&op3 == cls); 359 GNUNET_assert (&op3 == cls);
306 result = TEST_OP3_STARTED; 360 result = TEST_OP3_STARTED;
307 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); 361 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
308 step_task = 362 step_task =
309 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); 363 GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
310 break; 364 break;
311 case TEST_OP3_RELEASED: 365 case TEST_OP3_RELEASED:
312 GNUNET_assert (&op4 == cls); 366 GNUNET_assert (&op4 == cls);
313 result = TEST_OP4_STARTED; 367 result = TEST_OP4_STARTED;
314 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); 368 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
315 step_task = 369 step_task =
316 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); 370 GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
317 break; 371 break;
318 case TEST_OP4_RELEASED: 372 case TEST_OP4_RELEASED:
319 { 373 {
@@ -331,7 +385,12 @@ start_cb (void *cls)
331 case TEST_OP7_RELEASED: 385 case TEST_OP7_RELEASED:
332 GNUNET_assert (&op8 == cls); 386 GNUNET_assert (&op8 == cls);
333 result = TEST_OP8_STARTED; 387 result = TEST_OP8_STARTED;
334 step_task = GNUNET_SCHEDULER_add_now (&step, NULL); 388 step_task = GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
389 break;
390 case TEST_OP8_RELEASED:
391 GNUNET_assert (&op9 == cls);
392 result = TEST_OP9_STARTED;
393 step_task = GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
335 break; 394 break;
336 default: 395 default:
337 GNUNET_assert (0); 396 GNUNET_assert (0);
@@ -358,13 +417,12 @@ release_cb (void *cls)
358 result = TEST_OP1_RELEASED; 417 result = TEST_OP1_RELEASED;
359 op1 = NULL; 418 op1 = NULL;
360 step_task = 419 step_task =
361 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); 420 GNUNET_SCHEDULER_add_delayed (STEP_DELAY, &step, NULL);
362 break; 421 break;
363 case TEST_OP2_STARTED: 422 case TEST_OP2_STARTED:
364 GNUNET_assert (&op2 == cls); 423 GNUNET_assert (&op2 == cls);
365 result = TEST_OP2_RELEASED; 424 result = TEST_OP2_RELEASED;
366 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); 425 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
367 //step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL);
368 break; 426 break;
369 case TEST_OP3_STARTED: 427 case TEST_OP3_STARTED:
370 GNUNET_assert (&op3 == cls); 428 GNUNET_assert (&op3 == cls);
@@ -402,9 +460,13 @@ release_cb (void *cls)
402 op7 = NULL; 460 op7 = NULL;
403 result = TEST_OP7_RELEASED; 461 result = TEST_OP7_RELEASED;
404 break; 462 break;
405 case TEST_OP8_STARTED: 463 case TEST_OP8_ACTIVE:
406 result = TEST_OP8_RELEASED; 464 result = TEST_OP8_RELEASED;
407 op8 = NULL; 465 op8 = NULL;
466 break;
467 case TEST_OP9_STARTED:
468 GNUNET_assert (&op9 == cls);
469 result = TEST_OP9_RELEASED;
408 GNUNET_TESTBED_operation_queue_destroy_ (q1); 470 GNUNET_TESTBED_operation_queue_destroy_ (q1);
409 GNUNET_TESTBED_operation_queue_destroy_ (q2); 471 GNUNET_TESTBED_operation_queue_destroy_ (q2);
410 q1 = NULL; 472 q1 = NULL;
@@ -461,7 +523,7 @@ main (int argc, char **argv)
461 GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, 523 GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2,
462 "test_testbed_api_operations", "nohelp", options, 524 "test_testbed_api_operations", "nohelp", options,
463 &run, NULL); 525 &run, NULL);
464 if ((GNUNET_OK != ret) || (TEST_OP8_RELEASED != result)) 526 if ((GNUNET_OK != ret) || (TEST_OP9_RELEASED != result))
465 return 1; 527 return 1;
466 op1 = NULL; 528 op1 = NULL;
467 op2 = NULL; 529 op2 = NULL;
@@ -471,6 +533,7 @@ main (int argc, char **argv)
471 op6 = NULL; 533 op6 = NULL;
472 op7 = NULL; 534 op7 = NULL;
473 op8 = NULL; 535 op8 = NULL;
536 op9 = NULL;
474 q1 = NULL; 537 q1 = NULL;
475 q2 = NULL; 538 q2 = NULL;
476 return 0; 539 return 0;