diff options
author | harsha <harsha@140774ce-b5e7-0310-ab8b-a85725594a96> | 2013-01-24 17:01:06 +0000 |
---|---|---|
committer | harsha <harsha@140774ce-b5e7-0310-ab8b-a85725594a96> | 2013-01-24 17:01:06 +0000 |
commit | c6735c58801219b9d165ed7cfd8a56c9ab52687e (patch) | |
tree | f3dabf33446e9d158b3bb393ab5fc3635260bbe6 /src/testbed | |
parent | 979275084077167e3183aceab499c380ce19db79 (diff) |
test harder
git-svn-id: https://gnunet.org/svn/gnunet@25889 140774ce-b5e7-0310-ab8b-a85725594a96
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/test_testbed_api_operations.c | 137 |
1 files changed, 127 insertions, 10 deletions
diff --git a/src/testbed/test_testbed_api_operations.c b/src/testbed/test_testbed_api_operations.c index cccaac4d01..2320c4d1bf 100644 --- a/src/testbed/test_testbed_api_operations.c +++ b/src/testbed/test_testbed_api_operations.c @@ -37,12 +37,12 @@ /** * Queue A. Initially the max active is set to 2 and then reduced to 0 - this * should block op2 even after op1 has finished. Later the max active is set to - * 1 and this should start op2 + * 2 and this should start op2 */ struct OperationQueue *q1; /** - * Queue B. Max active set to 1 + * Queue B. Max active set to 2 is not changed throughout the test */ struct OperationQueue *q2; @@ -57,12 +57,39 @@ struct GNUNET_TESTBED_Operation *op1; struct GNUNET_TESTBED_Operation *op2; /** - * This operation should go into both queues and should be started after op2 has - * been released. + * This operation should go into both queues and should consume 2 units of + * resources on both queues. Since op2 needs a resource from both queues and is + * queues before this operation, it will be blocked until op2 is released even + * though q1 has */ struct GNUNET_TESTBED_Operation *op3; /** + * Just like op3, this operation also consumes 2 units of resources on both + * queues. Since this is queued after op3 and both queues are at max active + * 2. This will be blocked until op3 is done. + */ +struct GNUNET_TESTBED_Operation *op4; + +/** + * This operation is started after op4 is released and should consume only 1 + * resource on queue q1. It should be started along with op6 and op7 + */ +struct GNUNET_TESTBED_Operation *op5; + +/** + * This operation is started after op4 is released and should consume only 1 + * resource on q2. It should be started along with op5 and op7 + */ +struct GNUNET_TESTBED_Operation *op6; + +/** + * This operation is started after op4 is released and should consume 1 resource + * on both queues q1 and q1. It should be started along with op5 and op6 + */ +struct GNUNET_TESTBED_Operation *op7; + +/** * The delay task identifier */ GNUNET_SCHEDULER_TaskIdentifier step_task; @@ -112,7 +139,37 @@ enum Test /** * op3 has finished */ - TEST_OP3_RELEASED + TEST_OP3_RELEASED, + + /** + * op4 has started + */ + TEST_OP4_STARTED, + + /** + * op4 has released + */ + TEST_OP4_RELEASED, + + /** + * op5, op6, op7 started + */ + TEST_OP5_6_7_STARTED, + + /** + * op5 has released + */ + TEST_OP5_RELEASED, + + /** + * op6 has released + */ + TEST_OP6_RELEASED, + + /** + * op7 has released + */ + TEST_OP7_RELEASED }; /** @@ -159,14 +216,18 @@ step (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) case TEST_OP1_STARTED: GNUNET_TESTBED_operation_release_ (op1); GNUNET_TESTBED_operation_queue_reset_max_active_ (q1, 0); - op3 = GNUNET_TESTBED_operation_create_ (&op3, &start_cb, &release_cb); - GNUNET_TESTBED_operation_queue_insert_ (q1, op3); - GNUNET_TESTBED_operation_queue_insert_ (q2, op3); + op3 = GNUNET_TESTBED_operation_create_ (&op3, &start_cb, &release_cb); + GNUNET_TESTBED_operation_queue_insert2_ (q1, op3, 2); + GNUNET_TESTBED_operation_queue_insert2_ (q2, op3, 2); GNUNET_TESTBED_operation_begin_wait_ (op3); + op4 = GNUNET_TESTBED_operation_create_ (&op4, &start_cb, &release_cb); + GNUNET_TESTBED_operation_queue_insert2_ (q1, op4, 2); + GNUNET_TESTBED_operation_queue_insert2_ (q2, op4, 2); + GNUNET_TESTBED_operation_begin_wait_ (op4); break; case TEST_OP1_RELEASED: result = TEST_PAUSE; - GNUNET_TESTBED_operation_queue_reset_max_active_ (q1, 1); + GNUNET_TESTBED_operation_queue_reset_max_active_ (q1, 2); break; case TEST_OP2_STARTED: GNUNET_TESTBED_operation_release_ (op2); @@ -174,6 +235,9 @@ step (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) case TEST_OP3_STARTED: GNUNET_TESTBED_operation_release_ (op3); break; + case TEST_OP4_STARTED: + GNUNET_TESTBED_operation_release_ (op4); + break; default: GNUNET_assert (0); } @@ -208,6 +272,26 @@ start_cb (void *cls) GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL); break; + case TEST_OP3_RELEASED: + GNUNET_assert (&op4 == cls); + result = TEST_OP4_STARTED; + GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); + step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, + NULL); + break; + case TEST_OP4_RELEASED: + { + static int nops; + + nops++; + if (nops == 3) + { + result = TEST_OP5_6_7_STARTED; + GNUNET_TESTBED_operation_release_ (op5); + op5 = NULL; + } + } + break; default: GNUNET_assert (0); } @@ -244,8 +328,40 @@ release_cb (void *cls) case TEST_OP3_STARTED: GNUNET_assert (&op3 == cls); result = TEST_OP3_RELEASED; + GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); + break; + case TEST_OP4_STARTED: + GNUNET_assert (&op4 == cls); + result = TEST_OP4_RELEASED; + GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task); + op5 = GNUNET_TESTBED_operation_create_ (&op5, &start_cb, &release_cb); + GNUNET_TESTBED_operation_queue_insert2_ (q1, op5, 1); + GNUNET_TESTBED_operation_begin_wait_ (op5); + op6 = GNUNET_TESTBED_operation_create_ (&op6, &start_cb, &release_cb); + GNUNET_TESTBED_operation_queue_insert2_ (q2, op6, 1); + GNUNET_TESTBED_operation_begin_wait_ (op6); + op7 = GNUNET_TESTBED_operation_create_ (&op7, &start_cb, &release_cb); + GNUNET_TESTBED_operation_queue_insert2_ (q1, op7, 1); + GNUNET_TESTBED_operation_queue_insert2_ (q2, op7, 1); + GNUNET_TESTBED_operation_begin_wait_ (op7); + break; + case TEST_OP5_6_7_STARTED: + result = TEST_OP5_RELEASED; + op5 = NULL; + GNUNET_TESTBED_operation_release_ (op6); + break; + case TEST_OP5_RELEASED: + op6 = NULL; + result = TEST_OP6_RELEASED; + GNUNET_TESTBED_operation_release_ (op7); + break; + case TEST_OP6_RELEASED: + result = TEST_OP7_RELEASED; + op7 = NULL; GNUNET_TESTBED_operation_queue_destroy_ (q1); GNUNET_TESTBED_operation_queue_destroy_ (q2); + q1 = NULL; + q2 = NULL; break; default: GNUNET_assert (0); @@ -281,6 +397,7 @@ run (void *cls, char *const *args, const char *cfgfile, result = TEST_INIT; } + /** * Main function */ @@ -297,7 +414,7 @@ main (int argc, char **argv) GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, "test_testbed_api_operations", "nohelp", options, &run, NULL); - if ((GNUNET_OK != ret) || (TEST_OP3_RELEASED != result)) + if ((GNUNET_OK != ret) || (TEST_OP7_RELEASED != result)) return 1; op1 = NULL; op2 = NULL; |