aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorharsha <harsha@140774ce-b5e7-0310-ab8b-a85725594a96>2013-01-24 17:01:06 +0000
committerharsha <harsha@140774ce-b5e7-0310-ab8b-a85725594a96>2013-01-24 17:01:06 +0000
commitc6735c58801219b9d165ed7cfd8a56c9ab52687e (patch)
treef3dabf33446e9d158b3bb393ab5fc3635260bbe6 /src/testbed
parent979275084077167e3183aceab499c380ce19db79 (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.c137
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;